使用JDBC操作数据库

    科技2022-07-10  160

    演示JDBC操作数据库

    1.添加依赖

    <!--mysql数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version> </dependency>

    2.操作数据库详细步骤

    加载数据库驱动通过驱动管理器获取数据库链接定义SQL语句,并且用?表示占位符获取预处理statement设置参数,参数序号从1开始向数据库发出SQL处理结果集释放资源

    3.实现

    Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 通过驱动管理器获取数据库链接 connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql"); // 定义SQL语句,并且用`?`表示占位符 String sql = "select * from user where id = ? and username = ?"; // 获取预处理statement preparedStatement = connection.prepareStatement(sql); // 设置参数,参数序号从1开始 preparedStatement.setObject(1, 1); preparedStatement.setObject(2, "lucy"); // 向数据库发出SQL resultSet = preparedStatement.executeQuery(); // 处理结果集 List<User> userList = new ArrayList<>(); if (resultSet.next()) { Long id = resultSet.getLong("id"); String username = resultSet.getString("username"); User user = new User(id, username); userList.add(user); } System.out.println(userList); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 释放资源(倒序释放) if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } }

    tips:由于Connection、PreparedStatement、ResultSet均实现了AutoCloseable,可以使用try-with-reource机制关闭资源,简化finally代码块

    4.基于原始JDBC开发存在的问题

    1.数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能;2.SQL语句在代码中硬编码,造成代码不易维护,实际应用中sql变化的可能较大,sql变动需要改变 java代码;3.使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能 多也可能少,修改sql还要修改代码,系统不易维护;4.对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库 记录封装成pojo对象解析比较方便。

    5.解决上述问题的思路

    1.使用数据库连接池初始化连接资源,复用连接2.将SQL语句抽取到xml配置文件中3.使用反射设置参数4.使用内省处理数据库字段与对象属性的映射
    Processed: 0.009, SQL: 8