本文转自与博客园一杯凉茶的博客.
一、JDBC是什么?
Java Data Base Connectivity,java数据库连接,在需要存储一些数据,或者拿到一些数据的时候,就需要往数据库里存取数据,那么java如何连接数据库呢?需要哪些步骤?
1、注册驱动
什么是驱动?
驱动就是JDBC实现类,通俗点讲,就是能够连接到数据库功能的东西就是驱动,由于市面上有很多数据库,Oracle、MySql等等,所以java就有一个连接数据库的实现规范接口,定义一系列的连接数据库接口(java.sql.Driver接口),但是不提供实现,而每个数据库厂家来提供这些接口的具体实现,这样一来,不管使用的是什么数据库,我们开发者写的代码都是相同的,就不必因为数据库的不同,而写法不同,唯一的不同就是数据库驱动不一样,使用mysql,那么就必须使用mysql的驱动,使用Oracle就必须使用oracle的驱动实现类。 看下面mysql连接数据的原理图,看看驱动是在哪里,起什么作用。就明白了什么是驱动了。

DriverManager,一个工具类,是用于操作管理JDBC实现类的,
原始写法:DriverManager.register(new Driver()); //因为使用的是MySql,所以在导包时就需要导入com.mysql.jdbc.Driver
现在写法:Class.forName("com.mysql.jdbc.Driver"); //不用导包,会执行com.mysql.jdbc.Driver类中的静态代码块,其静态代码块的内容为
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
会发现第二种加载驱动的方法的底层其实就是第一种加载驱动。为什么要这样呢?原因很简单, 第一种是硬编程,直接将数据库驱动给写死了,无法扩展,如果使用第一种,那么连接的数据库只能是mysql,因为导包导的是mysql的驱动包,如果换成Oracle,就会报错,需要在代码中将Oracle的驱动包导入,这样很麻烦,而第二种写法就不一样了,第二种是使用的字符串方法注册驱动的,我们只需要将该字符串提取到一个配置文件中,以后想换成oracle数据库,只需要将该字符串换成oracle驱动的类全名即可,而不需要到代码中去修改什么东西。
2、获得连接
使用DriverManage来获得连接,因为DriverManager是驱动实现类的管理者
Connection conn = DriverManager.getConnection(url,user,password);
url:确定数据库服务器的位置,端口号,数据库名
jdbc:mysql://localhost:3306/db
user:登录名称,默认root
password:密码,默认root
这里只是说mysql,别的数据库,url格式就不同了。
MySQL jdbc:mysql://localhost:3306/db 默认端口是3306,粗体为连接时使用的数据库名
Oracle jdbc:oracle:thin:@localhost:1521:db 默认端口号1521
DB2 jdbc:db2://localhost:6789/db 默认端口号6789
SQLServer jdbc:microsoft:sqlserver://localhost:1433;databaseName=db 默认端口号1433
SQLServer 2005 jdbc:sqlserver://localhost:1433;databaseName=db 默认端口号1433
3、获取执行sql语句对象,PraparedStament对象
通过Connection对象获取Statement或者PraparedStament对象(使用它)处理sql
Statement
Statement st = conn.createStatement(); //获取sql语句执行对象
st.excuteUpdate(sql); //执行增删改语句
st.excuteQuery(sql); //执行查询语句
sql语句必须是完整的。
PraparedStatment
sql语句可以不是完整的,可以将参数用?替代,然后在预编译后加入未知参数
PraparedStatment ps = conn.prapareStatement(sql); //获取sql语句执行对象praparedStatment
赋值
ps.setInt(Index,value); ps.setString(index,value); //可以设置很多中类型,index从1开始,代表sql语句中的第几个未知参数,
ps.excuteUpdate(); //执行增删改语句
ps.excuteQuery(sql); //执行查询语句
这两个的区别,常使用的是PraparedStatment对象,因为它可以预编译,效率高,可以设置参数等等优点
4、获得结果集对象
int count = ps.excuteUpdate(); //执行增删改的sql语句时,返回一个int类型的整数,代表数据库表影响的行数,
Result result = ps.excuteQuery(); //执行查询sql语句时,返回一个结果集对象,该对象装着所有查询到的数据信息,一行一行的存储数据库表信息。
5、处理结果
对查询到的Result结果进行处理,拿到所有数据,并封装成对象。
while(rs.next()){
获取行数据的第一种方式
rs.getString(index);//index代表第几列,从1开始
获取行数据的第二中方式
rs.getString(string); //string:代表字段名称。
}

总结:java的JDBC就分为5步,4个属性
属性:driver、url、user、password
五步:
注册驱动、获取连接、获取执行sql语句对象、获取结果集对象、处理结果。
二、JDBC的CURD操作
创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作
查询所有(读取Retrieve)
findAll()
1 @Test 2 public void findAll() throws Exception{ 3 //1 注册驱动 4 Class.forName("com.mysql.jdbc.Driver"); 5 //2 获得连接 6 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test