JDBC单纯使用的问题

单独使用jdbc编程中问题总结

目的:
1、mybatis等持久层框架都是对jdbc的封装,为了更好的去学习mybatis,对单独使用jdbc编程中问题进行总结。
2、企业开发中要进行技术选型,对于小型 的项目来说,单独使用jdbc或对 jdbc简单的封装也在技术选型范围考虑之内。企业在技术选型主要考虑人力资源等,以节省成本及创建利益最大化为目标。

问题总结:

1、程序中存在硬编码(数据驱动加载,创建数据连接、sql语句),不利于系统维护。
设想解决硬编码:可以sql语句等信息配置在xml中。

2、数据库连接使用时打开不时立即关闭,频繁开关连接对数据库资源是一种浪费。
设想解决方案:使用数据库连接池。

3、向preparedStatement设置参数时 将参数下标 号(从1开始)硬编码在代码,并且将向占位符号设置的参数也硬编码了。
设想解决方案:可以自动通过程序将java类型对象映射到preparedStatement中。

4、从Resultset中取出结果集进行遍历,将列名硬编码
设想解决方案:可以自动通过程序将sql查询结果集映射到时java对象中,自动完成将sql查询的列值构造成一个java对象。

package cn.zm.mybatis.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * JdbcTest 单独使用jdbc开发程序,目的是为了总结其中问题
 */
public class JdbcTest {
    public static void main(String[] args) {
        // 数据库连接
        Connection connection = null;
        // 预编译的Statement,jdbc和数据库通过Statement通信,Statement中封装了sql语句及参

        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", "123");
            // 定义sql语句 ?表示占位符
            // 预编译的Statement好处:可以提高数据库的性能,使用占位符可以有效防止sql注入
            String sql = "select * from user where  username = ? ";
            // 获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            // 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "王五");
            // 向数据库发出sql执行查询,查询出结果集
            resultSet = preparedStatement.executeQuery();
            // 遍历查询结果集
            while (resultSet.next()) {
                System.out.println(resultSet.getString("id") + "  "
                        + resultSet.getString("username"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值