




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JDBC程序设计,议程,体系结构与工作原理JDBC驱动程序的类型JDBC程序编写过程可被更新和滚动的记录集,JDBC体系结构,JDBCODBC桥驱动程序(类型1),Java加本地代码驱动程序(类型2),中间数据库访问服务器(类型3),专利协议纯Java驱动程序(类型4),java.sql包概述,JDBC程序编写过程,用JDBCAPI连接通用数据库,使用java.sql包中的方法加载JDBC驱动程序:Class.forName(DriverName);加载Oracle9i数据库驱动程序的方法为:Class.forName(oracle.jdbc.driver.OracleDriver);,创建数据库连接,创建和指定数据库的连接需要使用DriverManager类的getConnection()方法,其使用格式如下:Connectionconn=DriverManager.getConnection(URL,user,password);该方法返回的是一个Connection对象。这里的URL是一个字符串,代表了将要连接的数据源,即具体的数据库位置。,Connection接口,该方法的执行过程如下:首先解析JDBCURL,然后搜寻系统内所有已注册的JDBC驱动程序,直到找到符合JDBCURL设定的通讯协议为止。如果寻找到符合的JDBC驱动程序,则DriverManager就建立新的数据库连接;否则就返回一个null,然后继续查询其他驱动程序。如果最后无法找到适当的JDBC驱动程序,以至于无法顺利建立数据库连接,Java应用程序将抛出一个SQLException异常。,标准的JDBCURL语法格式如下:jdbc:(1)jdbc:driver:database通过ODBC连接数据库的例子如下:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);ConnectionConn=DriverManager.getConnection(jdbc:odbc:DBName);,(2)jdbc:driver:/host:port/database或jdbc:driver:host:port:database在连接Oracle数据库时,就可以使用下面的形式Class.forName(oracle.jdbc.driver.OracleDriver);ConnectionConn=DriverManager.getConnection(jdbc:oracle:thin:myhost:1521:DBName,scott,tiger);,执行SQL语句,创建Statement对象是使用Connection接口的createStatement()方法来实现的:Statementstmt=conn.createStatement();executeQuery()方法返回一个ResultSet类的对象,它包含了SQL查询语句执行的结果。例如,下面的语句:ResultSetrs=stmt.executeQuery(SELECT*FROMstudent);如果执行INSERT、UPDATE、DELETE命令,必须使用executeUpdate()方法。例如,下面的语句:ResultSetrs=stmt.executeUpdate(CREATETABLEtable1(NoCHAR(10),NameCHAR(10);,Statement接口的方法,处理结果集,例如,下面的程序片段就是利用while循环输出ResultSet对象内的所有数据项:while(rs.next()System.out.println(rs.getInt(1);System.out.println(rs.getString(2);,关闭数据库连接,关闭各个对象的方式如下:Tryrs.close();stmt.close();con.close();catch(SQLExceptione)e.printStackTrace();,JNDI和数据源,Statement接口,一旦拥有数据库连接,就可以与数据库产生交互作用。java.sql.Statement对象,或者它的子类java.sql.PreparedStatement或者java.sql.CallableStatement,可以处理这种交互作用。Statement对象用于给数据库发送SQL语句。然而,由于java.sql.Statement是接口,所以不能直接实例化实例。通过使用Connection对象的createStatement()方法,可得到Statement对象。,示例,Connectionconn=null;InitialContextic=newInitialContext();DataSourceds=(DataSource)ic.lookup(jdbc/JDBCConnectionCoreDS);conn=ds.getConnection();Statementst=conn.createStatement();Statementstmt=conn.createStatement();,示例,下面的代码片段说明了如何执行一个数据表查询操作:Stringsql=select*fromuserinfo;ResultSetrs=statement.executeQuery(sql);例如,下面的代码片段说明了如何执行数据插入操作:Stringsql=insertintouserinfovalues(7107,lxt,123789,lxt008);introwCount=statement.executeUpdate(sql);,示例说明:上述源程序中在trycatchfinally语句块中包装了代码。这是因为每个JDBC方法调用都有可能导致产生SQLException异常,所以,需要捕捉错误,输出适当的消息,同时把错误代码返回给调用者。使用finally语句块是为了确保关闭和执行Connection对象,而不管是否产生了SQLException异常。,ResultSet接口,Statement接口的方法executeQuery()采用String变元,返回java.sql.ResultSet对象。传入的变元应该是有效的SQL查询。例如,下面的代码片段:Stringsql=select*fromuserinfowherecode=7102;ResultSetrs=statement.executeQuery(sql);例如,下面的代码片段:Stringsql=select*fromuserinfowherecode=7102;ResultSetrs=statement.executeQuery(sql);while(rs.next()/processtherow,ResultSet接口的方法,ResultSet接口的方法,示例,例如,对于下面的查询:ResultSetrs=statement.executeQuery(selectcode,namefromuserinfo);可以按照名称返回列:while(rs.next()Stringcode=rs.getString(code);Stringname=rs.getString(name);或者按照位置返回列:while(rs.next()Stringcode=rs.getString(1);Stringname=rs.getString(2);,记录集的元数据,例如,下面的代码片段:ResultSetrs=statement.executeQuery(select*fromuserinfo);ResultSetMetaDatarsmd=rs.getMetaData();例如,下面的代码片段:for(inti=1;i=rsmd.getColumnCount();i+)System.out.print(Columnname=+rsmd.getColumnName(i);System.out.print(Type=+rsmd.getColumnTypeName(i);System.out.print(Javatype=+rsmd.getColumnType(i);,示例说明:使用java.sql.Types常量名称与数据表的列的Java类型比较,根据返回值的真或假来判断是否为日期或时间类型。ResultSet接口提供了getDate()、getTime()和getTimestamp()方法分别返回Date、Time和Timestamp类型的对象。在Oracle数据库中,如果ResultSet对象中返回当前SYSDATE:ResultSetrs=st.executeQuery(selectsysdatefromdual);如果使用getDate()方法,将得不到时间部分;如果使用getTime()方法,将得不到日期部分;同时返回时间和日期的方法是使用getTimestamp()方法。,可被更新和滚动的记录集,创建Statement对象实例:Statementst=connection.createStatement(int指针类型参数,int数据一致性参数);将这两个参数有机地组合起来,就可以ResultSet对象的滚动和更新操作。,指针类型参数,指针类型参数,示例,下面的语句将从Statement对象创建的ResultSet对象设定为将即可以滚动,又可以更新:Statementst=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);,示例,创建Statement对象之后,现在可以创建允许更新的ResultSet对象。Oracle规定,不能为可更新的记录集使用SELECT*语法,但可通过使用表的别名来解决这个问题:ResultSetrs=st.executeQuery(selectn.*fromuserinfon);根据数据类型,使用ResultSet的updateXXX()方法更新列的值,接着使用updateRow()方法实际更新数据库。while(rs.next()rs.updateString(,);rs.updateRow();,PreparedStatement接口,PreparedStatement接口是Statement接口的扩展,代表了一条已编译的SQL语句。已编译语句的含义是:SQL语句传送给RDBMS,在这里被编译、优化与缓存。因为语句不需要在每次执行时由数据库编译与优化,所以语句重复执行的整体性能被大大提高了。,示例,例如,对于下面的查询字符串:Stringsql=SELECT*FROMuserinfoWHEREname=?;查询字符串中的“?”用于每个输入参数的占位符。这些占位符对应于数据库中的变量,称为绑定变量。使用绑定变量的查询将被编译一次,随后把查询计划存储在共享池中,可以从中检索和重用它。,创建一个PreparedStatement对象可以使用Connection对象的prepareStatement()方法,如果Connection对象为conn,则创建PreparedStatement对象prepare的语句为:PreparedStatementprepare=conn.prepareStatement(sql);这样在PreparedStatement对象创建的同时,就将带有参数的SQL语句
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46064-2025混凝土和砂浆用偏高岭土粉
- GB/T 46215-2025金属和合金的腐蚀用目测法和硬度法对电厂部件铜合金和灰铸铁的选择性腐蚀评价
- 2025湖州德清县教育局择优招聘浙江开放大学德清学院和职业类教师15人考前自测高频考点模拟试题及参考答案详解1套
- 2025江苏海晟控股集团有限公司下属子公司招聘高级管理人员人员模拟试卷有完整答案详解
- 2025年牡丹江绥芬河市博物馆公开招聘讲解员招聘4人考前自测高频考点模拟试题及一套答案详解
- 安全培训教学课件
- 广播电视文体写作课件
- 2025广西柳钢集团技术技能人才社会招聘考前自测高频考点模拟试题及一套答案详解
- 2025江苏盐城市第七人民医院招录政府购买服务用工14人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025福建厦门鼓浪湾大酒店有限公司(第二批)招聘5人模拟试卷及答案详解(各地真题)
- BCG 中国合成生物学产业白皮书2024
- 三年级数学倍的认识 省赛一等奖
- 第5章破甲弹课件
- 新能源电动汽车的发展历程
- LS保温复合板施工方案
- 肾盂癌-疾病研究白皮书
- 共有权人同意卖房证明四篇
- 美学第二讲:美的本质
- 量子物理发展简史教学课件
- 第七讲 社会主义现代化建设的教育科技人才战略PPT习概论2023优化版教学课件
- 1.4.1 第2课时 空间中直线、平面的平行 课件(共14张PPT)
评论
0/150
提交评论