文章目录
JDBC的概念
- 在没有JDBC之前,java开发人员针对每一种数据库的不同,写一套对应的驱动程序,这就需要java开发人员去维护数据库的驱动程序,一旦数据库的底层实现改变,驱动程序可能会随之改变,显得很麻烦;
- 为此,Sun公司设计了一套通用的java语言操作不同数据库的接口——JDBC,即
Java DataBase Connectivity(Java数据库连接)
,用Java语言操作数据库。本质是Sun公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这些接口,提供数据库驱动jar包
。我们可以使用这套接口去编程,真正执行的代码是驱动jar包
中的实现类。 - 这样做的优点在于java开发人员只需要提供java应用和一套规范,数据库厂商提供具体的java驱动程序,去实现
JDBC
这个接口,只要数据库的底层发生改变了,厂商要随之更新驱动程序,而不影响java应用程序 - JDBC接口在哪?在
JDK中,java.sql.*,javax.sql.*
;
JDBC:(Java Data Base Connectivity,java数据库连接) 是一种用于执行sql语句的Java API ,可以为多种关系型数据库提供统一的访问,它由一组用JAVA语言编写类与接口组成。
JDBC 提供了一种基准,据此可以构建更高级的工具与接口
提供程序员调用的接口与类,集成在java.sql和javax.sql包中:
DriverManager类
Connection接口
Statement接口
ResultSet接口
实现一个JDBC连接
第一步:创建lib文件夹,将对应jar包,放进来
第二步:加载驱动类 数据库不同驱动类不同,加载驱动类才能知道需要对接的数据库。
//驱动类:"com.mysql.jdbc.Driver"
Class.forName("com.mysql.jdbc.Driver");
第三步:通过驱动connection连接数据库,承担传送数据的任务
DriverManager:根据数据库的不同管理各种不同JDBC驱动,java导入此类才能与数据库连接 ,是JAVA与数据库连接的桥梁,
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
//连接字符串:"jdbc:mysql://localhost:3306/myschool"
//数据库账号:root
//数据库密码:root
第四步:通过connection 获取Statement 接口 ,负责执行sql语句
Statement statement = connection.createStatement();,
第五步:resultset保存sql语句执行后产生的查询结果,增加删除修改不需要使用resultSET
例如:执行了查询语句
//通过statement的 executeQuery方法 发送查询sql语句到数据库中执行
执行完成后 查询到虚拟表
需要通过ResultSet接口接收虚拟表
ResultSet resultSet = statement.executeQuery("select * from student");
第六步:取出数据
该方法相当于一个指针,一直挪动到查询出来的结果集中的每一条记录,然后使用该字段对应的get方法取出数据;
//处理查询后的虚拟表 .next() 方法 判断resultSet中是否存在下一行数据
//遍历虚拟表
while (resultSet.next()){
// 遍历结果集 注意查询后虚拟表要获取的列的类型
// 列的下标从1开始来获取虚拟表中的数据,也可以通过列名来获取虚拟表中的数据
int stuNo = resultSet.getInt(1);
String stuName = resultSet.getString(3);
String stuPhone = resultSet.getString("phone");
System.out.println("学生编号:"+stuNo+"学生姓名:"+stuName+"学生电话:"+stuPhone);
}
第七步: 以上接口都需要关闭,正着用,倒着关。
try {
if(null != resultSet)
resultSet.close();
if(null != statement)
statement.close();
// 判断 connection 不为空 》 关闭当前数据库连接
if(null != connection)
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
执行查询语句的案例演示
resultSET接受的是查询语句的结果
package com.xk.jdbc;
import java.sql.*;
/**
* 执行查询语句的案例演示
*/
public class DemoB {
public static void main(String[] args) {
// 创建Connection 数据库s
Connection connection = null;
//用于发送sql语句到数据库中执行 并返回结果
Statement statement =null;
// 用于保存查询语句 返回的虚拟表
ResultSet resultSet = null;
try {
//1、加载驱动类 》加载了驱动类 才能知道需要对接的数据库
Class.forName("com.mysql.jdbc.Driver");
//2、连接数据库 (“在哪?端口?连接的是哪一个数据库?”,账号?,密码?)
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
System.out.println("数据库连接成功!!");
// 通过connection 获取Statement 接口
statement = connection.createStatement();
//通过statement的 executeQuery方法 发送查询sql语句到数据库中执行
resultSet = statement.executeQuery("select * from student");
// System.out.println("ResultSet中是否存在下一行数据:"+resultSet.next());
// 处理查询后的虚拟表 .next() 方法 判断resultSet中是否存在下一行数据
//遍历虚拟表
while (resultSet.next()){
// 遍历结果集 注意查询后虚拟表要获取的列的类型
// 1、通过下标获取列中的值(下标从1开始) 2、通过列名获取
int stuNo = resultSet.getInt(1);
String stuName = resultSet.getString(3);
String stuPhone = resultSet.getString("phone");
System.out.println("学生编号:"+stuNo+"学生姓名:"+stuName+"学生电话:"+stuPhone);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
// 正着用 ,倒着关
try {
if(null != resultSet)
resultSet.close();
if(null != statement)
statement.close();
// 判断 connection 不为空 》 关闭当前数据库连接
if(null != connection)
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
执行增加、删除、修改语句的案例演示:并设置事务
-
增加删除修改不需要使用resultSET,返回的结果是int类型的影响行数,resultSET接受的是查询语句的结果
-
通过Statement的
executeUpdate(sql)
方法 执行增加 删除 修改
执行后 executeUpdate方法 返回影响行数 -
设置事务:影响行数成功 就提交来修改数据库,增删改查询数据库报错就让事务回滚,没有报错到finally中就提交
-
新的增删改查方法:execute返回bool值 此方法可以发送任意SQL语句包括查询语句
package com.xk.jdbc;
import java.sql.*;
/**
* 执行增加、删除、修改语句的案例演示
*/
public class DemoC {
public static void main(String[] args) {
// 创建Connection 数据库s
Connection connection = null;
//用于发送sql语句到数据库中执行 并返回结果
Statement statement =null;
// 用于保存查询语句 返回的虚拟表
ResultSet resultSet = null;
try {
//1、加载驱动类 》加载了驱动类 才能知道需要对接的数据库
Class.forName("com.mysql.jdbc.Driver");
//2、连接数据库 (“在哪?端口?连接的是哪一个数据库?”,账号?,密码?)
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
System.out.println("数据库连接成功!!");
connection.setAutoCommit(false);// 设置事务是否自动提交
// 通过connection 获取Statement 接口
statement = connection.createStatement();
//通过Statement的executeUpdate(sql)方法 执行增加 删除 修改
// 执行后 executeUpdate方法 返回影响行数
// String sql = "INSERT INTO `grade` (`gradeName`) VALUES ( '五年级');";
// String sql =