博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1--单独使用jdbc开发问题总结
阅读量:5153 次
发布时间:2019-06-13

本文共 3911 字,大约阅读时间需要 13 分钟。

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

                  }

              }

 

           }

 

       }

转载于:https://www.cnblogs.com/mao-19/p/5700061.html

你可能感兴趣的文章
Activiti 用户任务并行动态多实例(多用户执行流程)
查看>>
JAM的计数法
查看>>
[AngularJS + Webpack] require directives
查看>>
中间介
查看>>
在win32/安卓开发环境下编译BOX2D代码
查看>>
【JPA】字段访问、属性访问及混合访问
查看>>
斐波那契数列(Fibonacci)递归和非递归实现
查看>>
dbname, instance, sid
查看>>
HDU 2577 How to Type
查看>>
LA 4123 (计数 递推) Glenbow Museum
查看>>
HDU 1533 二分图最小权匹配 Going Home
查看>>
关于学习Python的一些心得
查看>>
两个整数集合的交集 ———— 腾讯2014软件开发笔试题目
查看>>
usaco3.2
查看>>
web开发的一些材料
查看>>
【BZOJ1058】[ZJOI2007]报表统计 STL
查看>>
maven 仓库配置 pom中repositories属性
查看>>
memcached telnet命令
查看>>
hdu1520(树形dp入门)
查看>>
时间的输入
查看>>