JDBC

概念:Java DataBase Connectivity,Java数据库连接,JDBC本质:是官方定义的一套操作所有关系型数据库的规则,即接口

操作步骤

  1. 导入驱动mysql-connector-java-5.1.47.jar包
  2. 注册驱动
  3. 获取数据库连接对象Connection
  4. 定义SQL
  5. 获取预处理对象Statement/PrepareStatement
  6. 封装结果集对象ResultSet
  7. 处理结果
  8. 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 2.'注册驱动'
Class.forName("com.mysql.jdbc.Driver");
3.'获取数据库连接对象Connection'
Connection conn = DricverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jtx?useSSL=true&characterEncoding=UTF-8", "root", "root密码");
4.'定义SQL'
String sql = "update stu set balance = 500 where id = 1";
5.'获取预处理对象Statement'
Statement stmt = conn.createStatement();
6.'执行SQL,接收返回结果'
int count = stmt.executeUpdate(sql);
7.'处理结果'
System.out.println(count);
8.'释放资源'
stmt.close();
conn.close();

对象详解

DriverManager:驱动管理对象

  1. 注册驱动:告诉程序应该使用哪一个数据库驱动jar
    1
    Class.forName("com.mysql.jdbc.Driver");
  2. 获取数据库连接
    • 方法:static Connection getConnection(String url,String user, String password)
    • url语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
    • 如果连接的是本机mysql服务器,并且mysql服务默认端口为3306,url可以简写为:jdbc:mysql:///数据库名称
      1
      Connection conn = DriverManager.getConnection("jdbc:mysql:///jtx?useSSL=true", "数据库用户名", "数据库密码");
  3. 注意MySQL5之后的驱动jar包可以省略注册驱动的步骤

Connection:数据库连接对象

  1. 获取执行SQL的对象
    • Statement createStatement()
      1
      Statement stmt = conn.createStatement();
    • PrepareStatement prepareStatement(String sql)
  2. 管理事务
    • 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
    • 提交事务:commit()
    • 回滚事务:rollback()

Statement:预处理对象

  1. 执行SQL
    1. boolean ececute(String sql):可以执行任意的SQL语句
    2. int executeUpdate(String sql)执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句
      • 返回值:影响的行数返回值>0则是执行成功
    3. ResultSet executeQuery(String sql):执行DQL(select)语句
      1
      ResultSet res = stmt.executeQuery(sql);

ResultSet:结果集对象

  1. boolean **next()**:游标向下移动一行,判断当前行是否是最后一行末尾,如果是返回false
  2. **getXxx(参数)**:获取数据
    • Xxx:代表数据类型如:int getInt()
    • 参数:
      1. int:代表列的编号,从1开始,如:getInt(1);
      2. String:代表列名称如:getDouble(balance);
  3. 使用步骤:
    • 游标向下移动一行
    • 判断是否有数据
    • 获取数据
      1
      2
      3
      4
      5
      6
      7
      8
      9
         // 循环判断游标是否是最后一行末尾
      while (res.next()) {
      // 获取数据
      int id = res.getInt(1);
      String name = res.getString("uname");
      double balance = res.getDouble(3);
      // 打印数据
      System.out.println(id + "---" + name + "---" + balance);
      }

PrepareStatement:预处理对象

  1. 解决SQL注入问题
  2. 预编译SQL:参数使用?作为占位符
  3. 给**?**赋值
    • 方法:seXxx(参数1,参数2)
      • 参数1:?的位置编号,从1开始
      • 参数2:?的值
  4. 注意:在web项目中,如果出现classNotFound异常,则应该把jdbc的lib包放在webconten>web-inf>lib里面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// JDBC常用获取连接的方法

static {
try {
Properties pro = new Properties();
// 读取资源文件
pro.load(JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
url = pro.getProperty("url");
username = pro.getProperty("username");
password = pro.getProperty("password");
driver = pro.getProperty("driver");

// 注册驱动
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
获取连接
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(url,username,password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}

释放资源
public static void close(Connection conn,PreparedStatement ps,ResultSet rs) {
try {
if(conn!=null) {
conn.close();
}
if(ps!=null) ps.close();
if(rs!=null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
1
2
3
4
5
6
7
8
9
// 获取数据库连接
conn = JDBCUtil.getConnection();
// 定义sql
String sql = "insert into userinfo values(null,'"+userName+"','"+passWord+"')";
// 预处理
ps = conn.prepareStatement(sql);
// 执行
ps.executeUpdate();

JDBC控制事务

  1. 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则多个步骤要么同时成功,要么同时失败
  2. 操作
    • 开启事务
    • 提交事务
    • 回滚事务
  3. 使用Connection对象来管理事务
    • 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
      • 在执行SQL前开启事务
    • 提交事务:commit()
      • 当所有SQL都执行完成后提交事务
    • 回滚事务:rollback()
      • 在catch中回滚事务

DBUtils

  1. 作用:简化JDBC操作
  2. 实现:需要导入commons-dbutils-1.7.jarmysql-connector-java-5.1.47.jar的包
  3. 常用组件:
    • QueryRunner 执行各种sql语句
    • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean(实体类/vo/dto/pojo)实例中。对象
    • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
    • KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。 用户查询多条数据
    • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。(用于查询单个)
    • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。用户查询多条数据 List<Map<String,Object>>
    • ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。 (自增的id,表记录数 select count())
    • ArrayHandler:把结果集中的第一行数据转成对象数组。
    • ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
    • ColumnListHandler:将结果集中某一列的数据存放到List中。
    • KeyeHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
    • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

相关文章

JAVA基础

JAVA多线程

JUC