JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口
接口中定义有一系列方法,但这一系列方法具体实现是有不同的数据库厂商来完成的,
JAVA开发人员需要使用不同的参数来访问特定数据库(sql server,mysql,oracle),并
通过调用接口中已经定义的方法对相应的数据库进行特定操作(CRUD)。
JDBC应用步骤
1,注册加载一个driver驱动
2,创建数据库连接(Connection)
3,创建一个Statement(发送sql)
4,执行sql语句
5,处理sql结果(select语句)
6,关闭Statement
7,关闭连接Connection。
一,注册加载驱动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、编译时利用虚拟机的系统属性
java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver 类名(文件)
oracle的Driver的全名oracle.jdbc.driver.OracleDriver
mysql的Driver的全名com.mysql.jdbc.Driver
SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver
二,创建连接
Connection con= 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.39:1521:TARENADB
MySql URL的写法
例: jdbc:mysql://192.168.8.21:3306/test
SQLServer URL的写法
例:jdbc:microsoft:sqlserver://192.168.8.21:1433
三,创建一个Statement
Statement ─ 由方法 createStatement 所创建。Statement 对象用于发送简单的 SQL 语句。
PreparedStatement ─ 由方法 prepareStatement 所创建。PreparedStatement 对象用于发送带有一个或多个输入参数( IN 参数)的 SQL 语句。PreparedStatement 拥有一组方法,用于设置 IN 参数的值。执行语句时,这些 IN 参数将被送到数据库中。PreparedStatement 的实例扩展了 Statement ,因此它们都包括了 Statement 的方法。PreparedStatement 对象有可能比 Statement 对象的效率更高,因为它已被预编译过并存放在那以供将来使用。
CallableStatement ─ 由方法 prepareCall 所创建。CallableStatement 对象用于执行 SQL 储存程序 ─ 一组可通过名称来调用(就象函数的调用那样)的 SQL 语句。CallableStatement 对象从 PreparedStatement 中继承了用于处理 IN 参数的方法,而且还增加了用于处理 OUT 参数和 INOUT 参数的方法。
Statement sta=con.createStatement();
PreparedStatement
可以使用参数替代sql语句中的某些参数使用 "?"代替,他先将带参数的sql语句发送到数据库,进行编译,然后PreparedStatement会将参数发送给数据库。
在使用PreparedStatement时,在设置相应参数时,要指明参数的位置和类型,以及给出参数值
根据不同的参数类型使用不同的setXXX(参数的位置,参数值)来设置参数
例:
public void insert(Student s){
Connection con=ConnectionFactory.getConnection();//建立连接
String sql="insert into student(id,name) values(?,?)";
PreparedStatement ps=null;
try {
ps=con.prepareStatement(sql);//创建一个PreparedStatement
int index=1;
ps.setInt(index++,s.getStuId()); //为参数赋值
ps.setString(index++,s.getName());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(ps!=null)
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(con!=null)
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
CallableStatement是可以用非sql语句来访问数据库,他是通过调用存储过程(PL/SQL)来访问数据库的。可以直接使用连接来调用 prepareCall(...)方法,来执行这个存储过程,"..."是存储过程的名字。
对于系统时间要去数据库时间
TimeStamp 和 Date都可以保存时间
TimeStamp可以保存时、分、秒的数据,Date只保存日期年月的信息。
SQLException是检查异常必须处理要么throws ,要么try{}catch(){}
getErrorCode()可以获得错误码,可以对错误进行查询。
四,
execute(sql); 当不知道执行的SQL语句是什么类型的时候执行 ,返回值是boolean
executeQuery(sql); 执行查询语句
executeUpdate(sql); 执行更新语句
使用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。