已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第6讲JDBC核心包API,2,执行SQL命令,在执行SQL命令之前,首先需要创建一个,要创建statement对象,需要使用调用,所获得的Connection对象.,DriverManager.getConnection方法,Connectionconn=DriverManager.getConnection(url);Statementstat=conn.createStatement();,Statement对象。,3,执行SQL命令,接着,将要执行的SQL语句放入字符串中,例如:,然后,调用Statement类中的executeUpdate方法:,Stringcommang=“UPDATEBooks”+“SETPrice=Price5.00”+“WHERETitleNOTLIKE%Introduction%”;,state.executeUpdate(command),4,执行SQL命令,接着,将要执行的SQL语句放入字符串中,例如:,然后,调用Statement类中的executeUpdate方法:,Stringcommang=“UPDATEBooks”+“SETPrice=Price5.00”+“WHERETitleNOTLIKE%Introduction%”;,state.executeUpdate(command),executeUpdate方法将返回受SQL命令影响的行数.,例如,本例中调用executeUpdate方法将返回那些,降价美元的图书总数,5,执行SQL命令,executeUpdate方法即可以执行诸如INSERT、UPDATE和,DELETE之类的操作,也可以执行诸如CREATETABLE和,DROPTABLE之类的数据定义命令。,另外,还有一个execute方法可以执行任意的SQL语句。,此方法通常只用于用户提供的交互式查询。,6,执行SQL命令,当我们执行查询操作时,通常最感兴趣的是查询结果。,ResultSetrs=stat.executeQUery(“SELECT*FROMBooks”);,分析结果集时通常可以使用类似如下循环语句的代码:,while(rs.next()lookatarowoftheresultset,ResultSet类的迭代器初始化时被设定在第一行之前的位置。必须调用next方法将它移动到第一行。,7,执行SQL命令,查看每一行时,可能希望知道其中每一列的内容。,Stringisbn=rs.getString(1);Doubleprice=rs.getDouble(“Price”);,有许多访问器(accessor)方法可以用于获取这,些信息。,不同的数据类型有不同的访问器,比如getString和getDouble。,8,执行SQL命令,不同的数据类型有不同的访问器,比如getString和getDouble。,每种访问器都有两种形式,一种接受数字参数,另一种接受字符,串参数。,当使用数字参数时,我们指的是该数字所对应的列。例如,,rs.getString(1)返回的是当前行中第一列的值。,与数组的索引不同,数据库的列序号是从1开始计算的。,当使用字符串参数时,指的是结果集中以该字符串为列名的列。,例如,rs.getDouble(“Price”)返回列名为Price的列所对应的值。,使用数字参数效率更高一些,但是使用字符串参数可以使代码,易于阅读和维护,9,执行SQL命令,当get方法的类型和列的数据类型不致时,每个get方法都会,进行合理的类型转换。,例如,调用rs.getString(“Price”)时,该方法会Price列的浮,点值转换成字符串,SQL的数据类型和Java的数据类型并非完全一致。,SQL的数据类型及其对应的Java数据类型,10,执行SQL命令,SQL的数据类型及其对应的Java数据类型(续表),11,JDBC核心类及接口,12,API,java.sql.DriverManager,当使用数字参数时,我们指的是该数字所对应的列。例如,,建立一个到指定数据库的连接,并返回一个Connection对象,StaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword),13,API,java.sql.Connection,创建一个Statement对象,用以执行不带参数的SQL查询和更新,用于立即关闭当前的连接以及释放由它所创建的JDBC资源,14,API,java.sql.Statement,执行给定字符串的SQL语句,并返回一个用于查看查询结构的,ResultSet对象。,执行字符串中指定的INSERT、UPDATE或DELETE等SQL语句。,还可以执行数据定义语言(DLL)的语句,如CREATETABLE。,返回受影响的记录总数,如果是没有更新计数的语句,则返回-1。,15,API,java.sql.Statement(续),执行字符串中指定的SQL语句。,如果该语句返回一个结果集则该方法返回true;反之,返回false。,返回受前一条更新语句影响的记录总数。,如果前一条语句未更新数据库,则返回-1。,对于每一条执行过和语句,该方法只能被调用一次。,使用getResultSet或getUpdateCount方法可以得到语句的执行结果。,16,API,java.sql.Statement(续),返回前一条查询语句的结果集。,如果前一条语句未产生结果集,则返回null值。,关闭Statement对象以及它所对应的结果集,对于每一条执行过的语句,该方法只能被调用一次。,17,API,java.sql.ResultSet,将结果集中的当前行向前移动一行。,XxxgetXxx(intcolumnNumber)XxxgetXxx(StringcolumnName),如果已经到达最后一行的后面,则返回false。,Xxx指数据类型,如int、double、String、Date等。,注意,初始情况下必须调用该方法才能转到第一行。,用给定的列序号或列名称返回该列的值,并将值转换成特定类型。,并非所有的类型转换都是合法的。,18,API,java.sql.ResultSet(续),根据给定的列名,返回该列的序号,立即关闭当前的结果集,19,API,java.sql.SQLException,返回“SQL状态”,它是一个与错误有关的5位数的错误编码。,返回与数据库供应商相关的异常编码。,返回链接到该SQLException对象的下一个异常。该异常可能包含,更多的错误信息。,20,管理连接、语句和结果集,每个Connection对象都可以创建一个或一个以上的Statement对象。,同一个Statement对象可以用于多个不相关的命令和查询。,但是,一个Statement对象最多只能打开一个结果集。,如果需要执行多个查询操作,且需要同时分析查询结果,那么必须,创建多个Statement。,至少有一种常用的数据库(MSSQLServer)的JDBC驱动程序只允许,同时存在一个激活的Statement对象。使用DatabaseMetaData类中的,getMaxStatements方法可以获取JDBC驱动程序同时支持的语句对象,的总数。,但实际上,通常并不需要同时处理多个结果集。,如果结果集相互关联,就可以使用组合查询,这样就只需要分析一,个结果。,对数据库进行组合查询比使用Java程序遍历多个结果集要高效得多。,21,管理连接、语句和结果集,当使用完ResultSet、Statement或Connection对象时,应立即调用,Close方法。这些对象都使用了规模较大的数据结构,所以不应该,等待垃圾回收器来处理它们。,如果Statement对象上有一个打开的结果集,那么调用close方法将,自动关闭该结果集。同样地,调用Connection类的close方法将关闭,该连接上的所有语句。,如果所用连接都是短时性的,那么无需考虑关闭语句和结果集。只,需要将close语句放在finally块中,以便确保最终关闭连接对象。,Connectionconn=.TryStatementstat=conn.createStatement();ResultSetresult=stat.executeQuery(queryString);processqueryresultfinallyconn.close(),22,JDBC体系结构,23,importjava.sql.*;classTestDBpublicstaticvoidmain(Stringargs)tryrunTest();catch(SQLExceptione)while(e!=null)e.printStackTrace();e=e.getNextException();,24,/*通过创建一个表,向其中添加值,显示一个表的内容,以及删除这个表来运行测试*/publicstaticvoidrunTest()throwsSQLExceptionConnectionconn=getConnection();tryStatementstat=conn.createStatement();stat.execute(CREATETABLEGreetings(MessageCHAR(20);stat.execute(INSERTINTOGreetingsVALUES(Hello,JDBCWorld!);ResultSetresult=stat.executeQuery(SELECT*FROMGreetings);result.next();System.out.println(result.getString(1);stat.execute(DropTABLEGreetings);finallyconn.close();,25,/*加载驱动程序,建立与数据库的连接*/publicstaticConnectiongetConnection()throwsSQLExceptionClass.forName(net.sourceforge.jtds.jdbc.Driver);Stringurl=jdbc:jtds:sqlserver:/localhost/test;Connectionconn=DriverManager.getConnection(url,user,password);returnconn;,26,补充:异常处理,27,补充:异常处理,28,补充:异常处理,异常处理机制,异常就是在程序的运行过程中所发生的异常事件,它中断指令的正常执行。,在Java程序的执行过程中,如果出现了异常事件,就会产生一个异常对象。这个对象是由正在运行的方法生成,也可能由Java虚拟机生成。,生成的异常对象传递给Java运行时系统,这一异常的产生和提交过程称为抛弃(throw)例外。,当Java运行时系统得到一个异常对象时,它将会寻找处理这一异常的代码。寻找过程从生成异常对象的代码块开始,沿着方法的调用栈逐层回溯,直到找到一个方法能够处理这种类型的异常为止。然后运行量系统把当前异常对象交给这个方法进行处理。这一过程称为捕获(catch)异常。,29,补充:异常处理,修改后的ExceptionDemo.java,30,补充:异常处理,第1种情况,要找开的文件“text”不存在,程序运行时会生成FileNotFoundException类的实例,运行时系统把它交给第一个cahch块处理,最后执行finally语句。,31,补充:异常处理,第2种情况,已经创建了文件“text”,但是在运行程序时不给出任何参数,这时会生成IndexOutOfBoundsException类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年Openai优化公司TOP3权威测评:9年资质壁垒+128家央媒直连谁的公司实力最硬
- 肝切除术围手术期管理专家共识解读
- 烧伤外科主治医师2025年专项训练卷
- 商业活动医疗保障服务协议
- 冷链药品监管法规精要
- 2025年临沂市市直医疗卫生事业单位招聘卫生类岗位工作人员考试真题
- 2025年中国能源建设集团安徽省电力设计院有限公司招聘真题
- 2025年红河州蒙自市人民医院等招聘考试真题
- 《数控加工编程与操作2》课件-3.1.3 基准点
- 2026江苏南京大学BW20260409物理学院科研人员招聘考试备考试题及答案解析
- 北京市第七届中小学生气象知识竞赛题及答案
- 数字经济赋能传统产业转型路径分析
- GB/T 12221-2025金属阀门结构长度
- 雨课堂学堂云在线《焊接结构(西安石大 )》单元测试考核答案
- 万用表原理及使用方法
- 5年(2021-2025)重庆中考物理真题分类汇编:专题24 力学实验(二)(解析版)
- 抵制和防范宗教向校园渗透
- 14.超声刀使用及维护中国医学装备协会团体标准TCAME19-2020
- GB/T 222-2025钢及合金成品化学成分允许偏差
- 眼科手术分级详细目录
- 幼儿园大班数学《玩具店开张》课件
评论
0/150
提交评论