使用JDBC操作数据库

演示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.使用内省处理数据库字段与对象属性的映射
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火车站卖橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值