基于Spring Boot应用Java原生JDBC操作数据库(查增改删)

本文详细介绍了如何使用Java原生JDBC进行数据库的查询、插入、更新和删除操作。通过示例代码展示了每个操作的步骤,包括加载驱动、建立连接、执行SQL和处理结果集等。此外,还提供了数据源对象和资源关闭的通用函数,以及建表和数据初始化的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录:290

场景:基于Spring Boot应用Java原生JDBC操作数据库。包括查、增、改、删操作。对应SQL关键字是select、insert into、update、delete。

版本:

JDK 1.8
MySQL 5.7.33
Spring Boot 2.6.3
Spring Framework 5.3.15

名词:

JDBC:即Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。

操作类:

java.sql.Connection
java.sql.DriverManager
java.sql.PreparedStatement
java.sql.ResultSet
java.lang.Class
com.mysql.cj.jdbc.Driver

目的:

便于查阅Java原生JDBC的查、增、改、删操作。清楚描述一个函数,了解函数入参类型,了解返回值类型,应该就可以参透这个函数,至少应用层面是没问题。

一、查

查,即使用Java原生JDBC对数据库的数据做查询操作。

SQL关键字:select。

1.步骤

(1)获取数据库连接信息

(2)加载驱动(com.mysql.cj.jdbc.Driver)

(3)获取数据库连接(java.sql.Connection)

(4)获取查询SQL

(5)获取查询条件参数

(6)创建PreparedStatement与设置入参(java.sql.PreparedStatement)

(7)执行SQL: select语句与获取结果集

(8)遍历ResultSet和封装成List<Map<String, Object>>,(java.sql.ResultSet)

(9)异常处理

(10)关闭操作的相关资源

2.实例

本例查询一条数据并把结果集封装为List<Map<String, Object>>。

/**
 * 查
 * 1. java.sql.Connection
 * 2. java.sql.DriverManager
 * 3. java.sql.PreparedStatement,函数executeQuery()
 * 4. java.sql.ResultSet
 */
public static List<Map<String, Object>> f1() {

  // 1.获取数据库连接信息
  DatabaseInfo dbInfo = new DatabaseInfo();
  String username = dbInfo.getUsername();
  String password = dbInfo.getPassword();
  String jdbcUrl = dbInfo.getJdbcUrl();
  String driverName = dbInfo.getDriverName();
  Connection conn = null;
  PreparedStatement pStatement = null;
  List<Map<String, Object>> result = null;
  ResultSet resultSet = null;
  try {
    // 2.加载驱动
    Class.forName(driverName);
    // 3.获取数据库连接
    conn = DriverManager.getConnection(jdbcUrl, username, password);
    // 4.获取查询SQL
    String sql = getSelectSql01();
    // 5.获取查询条件参数
    Object[] args = new Object[]{"杭州", "1"};
    // 6.创建PreparedStatement与设置入参
    pStatement = conn.prepareStatement(sql);
    pStatement.setObject(1, args[0]);
    pStatement.setObject(2, args[1]);
    // 7.执行SQL: select语句与获取结果集
    resultSet = pStatement.executeQuery();
    // 8.遍历ResultSet和封装成List<Map<String, Object>>
    result = new ArrayList<>();
    while (resultSet.next()) {
        ResultSetMetaData rsmd = resultSet.getMetaData();
        int columnCount = rsmd.getColumnCount();
        Map<String, Object> oneRow = new HashMap<>();
        for (int i = 1; i < columnCount + 1; i++) {
            String columnName = rsmd.getColumnName(i);
            oneRow.put(columnName, resultSet.getObject(columnName));
        }
        result.add(oneRow);
  
    }
  } catch (Exception e) {
    // 9.异常处理
    closeResultSet(resultSet);
    closePreparedStatement(pStatement);
    closeConnection(conn);
    e.printStackTrace();
  } finally {
    // 10.相关操作关闭
    closeResultSet(resultSet);
    closePreparedStatement(pStatement);
    closeConnection(conn);
  }
  return result;
}

/**
 * 1.select语句
 * 2.入参带查询条件
 */
public static String getSelectSql01() {
  String sql01 = "SELECT\n" +
    "  ID,CITY_NAME,LAND_AREA,POPULATION,GROSS,\n" +
    "  CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME\n" +
    "FROM  t_city " +
    "WHERE CITY_NAME = ? AND ID =? ";
  return sql01.toString();
}

二、增

增,即使用Java原生JDBC对数据库的数据做插入操作。

SQL关键字:insert into。

1.步骤

(1)获取数据库连接信息

(2)加载驱动(com.mysql.cj.jdbc.Driver)

(3)获取数据库连接(java.sql.Connection)

(4)获取插入SQL

(5)组装插入参数

(6)创建PreparedStatement与设置入参(java.sql.PreparedStatement)

(7)执行SQL: insert语句和返回行数

(8)打印返回值

(9)异常处理

(10)关闭操作的相关资源

2.实例

本例插入一条数据。

/**
 * 增
 * 1. java.sql.Connection
 * 2. java.sql.DriverManager
 * 3. java.sql.PreparedStatement,函数executeUpdate()
 */
public static void f2() {
  // 1.获取数据库连接信息
  DatabaseInfo dbInfo = new DatabaseInfo();
  String username = dbInfo.getUsername();
  String password = dbInfo.getPassword();
  String jdbcUrl = dbInfo.getJdbcUrl();
  String driverName = dbInfo.getDriverName();
  Connection conn = null;
  PreparedStatement pStatement = null;
  try{
    // 2.加载驱动
    Class.forName(driverName);
    // 3.获取数据库连接
    conn = DriverManager.getConnection(jdbcUrl, username, password);
    // 4.获取插入SQL
    String sql = getInsertSql01();
    // 5.组装插入参数
    Object[] args = new Object[]{
            "杭州", "16850", "1200", "1.81",
            "杭州是一个好城市", "2021", "2022-08-07 11:16:18"
    };
    // 6.创建PreparedStatement与设置入参
    pStatement = conn.prepareStatement(sql);
    pStatement.setObject(1, args[0]);
    pStatement.setObject(2, args[1]);
    pStatement.setObject(3, args[2]);
    pStatement.setObject(4, args[3]);
    pStatement.setObject(5, args[4]);
    pStatement.setObject(6, args[5]);
    pStatement.setObject(7, args[6]);
    // 7.执行SQL: insert语句和返回行数
    int rows = pStatement.executeUpdate();
    // 8.打印返回值
    System.out.println("rows = " + rows);
  }catch (Exception e){
    // 9.异常处理
    closePreparedStatement(pStatement);
    closeConnection(conn);
    e.printStackTrace();
  }finally {
    // 10.相关操作关闭
    closePreparedStatement(pStatement);
    closeConnection(conn);
  }
}

/**
 * 1.insert语句,插入数据
 * 2.入参带插入数据
 */
public static String getInsertSql01() {
  String sql01 = "INSERT INTO t_city (\n" +
    "  CITY_NAME,LAND_AREA,POPULATION,\n" +
    "  GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME\n" +
    ")\n" +
    "VALUES (?, ?, ?, ?, ?, ?, ?)";
  return sql01.toString();
}

三、改

改,即使用Java原生JDBC对数据库的数据做修改操作。

SQL关键字:update。

1.步骤

(1)获取数据库连接信息

(2)加载驱动(com.mysql.cj.jdbc.Driver)

(3)获取数据库连接(java.sql.Connection)

(4)获取修改SQL

(5)组装修改参数

(6)创建PreparedStatement与设置入参(java.sql.PreparedStatement)

(7)执行SQL: 执行SQL: update语句

(8)打印返回值

(9)异常处理

(10)关闭操作的相关资源

2.实例

本例修改一条数据。

/**
 * 改
 * 1. java.sql.Connection
 * 2. java.sql.DriverManager
 * 3. java.sql.PreparedStatement,函数executeUpdate()
 */
public static void f3() {
  // 1.获取数据库连接信息
  DatabaseInfo dbInfo = new DatabaseInfo();
  String username = dbInfo.getUsername();
  String password = dbInfo.getPassword();
  String jdbcUrl = dbInfo.getJdbcUrl();
  String driverName = dbInfo.getDriverName();
  Connection conn = null;
  PreparedStatement pStatement = null;
  try{
    // 2.加载驱动
    Class.forName(driverName);
    // 3.获取数据库连接
    conn = DriverManager.getConnection(jdbcUrl, username, password);
    // 4.获取修改SQL
    String sql = getUpdateSql01();
    // 5.组装修改参数
    Object[] args = new Object[]{"杭州是互联网城市", "2022-08-07 11:18:57", "杭州", "1"};
    // 6.创建PreparedStatement与设置入参
    pStatement = conn.prepareStatement(sql);
    pStatement.setObject(1, args[0]);
    pStatement.setObject(2, args[1]);
    pStatement.setObject(3, args[2]);
    pStatement.setObject(4, args[3]);
    // 7.执行SQL: update语句
    int rows = pStatement.executeUpdate();
    // 8.打印返回值
    System.out.println("rows = " + rows);
  }catch (Exception e){
    // 9.异常处理
    closePreparedStatement(pStatement);
    closeConnection(conn);
    e.printStackTrace();
  }finally {
    // 10.相关操作关闭
    closePreparedStatement(pStatement);
    closeConnection(conn);
  }
}
/**
 * 1.update语句,修改数据
 * 2.入参带修改数据
 */
public static String getUpdateSql01() {
  String sql = "UPDATE t_city\n" +
    "SET CITY_DESCRIBE = ?,UPDATE_TIME = ?\n" +
    "WHERE CITY_NAME = ? AND ID = ? ";
  return sql.toString();
}

四、删

删,即使用Java原生JDBC对数据库的数据做删除操作。

SQL关键字:delete。

1.步骤

(1)获取数据库连接信息

(2)加载驱动(com.mysql.cj.jdbc.Driver)

(3)获取数据库连接(java.sql.Connection)

(4)获取删除SQL

(5)组装删除条件参数

(6)创建PreparedStatement与设置入参(java.sql.PreparedStatement)

(7)执行SQL: 执行SQL: delete语句

(8)打印返回值

(9)异常处理

(10)关闭操作的相关资源

2.实例

本例删除一条数据。

/**
 * 删
 * 1. java.sql.Connection
 * 2. java.sql.DriverManager
 * 3. java.sql.PreparedStatement,函数executeUpdate()
 */
public static void f4() {
  // 1.获取数据库连接信息
  DatabaseInfo dbInfo = new DatabaseInfo();
  String username = dbInfo.getUsername();
  String password = dbInfo.getPassword();
  String jdbcUrl = dbInfo.getJdbcUrl();
  String driverName = dbInfo.getDriverName();
  Connection conn = null;
  PreparedStatement pStatement = null;
  try{
    // 2.加载驱动
    Class.forName(driverName);
    // 3.获取数据库连接
    conn = DriverManager.getConnection(jdbcUrl, username, password);
    // 4.获取删除SQL
    String sql = getDeleteSql01();
    // 5.组装删除条件参数
    Object[] args = new Object[]{"杭州", "1"};
    // 6.创建PreparedStatement与设置入参
    pStatement = conn.prepareStatement(sql);
    pStatement.setObject(1, args[0]);
    pStatement.setObject(2, args[1]);
    // 7.执行SQL: delete语句
    int rows = pStatement.executeUpdate();
    // 8.打印返回值
    System.out.println("rows = " + rows);
  }catch (Exception e){
    // 9.异常处理
    closePreparedStatement(pStatement);
    closeConnection(conn);
    e.printStackTrace();
  }finally {
    // 10.相关操作关闭
    closePreparedStatement(pStatement);
    closeConnection(conn);
  }
}

/**
 * 1.delete语句,删除数据
 * 2.入参带删除条件
 */
public static String getDeleteSql01() {
  String sql = "DELETE FROM t_city WHERE CITY_NAME = ? AND ID = ?";
  return sql.toString();
}

五、共用函数

本例的查增改查,都会需要数据源信息和关闭资源操作。

1.数据源对象

数据源对象参数,本例只给出必须的4个,其它按需添加。

@Data
private static class DatabaseInfo {
  private String username = "***填写自定义***";
  private String password = "***填写自定义***";
  private String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/***填写自定义***";
  private String driverName = "com.mysql.cj.jdbc.Driver";
}

2.关闭资源操作

对数据库操作,对于资源类的操作,使用完毕后需手动关闭。当使用框架时,基本上不用手动关闭,而是框架会帮助关闭,比如使用org.springframework.jdbc.core.JdbcTemplate时,springframework框架自动做此事。本例是使用Java原生JDBC操作数据库,因此手动关闭是必须的而且优雅的。

/**
 * 关闭资源: ResultSet
 * */
public static void closeResultSet(@Nullable ResultSet rs) {
  if (rs != null) {
    try {
        rs.close();
    } catch (SQLException var2) {
        var2.printStackTrace();
    }
  }
}
/**
 * 关闭资源: Connection
 * */
public static void closeConnection(@Nullable Connection conn) {
  if (conn != null) {
    try {
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
  }
}
/**
 * 关闭资源: PreparedStatement
 * */
public static void closePreparedStatement(@Nullable PreparedStatement pStatement) {
  if (pStatement != null) {
    try {
        pStatement.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
  }
}

六、支撑

针对本例使用Java原生JDBC对数据库的数据做查增改删操作,使用到的建表语句和数据初始化语句。

1.建表语句

建表语句,主键使用了MySQL的自增功能,即插入一条数据,可以不用赋值,但是赋值的话需判断不重复即可。

CREATE TABLE t_city (
  ID BIGINT(16) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  CITY_NAME VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT '城市名',
  LAND_AREA DOUBLE DEFAULT NULL COMMENT '城市面积',
  POPULATION BIGINT(16) DEFAULT NULL COMMENT '城市人口',
  GROSS DOUBLE DEFAULT NULL COMMENT '生产总值',
  CITY_DESCRIBE VARCHAR(512) COLLATE utf8_bin DEFAULT NULL COMMENT '城市描述',
  DATA_YEAR VARCHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT '数据年份',
  UPDATE_TIME  DATETIME DEFAULT NULL COMMENT '更新时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='城市信息表';

2.插入语句

插入语句,插入数据便于验证查询、更新、删除功能。

INSERT INTO t_city (
  ID,CITY_NAME,LAND_AREA,POPULATION,
  GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME)
  VALUES
('1','杭州','16850','1200','1.61','杭州是一个好城市','2020','2022-08-07 11:39:32'),
('2','杭州','16850','1200','1.81','杭州是一个好城市','2021','2022-08-07 11:39:33');

以上,感谢。

2022年8月7日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值