《jdbc程序设计》PPT课件.ppt_第1页
《jdbc程序设计》PPT课件.ppt_第2页
《jdbc程序设计》PPT课件.ppt_第3页
《jdbc程序设计》PPT课件.ppt_第4页
《jdbc程序设计》PPT课件.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JDBC程序设计,议程,体系结构与工作原理 JDBC驱动程序的类型 JDBC程序编写过程 可被更新和滚动的记录集 ,JDBC体系结构,JDBCODBC桥驱动程序(类型1),Java加本地代码驱动程序(类型2),中间数据库访问服务器(类型3),专利协议纯Java驱动程序(类型4),java.sql包概述,JDBC程序编写过程,用JDBC API连接通用数据库,使用java.sql包中的方法加载JDBC驱动程序: Class.forName(“DriverName“); 加载Oracle9i数据库驱动程序的方法为: Class.forName(“oracle.jdbc.driver.OracleDriver“);,创建数据库连接,创建和指定数据库的连接需要使用DriverManager类的getConnection( )方法,其使用格式如下: Connection conn = DriverManager.getConnection(URL,user,password); 该方法返回的是一个Connection对象。这里的URL是一个字符串,代表了将要连接的数据源,即具体的数据库位置。,Connection接口,该方法的执行过程如下: 首先解析JDBC URL,然后搜寻系统内所有已注册的JDBC驱动程序,直到找到符合JDBC URL设定的通讯协议为止。 如果寻找到符合的JDBC驱动程序,则DriverManager就建立新的数据库连接;否则就返回一个null,然后继续查询其他驱动程序。 如果最后无法找到适当的JDBC驱动程序,以至于无法顺利建立数据库连接,Java应用程序将抛出一个SQLException异常。,标准的JDBC URL语法格式如下: jdbc : : (1)jdbc : driver : database 通过ODBC连接数据库的例子如下: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); Connection Conn = DriverManager.getConnection(“jdbc:odbc:DBName);,(2)jdbc:driver:/host:port/database或jdbc:driver:host:port:database 在连接Oracle数据库时,就可以使用下面的形式 Class.forName(“oracle.jdbc.driver.OracleDriver“); Connection Conn = DriverManager.getConnection(“jdbc:oracle:thin:myhost:1521:DBName“,“scott“,“tiger“);,执行SQL语句,创建Statement对象是使用Connection接口的createStatement( )方法来实现的: Statement stmt = conn.createStatement( ); executeQuery( )方法返回一个ResultSet类的对象,它包含了SQL查询语句执行的结果。例如,下面的语句: ResultSet rs = stmt.executeQuery(“SELECT * FROM student“); 如果执行INSERT、UPDATE、DELETE命令,必须使用executeUpdate( )方法。例如,下面的语句: ResultSet rs = stmt.executeUpdate(“CREATE TABLE table1(No CHAR(10), Name CHAR(10)“);,Statement接口的方法,处理结果集,例如,下面的程序片段就是利用while循环输出ResultSet对象内的所有数据项: while(rs.next( ) System.out.println(rs.getInt(1); System.out.println(rs.getString(2); ,关闭数据库连接,关闭各个对象的方式如下: Try rs.close( ); stmt.close( ); con.close( ); catch(SQLException e) e.printStackTrace( ); ,JNDI和数据源,Statement接口,一旦拥有数据库连接,就可以与数据库产生交互作用。java.sql.Statement对象,或者它的子类java.sql.PreparedStatement或者java.sql.CallableStatement,可以处理这种交互作用。 Statement对象用于给数据库发送SQL语句。然而,由于java.sql.Statement是接口,所以不能直接实例化实例。通过使用Connection对象的createStatement( )方法,可得到Statement对象。,示例,Connection conn=null; InitialContext ic=new InitialContext( ); DataSource ds = (DataSource)ic.lookup(“jdbc/JDBCConnectionCoreDS“); conn=ds.getConnection(); Statement st=conn.createStatement( ); Statement stmt = conn.createStatement( );,示例,下面的代码片段说明了如何执行一个数据表查询操作: String sql = “select * from userinfo“; ResultSet rs = statement.executeQuery(sql); 例如,下面的代码片段说明了如何执行数据插入操作: String sql = “insert into userinfo values(7107,lxt,123789,)“; int rowCount = statement.executeUpdate(sql);,示例说明: 上述源程序中在trycatchfinally语句块中包装了代码。 这是因为每个JDBC方法调用都有可能导致产生SQLException异常,所以,需要捕捉错误,输出适当的消息,同时把错误代码返回给调用者。 使用finally语句块是为了确保关闭和执行Connection对象,而不管是否产生了SQLException异常。,ResultSet接口,Statement接口的方法executeQuery( )采用String变元,返回java.sql.ResultSet对象。传入的变元应该是有效的SQL查询。 例如,下面的代码片段: String sql = “select * from userinfo where code=7102“; ResultSet rs = statement.executeQuery(sql); 例如,下面的代码片段: String sql = “select * from userinfo where code=7102“; ResultSet rs = statement.executeQuery(sql); while(rs.next( ) / process the row ,ResultSet接口的方法,ResultSet接口的方法,示例,例如,对于下面的查询: ResultSet rs = statement.executeQuery(“select code,name from userinfo“); 可以按照名称返回列: while(rs.next() String code=rs.getString(“code“); String name=rs.getString(“name“); 或者按照位置返回列: while(rs.next() String code=rs.getString(1); String name=rs.getString(2);,记录集的元数据,例如,下面的代码片段: ResultSet rs = statement.executeQuery(“select * from userinfo“); ResultSetMetaData rsmd=rs.getMetaData( ); 例如,下面的代码片段: for(int i=1; i=rsmd.getColumnCount( ); i+) System.out.print(“Column name=“+rsmd.getColumnName(i); System.out.print(“Type=“+rsmd.getColumnTypeName(i); System.out.print(“Java type=“+rsmd.getColumnType(i);,示例说明: 使用java.sql.Types常量名称与数据表的列的Java类型比较,根据返回值的真或假来判断是否为日期或时间类型。 ResultSet接口提供了getDate( )、getTime( )和getTimestamp( )方法分别返回Date、Time和Timestamp类型的对象。 在Oracle数据库中,如果ResultSet对象中返回当前SYSDATE: ResultSet rs=st.executeQuery(“select sysdate from dual“); 如果使用getDate( )方法,将得不到时间部分;如果使用getTime( )方法,将得不到日期部分;同时返回时间和日期的方法是使用getTimestamp( )方法。,可被更新和滚动的记录集,创建Statement对象实例: Statement st=connection.createStatement(int 指针类型参数,int 数据一致性参数); 将这两个参数有机地组合起来,就可以ResultSet对象的滚动和更新操作。,指针类型参数,指针类型参数,示例,下面的语句将从Statement对象创建的ResultSet对象设定为将即可以滚动,又可以更新: Statement st=connection.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);,示例,创建Statement对象之后,现在可以创建允许更新的ResultSet对象。Oracle规定,不能为可更新的记录集使用SELECT *语法,但可通过使用表的别名来解决这个问题: ResultSet rs=st.executeQuery(“select n.* from userinfo n“); 根据数据类型,使用ResultSet的updateXXX( )方法更新列的值,接着使用updateRow( )方法实际更新数据库。 while(rs.next( ) rs.updateString(“ “, “ “); rs.updateRow( );,PreparedStatement接口,PreparedStatement接口是Statement接口的扩展,代表了一条已编译的SQL语句。 已编译语句的含义是:SQL语句传送给RDBMS,在这里被编译、优化与缓存。因为语句不需要在每次执行时由数据库编译与优化,所以语句重复执行的整体性能被大大提高了。,示例,例如,对于下面的查询字符串: String sql=“SELECT * FROM userinfo WHERE name = ? “; 查询字符串中的“?”用于每个输入参数的占位符。这些占位符对应于数据库中的变量,称为绑定变量。 使用绑定变量的查询将被编译一次,随后把查询计划存储在共享池中,可以从中检索和重用它。,创建一个PreparedStatement对象可以使用Connection对象的prepareStatement( )方法,如果Connection对象为conn,则创建PreparedStatement对象prepare的语句为: PreparedStatement prepare = conn.prepareStatement(sql); 这样在PreparedStatement对象创建的同时,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论