您好,欢迎访问三七文档
JDBC编程关系型数据库•当前信息管理的主流技术•RDBMSSQL语句•SELECT•INSERT•DELETE•UPDATE•CREATE•DROPJDBC编程接口简介•JDBC是进行数据库连接的抽象层•JDBC支持和ANSISQL-2标准相容的数据库JDBC的两个部分•数据库厂商提供的实现接口•应用程序实现的编程接口重要的接口•java.sql.Connection•java.sql.Statement•java.sql.PreparedStatement•java.sql.CallableStatement•java.sql.ResultSet•java.sql.DriverOracle的JDBC驱动程序•oracle.jdbc.driver.OracleDriver•位于classes12.zipJDBC编程的任务•生成JDBC驱动的实例或是通过jdbc.drivers系统属性加载•向系统注册一个驱动程序•指定数据库•打开数据库连接•提交数据库查询•取得查询结果•清除结果集•关闭连接JDBC-ODBC桥JDBC-ODBC桥(con.)•ODBC(OpenDatabaseConnectivity,开放数据库连接)是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的的标准API•基本步骤:建立ODBC数据源使用jdbc-odbc桥来操纵Access(TestJDBC.java)/SQLServer/Txt文件(TestTxt.java)等注册驱动程序•一个JDBC驱动程序的实现在一个静态代码段中生成自己的一个实例当系统调用它的构造方法时,它会向drivermanger进行注册指定数据库指定URL字符串jdbc:subprotocol:subname例:jdbc:oracle:thin:@localhost:1521:ora8Stringurl=jdbc:oracle:thin:@+serverName+:1521:+database;打开数据库连接•Connectionconn=DriverManager.getConnection(url);•该方法使用URL字符串作为参数•如果能建立连接,则返回一个Connection对象•Connection对象代表与一个特定数据库的会话过程Statement•创建Statement:Connection.createStatement方法•执行INSERT,UPDATE和DELETEStatement.executeUpdate方法•执行SELECTStatement.executeQuery方法取得返回结果•查询的结果存放在ResultSet对象的一系列行中•ResultSet对象的最初位置在行首•ResultSet.next()方法用来在行间移动•ResultSet.getXXX()方法用来取得字段的内容getXXX方法使用PreparedStatement•当需要多次调用同一条SQL语句时,可以使用PreparedStatement•PreparedStatement从Statement继承而来•setXXX方法使用CallableStatement•当不直接使用SQL语句,而是调用数据库中的StoreProcedure时,要用到CallableStatement•CallabelStatement从PreparedStatement继承SQL与Java数据类型的对应关系JDBC高级课题•可滚动的ResultSet•可更新的ResultSet•事务•批处理可滚动的ResultSet•要使用可滚动的结果集,必须使用不同于前面所定义的Statement:Statementstmt=conn.createStatement(type,concurrency);PreparedStatementstmt=conn.prepareStatement(sql,type,concurrency)可滚动的ResultSet(con.)ResultSet的Type说明TYPE_FORWARD_ONLY结果集不能滚动TYPE_SCROLL_INSENSITIVE结果集可滚动,但对数据库的变化不敏感TYPE_SCROLL_SENSITIVE结果集可以滚动,并且对数据库的变化敏感可滚动的ResultSet(con.)ResultSet的Concurrency说明CONCUR_READ_ONLY结果集不可用于更新数据库CONCUR_UPDATABLE结果集可以用于更新数据库可滚动的结果集(CON.)•可滚动结果集中的方法:firstlastbeforeFirstafterLastisFirstisLastisBeforeFirstisAfterLastrelativenextpreviousabsolute可更新的结果集•可更新的结果集:可以直接通过结果集来更新(insert/update/delete)数据库表rs.updateXXX(Stringname,Xxxvalue)/rs.updateRow();rs.moveToInsertRow()/rs.updateXxx()/rs.insertRow();rs.deleteRow();rs.cancelRowUpdates();事务•在JDBC中,事务默认是自动提交的•通过Connection的setAutoCommit()方法来设置事务的提交属性•通过Connection的getAutoCommit()方法来获得当前事务的提交方式•通过Connection的commit()方法来提交事务•通过Connection的rollback()方法来回滚事务try{Statementstmt=conn.createStatement();Statementstmt1=conn.createStatement();StringstrSql,sql,strParameter;conn.setAutoCommit(false);strSql=deletefromFile_ListwhereType_ID='+request.getParameter(Type_ID)+';stmt.executeUpdate(strSql);sql=deletefromType_ListwhereType_ID='+request.getParameter(Type_ID)+';stmt1.executeUpdate(sql);conn.commit();stmt1.close();stmt.close();conn.close();response.sendRedirect(OperationSuccess.jsp?msg=删除目录+request.getParameter(Type_Name)+成功!&ref=Y&tar=servlet/dbclass.ManagerTree&frame=epost_menu);}catch(Exceptione){conn.rollback();response.sendRedirect(OperationFail.jsp?msg=删除目录+request.getParameter(Type_Name)+失败!);}批处理(Batch)•可以将一些相关的数据库操作放到同一个Batch中使用Statement的addBatch()方法,将一系列的操作放到同一个Batch中利用Statement的executeBatch()方法,来成批执行放到同一个Batch中的操作可以将Batch操作和事务结合起来使用。将放到Batch中的操作当成一个事务Batch(con.)conn.setAutoCommit(false);Statementstmt=conn.createStatement();stmt.addBatch(“insertintotable1…”);stmt.addBatch(“insertintotable2…”);stmt.addBatch(“updatetable3…”);…stmt.executeBatch();conn.commit()…操作BLOB/CLOB数据•BLOB-BinaryLargeObject•CLOB-CharacterLargeObject•通过Statement的setBinaryStream()方法,将二进制大数据保存到数据库•通过Statement的getBinaryStream()方法,获得数据库中保存的二进制数据注意:1.并非所有数据库都支持大数据2.对于Oracle数据库,要使用JDBC操作BLOB/CLOB,使用oracle10g以上的classes12.zip中的驱动获取数据库元数据•Meta-data:关于数据的数据,在此是有关数据库和数据库表等数据库对象的信息•通过Connection的getMetaData()方法获得包含数据库元数据的DatabaseMetaData对象,然后在此对象上调用相关的方法获得对应的信息DatabaseMetaData相关方法•getDatabaseProductName()•getDatabaseProductVersion()•getDriverName()•getDriverVersion()•getURL()•getUserName()•getColumnCount()•getColumnName()•……
本文标题:JDBC编程
链接地址:https://www.777doc.com/doc-3780152 .html