JDBC
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标[1]。JDBC是面向关系型数据库的。(来自维基百科--Java数据库连接)
JDBC的本质:Java官方SUN公司定义的一套操作所有关系型数据库的规则,也就是接口。每个数据库厂商(MySQL、Oracle、DB2等)要去实现这套接口,提供数据库驱动的jar包,使得Java程序员可以使用这套JDBC接口编程。真正执行的是代码是驱动jar包的实现类。
使用过程:
- 导入驱动jar包:
- 在项目下建立一个libs目录用来管理jar包,将mysql-connector-java-8.0.15.jar复制到该目录下
- 右击libs目录-->add as library,导入jar包
- 注册驱动
- 获取数据库连接对象Connection
- 定义SQL
- 获取执行SQL语句的Statement对象
- 执行SQL,接收执行返回结果
- 处理结果
- 释放资源
JDBC小Demo:
package cn.zhuobo.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBCDemo01 {
public static void main(String[] args) throws Exception {
// 注册驱动,把Drive类的字节码文件加载进内存
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接对象
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", " ");
// 定义是去了语句
String sql = "UPDATE emp SET salary = 2 WHERE id = 1";
// 获取执行SQL的对象
Statement statement = connection.createStatement();
// Statement对象执行SQL
int count = statement.executeUpdate(sql);
System.out.println(count);
connection.close();
statement.close();
}
}
用到的各个对象解释:
-
DriverManager:驱动管理对象,这是一个类。
作用:告知程序使其知道使用的是哪一个数据库的驱动jar包
-
注册驱动,使用DriverManager类的一个静态方法:
static void registerDriver(Driver driver)// 注册给定的驱动程序
-
但是我们写代码的时候是使用
Class.forName("com.mysql.cj.jdbc.Driver");
注册驱动,没有显式地调用registerDrive()方法,这是因为在加载Driver类进内存的时候,就执行了该类里的静态代码块(静态代码快可以自动执行):static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } }
在Driver类中存在着静态代码块,也就是在加载该类进内存的时候就自动执行静态代码块了,静态代码块里DriverManager类调用了静态方法registerDriver(new Driver())。也就是归根结底还是DriverManager类在注册驱动。
注意:mysql5以后的jar包可以省略注册驱动的步骤,也就是可以不用写
Class.forName("com.mysql.cj.jdbc.Driver");
,但是还是建议写上。
-
-
Connection:数据库连接对象
-
获取,DriverManager类的静态方法
static Connection getConnection(String url, String user, String password);
-
参数:
- url:jdbc:mysql://IP地址:端口号/数据库名
- user:用户名
- password:密码
-
Connection对象的方法
方法 描述 Statement createStatement() 获取执行SQL的Statement对象 PreparedStatement prepareStatement(String sql) setAutoCommit(boolean autoCommit) 调用该方法,参数为false则开启事务 commit() 提交事务 rollbock() 回滚事务
-
-
Statement:执行SQL的对象
-
获取:Connection对象调用createStatement()方法,获取Statement对象
-
Statement对象的方法
方法 描述 boolean execute(String sql) 可以执行任意的是sql语句 int executeUpdate(String sql) 执行DML(insert、update、delete)语句,或者DDL(create、alter、drop),int的返回值是返回影响的行数,<0则失败 ResultSet executeQuery(String sql) :执行DQL(select)语句
-
-
ResultSet:结果集对象
-
PreparedStatement:执行SQL的对象
JDBC练习:
package cn.zhuobo.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCDemo02 {
public static void main(String[] args) {
Statement statement = null;
Connection connection = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String sql = "delete from emp where id = 1"; // 删除一条记录一条记录
// String sql = "update emp set salary = 200 where id = 6";
// String sql = "inert into emp values(NULL, '齐天大圣', '男', 1000, '2017-09-09', 2)";
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", " ");
statement = connection.createStatement();
int count = statement.executeUpdate(sql);
if(count > 0) {
System.out.println("添加成功,影响" + count + "行");
}
else {
System.out.println("添加失败");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}