原始JDBC 操作

2022-01-19 13:28:06 浏览数 (1)

代码语言:javascript复制
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for jdbc_test
-- ----------------------------
DROP TABLE IF EXISTS `jdbc_test`;
CREATE TABLE `jdbc_test`  (
  `id` int NOT NULL,
  `username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of jdbc_test
-- ----------------------------
INSERT INTO `jdbc_test` VALUES (1, '张三');
INSERT INTO `jdbc_test` VALUES (2, '李四');

SET FOREIGN_KEY_CHECKS = 1;

代码实现

添加

代码语言:javascript复制
    // 插入一条记录 id=3、username=王五
    @SneakyThrows
    @Test
    void JDBC_Test_ADD() {
        String DB_Url = "jdbc:mysql://127.0.0.1:3306/zlk?useUnicode=true";
        String sql = "insert into jdbc_test values(?,?)";

        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        Connection connection = DriverManager.getConnection(DB_Url, "root", "root");
        //获取 PreparedStatement 对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //封装SQL
        preparedStatement.setInt(1, 3);
        preparedStatement.setString(2, "王五");
        //PreparedStatement 执行执行操作,获取结果集
        boolean execute = preparedStatement.execute();
        if (execute) {
            System.out.println("插入成功");
        } else {
            System.out.println("这句话是废话,如果上面执行不成功,一般就是由异常了!");
        }

        //释放资源
        preparedStatement.close();
        connection.close();
    }

删除

代码语言:javascript复制
    // 删除姓名为王五的记录
    @SneakyThrows
    @Test
    void JDBC_Test_Delete() {
        String DB_Url = "jdbc:mysql://127.0.0.1:3306/zlk?useUnicode=true";
        String sql = "delete from jdbc_test where username = ?";

        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        Connection connection = DriverManager.getConnection(DB_Url, "root", "root");
        //获取 PreparedStatement 对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //封装SQL 注意第一位参数的索引下标是 1 而不是0
        preparedStatement.setString(1, "王五");
        //PreparedStatement 执行执行操作,获取结果集
        int i = preparedStatement.executeUpdate();
        if (i > 0) {
            System.out.println("删除成功,受到影响的行数是:"   i);
        } else {
            System.out.println("这句话是废话,如果上面执行不成功,一般就是由异常了!");
        }

        //释放资源
        preparedStatement.close();
        connection.close();
    }

修改

代码语言:javascript复制
    // 将王五的id 修改为4
    @SneakyThrows
    @Test
    void JDBC_Test_Update() {
        String DB_Url = "jdbc:mysql://127.0.0.1:3306/zlk?useUnicode=true";
        String sql = "update jdbc_test set id = ? where username = ? limit ?,?";
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        Connection connection = DriverManager.getConnection(DB_Url, "root", "root");
        //获取 PreparedStatement 对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //封装SQL
        preparedStatement.setInt(1, 4);
        preparedStatement.setString(2, "王五");

        //PreparedStatement 执行执行操作,获取结果集
        int i = preparedStatement.executeUpdate();
        if (i > 0) {
            System.out.println("修改成功,受影响的行数:"   i);
        } else {
            System.out.println("这句话是废话,如果上面执行不成功,一般就是由异常了!");
        }

        //释放资源
        preparedStatement.close();
        connection.close();
    }

查询

代码语言:javascript复制
    // 查询第一页 并展示十条记录
    @SneakyThrows
    @Test
    void JDBC_Test_Select() {
        String DB_Url = "jdbc:mysql://127.0.0.1:3306/zlk?useUnicode=true";
        String sql = "select * from jdbc_test limit ?,?";
        int pageNum = 1;
        int pageSize = 10;
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        Connection connection = DriverManager.getConnection(DB_Url, "root", "root");
        //获取 PreparedStatement 对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, (pageNum - 1) * pageSize);
        preparedStatement.setInt(2, pageSize);
        //PreparedStatement 执行执行操作,获取结果集
        ResultSet resultSet = preparedStatement.executeQuery();

        List<User> userList = new ArrayList<>();
        //遍历结果集取出对象
        while (resultSet.next()) {
            //从1开始,起始索引并不是0
            User userOldWay = new User(resultSet.getInt(1), resultSet.getString(2));
            userList.add(userOldWay);
        }
        System.out.println(userList);

        //释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }

JDBC缺点:

  • 代码重复
  • 还要自己封装对象
  • 不停都创建对象
  • 不停的销毁对象

所以程序员都不会再用JDBC了,而是使用ORM Mybatis 框架

特殊说明:

解决问题的光鲜,藏着磕Bug的痛苦。

万物皆入轮回,谁也躲不掉!

以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

0 人点赞