java jdbc 汇总
JDBC
(Java Database Connectivity)
一、概述:
JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实行者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API为Java开发者使用数据库提供了统一的编程接口,它由一组Java类和接口组成,使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。
1.在JDBC中包括了两个包:java.sql和javax.sql。
① java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。
② javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。
主要对象和接口:
注:除了标出的Class,其它均为接口。
驱动程序按照工作方式分为四类: (了解)
1、 JDBC-ODBC bridge + ODBC驱动
JDBC-ODBC bridge桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译成访问数据库命令。
优点:可以利用现存的ODBC数据源来访问数据库。
缺点:从效率和安全性的角度来说比较差。不适合用于实际项目。
2、 基于本地API的部分Java驱动
我们应用程序通过本地协议跟数据库打交道。然后将数据库执行的结果通过驱动程序中的Java部分返回给客户端程序。
优点:效率较高;
缺点:安全性较差。
3、 纯Java的中间服务器驱动
缺点:两段通信,效率比较差
优点:安全性较好
4、 纯Java本地协议:通过本地协议用纯Java直接访问数据库。
特点:效率高,安全性好。
二、JDBC编程的步骤
① 注册一个driver
注册驱动程序有三种方式:
方式一: class.forName(“oracle.jdbc.driver.OracleDriver”);
Java规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动注册到驱动程序管理器中。
Static{
Class.forName(“oracle.jdbc.driver.OracleDriver”);
}
方式二: Driver drv = new oracle.jdbc.dirver.OracleDriver(); //针对没有隐式注册时采用
DriverManager.registerDriver(drv);
方式三:编译时在虚拟机中加载驱动
java –Djdbc.dirvers=驱动全名 类名
例: java –Djdbc.drivers=oracle.jdbc.driver.OracleDriver Lab1
使用系统属性名,加载驱动; -D表示为系统属性赋值。
附:mysql的Driver的全名com.mysql.jdbc.Driver或org.gjt.mm.mysql
SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver
② 建立连接
conn=DriverManager.getConnection(“jdbc:oracle:thin:@192.168.0.23:1521:tarena”,
” User”,” Pasword”);
Connection连接是通过DriverManager的静态方法getConnection(....)来得到的,这个方法的实质是把参数传到实际的Driver中的connect()方法中来获得数据库连接的。
Oracle URL的格式:
jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端口号):XXXXXXX(所使用的库名)
MySql URL的写法 例: jdbc:mysql://192.168.8.21:3306/test
SQLServer URL的写法 例:jdbc:microsoft:sqlserver://192.168.8.21:1433
③ 获得一个Statement对象 stm = conn.createStatement();
④ 通过Statement执行SQL语句
stm.excuteQuery(Sring sql); //返回一个查询结果集
stm.excuteUpdate(String sql); //返回值为int型,表示影响记录的条数。
Stm.excute(String sql); //返回true,表示查询;返回false,表示其它操作。
将sql语句通过连接发送到数据库中执行,以实现对数据库的操作。
⑤ 处理结果集
使用Connection对象获得一个Statement,Statement中的executeQuery(String sql) 方法可以使用select语句查询,并且返回一个结果集 ResultSet,通过遍历这个结果集,可以获得select语句的查寻结果,ResultSet的next()方法会操作一个游标从第一条记录的前面开始读取,直到最后一条记录。executeUpdate(String sql) 方法用于执行DDL和DML语句,主要还是DML,包括insert, delete,update操作。
只有执行select语句才有结果集返回。
例: Statement str=con.createStatement(); //创建Statement
String sql=”insert into test(id,name) values(1,”+”’”+”test”+”’”+”)”;
str. executeUpdate(sql);//执行Sql语句
String sql=”select * from test”;
ResultSet rs=str. executeQuery(String sql);//执行Sql语句,执行select语句后有结果集
//遍历处理结果集信息
while(rs.next()){
System.out.println(rs.getInt(“id”));
System.out.println(rs.getString(“name”))
}
⑥ 关闭数据库连接(释放资源) 调用.close()
rs.close(); stm.clo