一:JDBC (Java DB Connection)—Java数据库连接
JDBC是一种可用于执行SQL语句的JAVA API(ApplicationProgramming Interface应用程序设计接口)。它由一些Java语言编写的类和界面组成
准备工作:引入JDBC驱动程序
新建lib包,把驱动导入到模块中
JDBC操作数据库----步骤:
- 注册驱动(只需执行一次)
- 建立连接(Connection)
- 获取数据库操作对象(statement执行sql语句)
- 执行sql语句
- 处理结果集(ResultSet)
- 释放资源
步骤一:注册驱动(三种方式)
-
Class.forname(“com.mysql.jdbc.Driver”)
推荐这种方式,不会对具体的驱动类产生依赖
-
DriverManager.registerDriver(com.mysql.jdbc.Driver);
会对具体的驱动类产生依赖
Driver driver = new Driver(); DriverManager.registerDriver(driver);
-
System.setProperty(“jdbc.drivers”, “driver1:driver2”);
虽然不会对具体的驱动类产生依赖;但注册不太方便,很少使用
步骤二:建立连接(Connection)
通过Connection建立连接,Connection是一个接口类,其功能是与数据库进行连接(会话)。
建立Connection接口类对象:
JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。JDBC URL的标准由三部分组成,各部分间用冒号分隔。
Connection conn =DriverManager.getConnection(url, user, password);
其中URL的格式要求为:
JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
user即为登录数据库的用户名,如root
password即为登录数据库的密码,为空就填””
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/bj","root","123456");
步骤三:获取数据库操作对象(statement执行sql语句)
-
执行对象Statement负责执行SQL语句,由Connection对象产生。
-
创建Statement的语法为:
Statement state = conn.createStatement();
步骤四:执行SQL语句
执行对象Statement提供两个常用的方法来执行SQL语句。
- executeQuery(Stringsql),该方法用于执行实现查询功能的sql语句,返回类型为ResultSet(结果集)。
ResultSet rs =state.executeQuery(sql);
- executeUpdate(Stringsql),该方法用于执行实现增、删、改功能的sql语句,返回类型为int,即受影响的行数。
int count = state.executeUpdate(sql);
步骤五:处理执行结果集
-
ResultSet对象负责保存Statement执行后所产生的查询结果。
-
结果集ResultSet是通过游标来操作的。
-
游标就是一个可控制的、可以指向任意一条记录的指针。有了这个指针我们就能轻易地指出我们要对结果集中的哪一条记录进行修改、删除,或者要在哪一条记录之前插入数据。一个结果集对象中只包含一个游标。
-
Statement 接口中定义了下列方法用于执行 SQL 语句:
-
excuteUpdate(String sql):执行更新操作INSERT、UPDATE、DELETE
-
ResultSet excuteQuery(String sql):执行查询操作SELECT
//ResultSet excuteQuery(String sql):执行查询操作SELECT
ResultSet rs = stat.executeQuery("select name bname,sex gender,borndate born from beauty");
while(set.next()) {
String name = set.getString("bname");
char gender = set.getString("gender").charAt(0);
Date date = set.getDate("born");
String date = set.getString("born");
System.out.println(name+"\t"+gender+"\t"+date);
//excuteUpdate(String sql):执行更新操作INSERT、UPDATE、DELETE
String sql="insert into dept(deptno,dname,loc) values (101,'july','冰岛')";
String sql="delete from dept where deptno=101";
String sql="update dept set dname='june',loc='阿拉巴' where deptno=100";
专门执行DML语句
int count = state.executeUpdate(sql);
System.out.println(count==1 ? "保存成功": "保存失败");
System.out.println(count==1 ? "删除成功": "删除失败");
System.out.println(count==1 ? "更新成功": "更新失败");
步骤六:释放资源
finally {
//6.释放资源
try {
if (rs!=null)
{
rs.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (state!=null)
{
state.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (conn!=null)
{
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
二、封装JDBCUtils
package Utils;
import java.sql.*;
/**JDBC工具类
* @author soldier
* @create 2021-06-27 17:18
*/
public class JDBCUtil {
public JDBCUtil() {
}
//静态代码块在类加载时执行,且只执行一次
//注册驱动
static
{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接对象
* @return
* @throws SQLException
*/
public static Connection getConnection () throws SQLException {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/bj",
"root", "123456");
}
/**
* 关闭资源
* @param conn 连接对象
* @param state 操作对象
* @param rs 结果集
*/
public static void close(Connection conn, Statement state, ResultSet rs)
{
if (rs != null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (state != null) {
try {
state.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}