慨念:Java DataBase Connectivity,Java数据库连接。就是用Java语言操作数据库。
JDBC本质:指的是官方(sun公司)定义的一套操作所有关系型数据库的规则
,即接口
。各个数据库厂商去实现这套接口,用来提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。(Java提供接口,数据库厂商提供实现接口的类)。
1、导入驱动jar包 mysql-connector-java-5.1.37-bin.jar(不同厂商不同版本jar包不同);
1)复制数据库驱动包(如:mysql-connector-java-5.1.37-bin.jar)到项目的libs目录下(libs是自己建的库文件夹,与src同级)。
2)选中libs右键–>Add As Library。
2、注册驱动;
3、获取数据库连接对象 Connection;
4、定义sql语句;
5、获取执行sql语句的对象 Statement;
6、执行sql,接收返回结果;
7、处理结果;
8、释放资源。
代码实现:
// 1. 导入驱动jar包
// 2. 注册驱动
Class.forName("com.mysql.jdbc.Driver"); // 这个全类名在数据驱动包中
//3. 获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
//4. 定义sql语句
String sql = "update account set balance = 500 where id = 1";
//5. 获取执行sql语句的对象 Statement
Statement stmt = conn.createStatement();
//6. 执行sql
int count = stmt.executeUpdate(sql);
//7. 处理结果
System.out.println(count);
//8. 释放资源
stmt.close();
conn.close();
用于管理一组JDBC驱动程序的基本服务,(比如通过它获取连接对象)。
Class.forName(“com.mysql.jdbc.Driver”);
Class.forName(“全类名”)是将某个指定的类加载到内存中,所以是将"com.mysql.jdbc.Driver"类加载进内存。该类在mysql-connector-java-5.1.37-bin.jar库里面。
当类加载进内存时,会自动执行类中的静态代码块。
查看com.mysql.jdbc.Driver类的源码如下:
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
当Driver类加载进内存时会执行类中的静态代码块,即创建一个Driver类对象(即驱动程序对象),并调用DriverManager.registerDriver方法注册创建的驱动程序。注册的目的是让驱动程序管理器知道所创建的驱动程序对象,以便管理
。如果驱动程序当前已注册,则不采取任何操作。
注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。
与给定的数据库URL建立连接(会话)。可以在会话期间执行SQL语句并返回结果,并且能够管理事务。
1)获取方式
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/db3”, “root”, “root”);
getConnection方法参数:
即通过驱动管理对象DriverManager调用getConnection方法从已注册的JDBC驱动程序集中选择(连接)一个合适的驱动程序,返回一个数据库连接对象。
2)管理事务:
事务概念:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
使用Connection对象来管理事务
1)获取方式
Statement stmt = conn.createStatement();
创建一个语句对象,用于向数据库发送SQL语句。通过连接对象Connection的createStatement()方法创建用于处理SQL语句的Statement对象。
调用不同的方法处理相应的sql语句
select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a'
实现步骤:
select * from user where username = ? and password = ?;
注意:后期都会使用PreparedStatement来完成增删改查的所有操作。
代码实例:
Connection conn = null;
PreparedStatement pstmt =null;
ResultSet res = null;
try {
//1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 定义sql
String sql = "insert into account values(null,'王五',3000)";
//3.获取Connection对象
conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
//4.定义sql语句
String sql = "select *from user where username = ? and password = ? ";
//5.获取执行sql的对象 prepareStatement
pstmt = conn.prepareStatement(sql);
//6.给 ?赋值:
pstmt.setString(1,username);
pstmt.setString(2,password);
//7.执行sql
res = pstmt.executeQuery();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (res != null){
try {
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
可以看到,DriverManager是一个实际类,用于注册管理驱动;其他的Driver、Connection、Statement、PreparedStatement都是接口。