概述
JDBC——Java DataBase Connectivity 即为Java数据库连接技术,可以用于访问多种数据库:MySQL、Oracle和其他数据库。
前提:装载特定厂商提供的数据库驱动程序(Driver),通过JDBC的API访问数据库。
8.0.31版本MySQL驱动链接:
链接:https://pan.baidu.com/s/1CTSvjPF9I_RezCqsklHipA
提取码:sygx
核心的类与接口
JDBC核心API都包含在java.sql包中,主要核心类有:
- DriverManager:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并注册后才可以使用,同时提供方法来建立与数据库的连接。
- SQLException:有关数据库操作的异常。
JDBC核心接口主要有:
- Connection:特定数据库的连接,在连接上下文中执行SQL语句并返回结果。
- Statement:用于执行静态SQL语句并返回它所生成结果的对象。
- PreparedStatement:Statement类的子类,表示预编译的SQL语句的对象,继承并扩展了Statement接口。
- CallableStatement:(了解即可)Statement类的子类,用于执行SQL存储过程的接口,继承并扩展了PreparedStatement接口。
- ResultSet:装载数据库结果集的接口,用于数据查询。
创建JDBC
步骤
- 载入JDBC驱动程序:使用Class.forName()方法加载特定的驱动程序
//使用Class.forName()方法加载特定的驱动程序 forName("com.mysql.cj.jdbc.Driver");
- 定义连接URL,建立数据库对象:jdbc:mysql://:主机名或IP:3306/<数据库名>
//2.创建数据库连接 Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/lx?serverTimeZone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false","数据库用户名","数据库密码");
- 创建Statement对象
PreparedStatement pstmt=conn.prepareStatement(sql);//sql为String类型的SQL语句
- 执行查询或更新的数据库操作
pstmt.executeQuery();//查询SQl语句 pstmt.executeUpdate();//更新SQL语句
- 处理结果集:主要包括next()方法,用于移动结果集游标,逐行处理结果集,getString()、getInt()、getDate()、getDouble()等方法,用于将数据库中的数据类型转换为Java的数据类型。
while (rs.next()){//光标推进一格,其中数据是否有效,默认光标在第一个单元格的上方 System.out.println(rs.getString("username"));//通过列名找到对应列数据 System.out.print(rs.getString(1));//方法重载,通过列排序找到对应列数据 System.out.print(rs.getString(2)); System.out.println(rs.getString(3)); }
JDBC中主要的类
- Class类
-
public static Class forName(String className):该方法根据给定的字符串参数返回相应的Class对象。即载入JDBC驱动程序,创建数据库访问渠道对象。
-
public String getName():该方法返回类名
-
-
DriverManager类:维护与数据库驱动程序之间的连接。它实现驱动程序的装载、创建与数据库系统连接的Connection类对象
-
DriverManager.getConnection(URL,数据库登录名,数据库密码):连接指定数据库
-
-
Connection接口:管理指定数据库的连接
-
createStatement()方法:创建Statement类的实例
-
prepareStatement()方法:创建PreparedStatement类的实例。
-
close():立即释放此Connection对象的数据库和JDBC资源
-
-
Statement接口:提供执行数据库操作的方法
-
executeQuery()方法:它用来执行一个查询语句,参数是一个String对象,就是一个SELECT语句。它的返回值是ResultSet类的对象,查询结果封装在该对象中。
-
executeUpdate()方法:它用来执行更新操作,参数是一个String对象,即一个更新数据表记录的SQL语句。使用它可以对表中的记录进行修改、插入和删除等操作。
-
close():关闭Statement对象。
-
-
ResultSet接口:提供对查询结果集进行处理的方法
-
next()方法:光标移到下一条记录,返回一个boolean值。光标的默认初始位置是有效对象的上方。
-
previous()方法:光标移到前一条记录。
-
getXXX()方法:获取指定类型的字段的值。调用方式 getXXX("字段名") 或 getXXX(int i)。i值从1开始表示结果集中第一列的字段。
-
close():关闭ResultSet对象
-
JDBC日期时间处理
对于数据库中不同的时间类型,要分别采用与之相对应的Java包装类来存取:
- 日期类型用java.sql.Date getDate():取年月日
- 时间类型用java.sql.Time getTime():取时分秒
- 日期/时间类型用java.sql.Timestamp; getTimestamp():取年月日时分秒
将JDBC的日期/时间类型转换为字符串:
Timestamp timeStamp = rs.getTimestamp("birth"); //通过数据库访问获取到该数据
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式化日期
String str = sdf.format(timeStamp);
将java.sql.Timestamp转换为java.util.Date:
java.sql.Timestamp ts;
java.util.Date utilDate;
utilDate = ts; //多态
将java.util.Date转换为java.sql.Timestamp:
java.sql.Timestamp ts;
java.util.Date utilDate;
ts.setTime(utilDate.getTime());
PreparedStatement对象
- 特点:
- 预编译的SQL语句的对象
-
解决Statement静态拼接所产生的SQL注入问题
-
Statement接口的子接口,可动态设置参数,允许使用不同的参数多次执行同样的SQL语句。
-
提高了执行速度
-
与Statement的不同:
-
PreparedStatement语句中包含了警告预编译的SQL语句,拥有更高的执行效率
-
Statement只适用于简单的SQL语句;PreparedStatement可以执行带参数的SQL语句,语句中可以包含多个用问号?代表的字段,在程序中可以利用setXxx()方法设置该字段的内容,增强了程序设计的动态性
-
常用方法:
-
ResultSet executeQuery(); //可以执行SQL查询并获取ResultSet对象
-
int executeUpdate() ;//可以执行Update /Insert/Delete操作,返回值是执行该操作所影响的行数。
-
boolean execute();
//这是一个最为一般的执行方法,可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet。
-
-
事务处理
- setAutoCommit(boolean autoCommit):将此连接的自动提交模式设置为给定状态。
- commit():使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁。
- collback():取消在当前事务中进行的所有更改,并释放此 Connection 对象当前持有的所有数据库锁。如果要取消事务中的操作,则可以使用ROLLBACK命令。执行该命令后,事务中的所有操作都被取消,数据库恢复到事务开始之前的状态,同时事务所占用的系统资源和数据库资源被释放。
- connection.rollback();//回滚事务。
- SavePoint sp = connection.setSavepoint(); //设置保存点
- connection.rollerbak(sp); //回滚到保存点
- connection.commit();
-
setSavepoint():在当前事务中创建一个未命名的保存点 (savepoint),并返回表示它的新 Savepoint 对象。
-
setSavepoint(String name) :在当前事务中创建一个具有给定名称的保存点,并返回表示它的新Savepoint 对象。