JDBC(Java Data Base Conntectivity java数据库连接)是一种用于执行SQL语句的JAVA API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成.是java访问数据的标准规范. JDBC提供一种标准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序. JDBC需要连接驱动(JDBC接口的实现类),驱动是两个设备要进行通信,满足一定数据格式,数据格式有设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与设备进行通信.
JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从不能操作数据库!每个数据库厂商都需要自己提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都有数据厂商提供.(JDBC就是接口,好比我们电脑生产定义了外接鼠标,键盘,硬盘连接的接口,usb的规格,连接方法,如果你的设备想和电脑连接,那么连接的头一定要遵循我的usb规范且连接口要厂商自己制造.这样做的好处任何厂商只要按照usb规范生产就能连接到电脑上使用.这就是面向接口开发的思想)
JDBC开发的步骤
1.注册驱动: 告诉jvm使用的是哪一个数据的驱动
2.获取连接: 使用jdbc中的类,完成对mysql的连接
3.获取语句执行者: 通过连接对象获取sql语句的执行者对象
4.执行sql语句:使用执行者对象,执行操作数据sql语句,获取sql语句执行后的结果
5.处理结果: 拿到返回的结果想干的什么
6.释放资源: 释放执行者, 连接对象
注册驱动前项目中要到mysql驱动.也就是JDBC接口的实现类打成的jar包
DBUtils
如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils。
DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
添加
public void insert(){
try {
//获取一个用来执行SQL语句的对象 QueryRunner
QueryRunner qr = new QueryRunner();
String sql = "INSERT INTO person(,pname,age) VALUES(?,?)";
Object[] params = {’二哈’, 18};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn,sql,params);// 用来完成表数据的增加、删除、更新操作
//结果集处理
System.out.println("line = " + line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
更新
public void update(){
try {
//创建一个QueryRunner对象,用来完成SQL语句的执行
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "UPDATE person SET age = age+2 WHERE name=?";
Object[] params = {“二哈"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);
//结果集的处理
System.out.println("line="+line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
删除
public void delete(){
try {
//创建一个QueryRunner对象,用来完成SQL语句的执行
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "DELETE FROM person WHERE pname = ?";
Object[] params = {"方妖"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);
//结果集的处理
System.out.println("line="+line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public class ArrayHandlerDemo {
@Test
public void method(){
try {
//获取QueryRunner对象
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "SELECT * FROM person";
Object[] params = {};
Connection conn = JDBCUtils.getConnection();
Object[] objArray = qr.query(conn, sql, new ArrayHandler(), params);
//结果集的处理
System.out.println( Arrays.toString(objArray) );
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class ArrayListHandlerDemo {
@Test
public void method(){
try {
//获取QueryRunner对象
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "SELECT * FROM pid WHERE age>?";
Object[] params = {20};
Connection conn = JDBCUtils.getConnection();
Listlist = qr.query(conn, sql, new ArrayListHandler(), params);
//结果集的处理
for (Object[] objArray : list) {
System.out.println( Arrays.toString(objArray) );
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
JavaBean就是一个类,在开发中常用封装数据。具有如下特性
public class Person implements Serializable{
private int pid;
private String pname;
private int age;
public Person() {
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class BeanHandlerDemo {
@Test
public void method(){
try{
//获取QueryRunner
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "SELECT * FROM person WHERE pid=?";
Object[] params = {1};
Connection conn = JDBCUtils.getConnection();
Perosn p = qr.query(conn, sql, new BeanHandler
//结果集处理
System.out.println(zw);
conn.close();
} catch(SQLException e){
throw new RuntimeException(e);
}
}
}
public class BeanListHandlerDemo {
@Test
public void method(){
try{
//获取QueryRunner
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "SELECT * FROM zhangwu WHERE money>?";
Object[] params = {2000};
Connection conn = JDBCUtils.getConnection();
List
//结果集处理
for (Person zw : list) {
System.out.println(zw);
}
conn.close();
} catch(SQLException e){
throw new RuntimeException(e);
}
}
}
public class ColumnListHandlerDemo {
@Test
public void method(){
try {
//获取QueryRunner对象
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "SELECT name FROM person WHERE age>?";
Object[] params = {12};
Connection conn = JDBCUtils.getConnection();
List
//结果集的处理
for (String str : list) {
System.out.println(str);
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class ScalarHandlerDemo {
@Test
public void method(){
try {
//获取QueryRunner对象
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "SELECT MAX(age) FROM person";
Object[] params = {};
Connection conn = JDBCUtils.getConnection();
Integer max = qr.query(conn, sql, new ScalarHandler
//结果集的处理
System.out.println("max=" + max);
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}