jdbc学习笔记(一) --引用

来源:互联网 发布:python while两个条件 编辑:程序博客网 时间:2024/04/30 05:24

一.JDBC原理概述

1,JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口,由数据库厂商来实现,并规定了JAVA开发人员访问数据库所使用的方法的调用规范。

2,JDBC的实现是由数据库厂商提供,以驱动程序形式提供。

3,JDBC在使用前要先加载驱动。
JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。

驱动开发必须要实现Driver接口。
数据库驱动的实现方式
JDBC-ODBC桥接式
JDBC网络驱动,这种方式是通过中间服务器的协议转换来实现的
JDBC+本地驱动,这种方式的安全性比较差。
JDBC驱动,由数据库厂商实现。

二.JDBC的API

java.sql包和javax.sql包
Driver接口(驱动),在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver")
DriverManager类(驱动管理器),它可以创建连接,它本身就是一个创建Connection的工厂(Factory)。
Connection接口,会根据不同的驱动产生不同的连接
Statement接口,发送sql语句
ResultSet接口(结果集),是用来接收select语句返回的查询结果的。其实质类似于集合。

三.JDBC应用步骤
1,注册加载一个driver驱动
2,创建数据库连接(Connection)
3,创建一个Statement(发送sql)
4,执行sql语句
5,处理sql结果(select语句)
6,关闭Statement
7,关闭连接Connection。

注意:6,7两个步骤是必须要做的,因为这些资源是不会自动释放的,必须要自己关闭

访问Oracle的数据库的驱动名字叫ojdbc14.jar,要使用这个驱动程序,要先将他加到环境变量CLASSPATH中。

注册加载驱动driver,也就是强制类加载
Class.forName(Driver包名.Driver类名)。

Driver d=new Driver类();//注意:这个方法不能用参数来构造
DriverManager.registerDriver(d);

Oracle的Driver的全名oracle.jdbc.driver.OracleDriver
mysql的Driver的全名com.mysql.jdbc.Driver
SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver

创建连接
DriverManager.getConnection(String url,String username,String password);
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.20:1521:tarenadb

MySql URL的写法
例: jdbc:mysql://localhost:3306/tarena
SQLServer URL的写法
例:jdbc:microsoft:sqlserver://localhost:1433/test

java -Djdbc.drivers=驱动的完整类名

使用虚拟机参数,加载驱动 -D表示为虚拟机参数赋值
java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver

四.JDBC基本方法
DriverManager:如果有多个驱动可用的话,DriverManager会根据URL选择其中一个可用的驱动.

Driver:可以选择固定的驱动
Driver driver = new oracle.jdbc.driver.OracleDriver();
String user = "sd0613";
String password = "sd0613";
Properties prop = new Properties();
prop.setProperty("user",user);
prop.setProperty("password",password);
driver.connect(url,properties);

executeQuery(sqlString);//返回结果集
executeUpdate(sqlString);//返回值为该次操作影响的记录条数,create table返回0
execute(sqlString);
//适用于不知道具体的操作是什么,返回值是boolean类型的
//如果返回值是true,代表执行查询操作;否则代表执行更新操作.

ResultSet
next()方法:
1.判断是否存在下一条记录
2.将游标移向下一条记录
getXXX(字段名或字段序号)//注意:字段序号从1开始

关闭问题:
使用Connection对象获得一个Statement,Statement中的executeQuery(String sql) 方法可以使用select语句查询,并且返回一个结果集 ResultSet通过遍历这个结果集,可以获得select语句的查询结果,ResultSet的next()方法会操作一个游标从第一条记录的前边开始读取,直到最后一条记录。executeUpdate(String sql) 方法用于执行DDL和DML语句,可以update,delete操作。
注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接时才可以使用的,所以在使用结束之后有可能其他的Statement还需要连接,所以不能先关闭Connection。