jdbc(培训笔记).pdf





《jdbc(培训笔记).pdf》由会员分享,可在线阅读,更多相关《jdbc(培训笔记).pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、JDBCJDBCJDBCJDBC第一天第一天2007200720072007年年 6 6 66月月 4 4 44日日一、JDBC 原理概述1,JDBC 是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由 Sun 定义一组接口,由数据库厂商来实现,并规定了 JAVA开发人员访问数据库所使用的方法的掉用规范。2,JDBC 的实现是由数据库厂商提供,以驱动程序形式提供。3,JDBC 在使用前要先加载驱动。JDBC 对于使用者要有一致性,对不同的数据库其使用方法都是相同的。4、driver 开发必须要实现 Driver 接口。JDBC 驱动程序的类型目前比较常见的 JDBC 驱动程序可分为
2、以下四个种类:(1)JDBC-ODBC 桥加 ODBC 驱动程序JavaSoft 桥产品利用 ODBC 驱动程序提供 JDBC 访问。注意,必须将 ODBC 二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用 Java编写的三层结构的应用程序服务器代码。(2)本地 API这种类型的驱动程序把客户机 API 上的 JDBC 调用转换为 Oracle、Sybase、Informix、DB2 或其它 DBMS 的调用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载
3、到每台客户机上。(3)JDBC 网络纯 Java 驱动程序这种驱动程序将 JDBC 转换为与 DBMS 无关的网络协议,之后这种协议又被某个服务器转换为一种 DBMS 协议。这种网络服务器中间件能够将它的纯 Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的 JDBC 驱动程序。有可能所有这种解决方案的提供者都提供适合于 Intranet 用的产品。为了使这些产品也支持 Internet 访问,它们必须处理 Web 所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将 JDBC 驱动程序加到他们现有的数据库中间件产品中。(4)本地协议纯 Jav
4、a驱动程序这种类型的驱动程序将 JDBC 调用直接转换为 DBMS 所使用的网络协议。这将允许从客户机机器上直接调用 DBMS 服务器,是Intranet 访问的一个很实用的解决方法。由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。据专家预计第(3)、(4)类驱动程序将成为从 JDBC 访问数据库的首方法。第(1)、(2)类驱动程序在直接的纯 Java驱动程序还没有上市前会作为过渡方案来使用。对第(1)、(2)类驱动程序可能会有一些变种,这些变种要求有连接器,但通常这些是更加不可取的解决方案。第(3)、(4)类驱动程序提供了 Java 的所有优点
5、,包括自动安装(例如,通过使用JDBC驱动程序的 appletapplet 来下载该驱动程序)。5、JDBC 的 APIjava.sql 包和 javax.sql 包DriverManager 类(驱动管理器),它可以创建连接,它本身就是一个创建 Connection 的工厂(Factory)。Driver 接口入口Connection 接口,会根据不同的驱动产生不同的连接Statement 接口,发送 sql 语句ResultSet 接口(结果集),是用来接收 select 语句返回的查寻结果的。其实质类似于集合。以上的资源都需要释放,释放的是数据库的资源JDBC 应用步骤1,注册加载一个
6、driver驱动2,创建数据库连接(Connection)3,创建一个 Statement(发送 sql)4,执行 sql 语句5,处理 sql 结果(select 语句)6,关闭 Statement7,关闭连接 Connection。注意:6,7 两个步骤势必须要做的,因为这些资源是不会自动释放的,必须要自己关闭访问 Oracle的数据库的驱动名字叫 o 加到环境变量 PATH中。jdbc14.jar,这个 jar 文件中出访的驱动程序的.class文件要使用这个驱动程序,要先将他Edited by Foxit ReaderCopyright(C)by Foxit Software Comp
7、any,2005-2008For Evaluation Only.Properties extends Hashtable,专门处理Properties文件,提供load(InputStream is)一,注册加载驱动 driver,也就是强制类加载1、Class.forName(driver);driver=oracle.jdbc.driver.OracleDriver;2、Driver d=new Driver 类();Driver d=new oracle.jdbc.driver.OracleDriver();DriverManager.registerDriver(d);3、编译时利用
8、虚拟机的系统属性java-Djdbc.drivers=oracle.jdbc.driver.OracleDriver 类名(文件)Oracle 的 Driver 的全名 oracle.jdbc.driver.OracleDrivermysql 的 Driver 的全名 com.mysql.jdbc.DriverSQLServer 的 Driver 的全名 com.microsoft.jdbc.sqlserver.SQLServerDriver二,创建连接DriverManager.getConnection(String url,String username,String password)
9、;Connection 连接是通过 DriverManager的静态方法 getConnection(.)来得到的,这个方法的实质是把参数传到实际的 Driver 中的 connect()方法中来获得数据库连接的。Oracle的 URL 值是由连接数据库的协议和数据库的 IP地址及端口号还有要连接的库名(DatebaseName)Oracle URL 的格式jdbc:oracle:thin:(协议)XXX.XXX.X.XXX:XXXX(IP 地址及端口号):XXXXXXX(所使用的库名)例:jdbc:oracle:thin:192.168.0.39:1521:TARENADBMySql URL
10、 的写法例:jdbc:mysql:/192.168.8.21:3306/testSQLServer URL 的写法例:jdbc:microsoft:sqlserver:/192.168.8.21:1433java-Djdbc.drivers=驱动全名 类名使用系统属性名,加载驱动-D 表示为系统属性赋值使用 Connection 对象获得一个 Statement,Statement 中的 executeQuery(String sql)方法可以使用 select 语句查询,并且返回一个结果集 ResultSet 通过遍历这个结果集,可以获得 select 语句的查寻结果,ResultSet 的
11、 next()方法会操作一个游标从第一条记录的前边开始读取,直到最后一条记录。executeUpdate(String sql)方法用于执行 DDL 和 DML语句,可以 update,delete操作。注意:要按先ResultSet结果集,后Statement,最后Connection 的顺序关闭资源,因为Statement和 ResultSet 是需要连接是才可以使用的,所以在使用结束之后有可能起他的 Statement 还需要连接,所以不能现关闭Connection。Edited by Foxit ReaderCopyright(C)by Foxit Software Company,2
12、005-2008For Evaluation Only.作业:修改 StudentDao 的设计以及实现和测试程序,来完成从命令行传递学生的信息。JDBCJDBCJDBCJDBC第二天第二天2007200720072007年年 6 6 66月月 5 5 55日日一、提问如何进行代码复用继承复用、组合复用私有复用:一个方法在一个类的内部使用工具方法:使用静态方法,使用类名直接调用二、Statementexecute(sql);当不知道执行的 SQL 语句是什么类型的时候执行,返回值是 booleanexecuteQuery(sql);执行查询语句executeUpdate(sql);执行更新语句
13、三、PreparedStatement可以使用参数替代 sql 语句中的某些参数使用?代替,他先将带参数的 sql 语句发送到数据库,进行编译,然后 PreparedStatement 会将参数发送给数据库。在使用 PreparedStatement 时,在设置相应参数时,要指明参数的位置和类型,以及给出参数值根据不同的参数类型使用不同的 setXXX(参数的位置,参数值)来设置参数例:public void insert(Student s)Connection con=ConnectionFactory.getConnection();/建立连接String sql=insert into
14、 student(id,name)values(?,?);PreparedStatement ps=null;try ps=con.prepareStatement(sql);/创建一个 PreparedStatementintindex=1;ps.setInt(index+,s.getStuId();/为参数赋值ps.setString(index+,s.getName();ps.executeUpdate();catch(SQLException e)e.printStackTrace();finallyif(ps!=null)try ps.close();catch(SQLExcepti
15、on e)e.printStackTrace();ExceptionInInitializerErrorEdited by Foxit ReaderCopyright(C)by Foxit Software Company,2005-2008For Evaluation Only.if(con!=null)try con.close();catch(SQLException e)e.printStackTrace();CallableStatement 是可以用非 sql 语句来访问数据库,他是通过调用存储过程(PL/SQL)来访问数据库的。可以直接使用连接来调用 prepareCall(.)
16、方法,来执行这个存储过程,.是存储过程的名字。对于系统时间要去数据库时间TimeStamp 和 Date都可以保存时间TimeStamp 可以保存时、分、秒的数据,Date 只保存日期年月的信息。SQLException 是检查异常必须处理要么 throws,要么 trycatch()getErrorCode()可以获得错误码,可以对错误进行查询。四、源数据JDBC 中有两种源数据,一种是数据库源数据,另一种是 ResultSet 源数据。源数据就是描述存储用户数据的容器的数据结构。ResultSet rs=ps.executeQuery(sql);ResultSetMetaData m=rs
17、.getMetaData();getColumnCount(),获得实际列数getColumnName(int colnum),获得指定列的列名getColumnType(int colnum),获得指定列的数据类型getColumnTypeName(int colnum),获得指定列的数据类型名/打印结果集public static void printRS(ResultSet rs)throwsSQLExceptionResultSetMetaData rsmd=rs.getMetaData();while(rs.next()for(int i=1;i 1)System.out.print
18、(,);System.out.print(name+=+value);System.out.println();五、数据库源数据DatabaseMetaDatagetURL(),获得连接数据库的 URLgetDatabaseProductName()获得数据库产品的名称getDriverVersion()获得 JDBC 驱动程序的 String 形式的版本号getTables()获得数据库中该用户的所有表getUserName()获得数据库用户名。六、事务(Transaction)事务是针对原子操作的,要求原子操作不可再分,要求原子操作必须同时成功同时失败。事务是捆绑的原子操作的边界。JDBC
19、 中使用事务,先要使用连接调用 setAutoCommite(false)方法,把自动提交(commit)置为 false。打开事务就要关闭自动提交。不用事务是要把 setAutoCommite(true)在处理事务时,在发送 sql 语句后执行成功并确认时,就在 try 块中使用连接调用 commit()方法来发送提交信息,在发送 sql 语句后执行失败时,会在 catch 语句块中使用连接调用 rollback()方法来发送回滚信息,也可以在需要时做回滚操作(主观原因)。七、JDBC 事务并发产生的问题和事务隔离级别1,脏读(dirty read),读取到了没有提交的数据。2,不可重复读(
20、UnPrpeatable Read),两次读取到了不同的数据,就是要保持在同一时间点上两次读取到的数据相同,不能够使查询数据时进行改变。3,幻读(phantom),在两次查询同一时间点数据时,数据数量发生改变,要保持在同一时间点上两次读取到的数据相同。事务隔离级别TRANSACTION_NONE 不使用事务。TRANSACTION_READ_UNCOMMITTED 可以读取为提交数据。TRANSACTION_READ_COMMITTED 可以避免脏读,不能够读取没提交的数据,最常用的隔离级别大部分数据库的默认隔离级别TRANSACTION_REPEATABLE_READ 可以避免脏读,重复读取
21、,Edited by Foxit ReaderCopyright(C)by Foxit Software Company,2005-2008For Evaluation Only.for update加行级锁TRANSACTION_SERIALIZABLE 可以避免脏读,重复读取和幻读,(事务串行化)会降低数据库效率以上 的 五 个 事 务 隔 离 级 别 都 是 在 Connection 类中 定 义 的 静 态 常 量,使 用setTransactionIsolation(int level)方法可以设置事务隔离级别。八,异常的处理trycatch(SQLException)trycatc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jdbc 培训 笔记

限制150内