• 1--单独使用jdbc开发问题总结


    1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。

    设想:使用数据库连接池管理数据库连接

    2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。

    设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

    3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

    设想:将sql语句及占位符号和参数全部配置在xml中

    4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。

    设想:将查询的结果集,自动映射成java对象

    1.1  jdbc编程步骤:

    1、  加载数据库驱动

    2、  创建并获取数据库链接

    3、  创建jdbc statement对象

    4、  设置sql语句

    5、  设置sql语句中的参数(使用preparedStatement)

    6、  通过statement执行sql并获取结果

    7、  sql执行结果进行解析处理

    8、  释放资源(resultSetpreparedstatementconnection)

    Public static void main(String[] args) {
                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 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();
                        }
                    }
    
                }
    
            }

    Public static void main(String[] args) {

               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 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();

                      }

                  }

     

               }

     

           }

    在平凡中坚持前行,总有一天,会遇见优秀的自己
  • 相关阅读:
    python---RabbitMQ(1)简单队列使用,消息依次分发(一对一),消息持久化处理
    python---ORM之SQLAlchemy(4)relationship多对多练习
    ShowcaseView-master
    HT518V311
    上方显示进度的进度条
    ArrowDrawable
    一个仿 github for windows 及 windows 8 的进度条
    高仿语音发送动画,按住闪烁,滑动跟随,删除翻转丢入垃圾桶,比较全的一个动画实例
    Ledongli
    RotatingDoughnut
  • 原文地址:https://www.cnblogs.com/mao-19/p/5700061.html
Copyright © 2020-2023  润新知