zoukankan      html  css  js  c++  java
  • JDBC存在的问题

    1.数据库连接频繁的创建和关闭,缺点是浪费数据库资源,影响操作效率。
      设想:使用数据库连接池

    2.sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
      设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码

    3.通过prepareStatement向占位符设置参数,存在硬编码(参数位置,参数)问题。系统不易维护。
      设想:将sql中的占位符及对应的参数类型配置在配置文件中,能过自动输入到映射

    4.遍历查询结果集存在硬编码(列名)
      设想:通过进行 sql查询结果向java对象映射,能过自动输出到映射

    code

    package cn.itcast.mybatis.jdbc;

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

    /**
    * jdbc测试程序
    * @author jinliang
    *
    */
    //jdbc存在的问题
    /*
    * 1.数据库连接频繁的创建和关闭,缺点是浪费数据库资源,影响操作效率。
    * 设想:使用数据库连接池
    *
    * 2.sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
    * 设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码
    *
    * 3.通过prepareStatement向占位符设置参数,存在硬编码(参数位置,参数)问题。系统不易维护。
    * 设想:将sql中的占位符及对应的参数类型配置在配置文件中,能过自动输入到映射
    *
    * 4.遍历查询结果集存在硬编码(列名)
    * 设想:通过进行 sql查询结果向java对象映射,能过自动输出到映射
    *
    */
    public class JdbcTest {

    public static void main(String[] args) {
    Connection connection = null;
    //PreparedStatement是预编译的Statement,通过Statement发起数据库的操作
    //PreparedStatement防止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语句 ?表示占位符
    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) {
    e.printStackTrace();
    }
    }
    if(preparedStatement!=null){
    try {
    preparedStatement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(connection!=null){
    try {
    connection.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    }

    }

    }

  • 相关阅读:
    面试官问:为什么 Java 线程没有 Running 状态?我懵了
    阿里内部员工,排查Java问题常用的工具单
    面试美团,面试官突然问我 Java “锁” ,我哭了
    python optparse模块的用法
    cmd的终结工具cmder
    python的pexpect模块
    thinkpad8平板安装win10系统
    linux系统中set、env、export关系
    网件wndr4300 ttl连接
    Ubuntu下修改缺省dash shell为bash shell
  • 原文地址:https://www.cnblogs.com/jixianbiancheng/p/5865859.html
Copyright © 2011-2022 走看看