原生态JDBC程序问题总结
来源:互联网 发布:mac登陆windows 编辑:程序博客网 时间:2024/06/05 20:00
MyBatis是一个持久层的框架。持久层的框架都是对JDBC的封装。
<1>对原生态JDBC程序(单独使用JDBC开发)问题总结
<1.1>jdbc程序
使用jdbc查询mysql数据库中用户表的记录
创建java工程,加入jar包
数据库驱动包:mysql/oracle
一般需要以下七个步骤:
加载JDBC驱动;
建立并获取数据库连接;创建 JDBC Statements 对象;设置SQL语句的传入参数;执行SQL语句并获得查询结果;对查询结果进行转换处理并将处理结果返回;释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);
具体代码如下
public static List<Map<String,Object>> queryForList(){ //建立数据库连接 Connection connection = null; //结果集对象 ResultSet rs = null; //预编译的statement,使用预编译的statement提高数据库性能 PreparedStatement stmt = null; List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>(); try { // 加载JDBC驱动 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:ORACLEDB"; String user = "trainer"; String password = "trainer"; // 通过驱动管理类获取数据库连接 connection = DriverManager.getConnection(url,user,password); //定义sql语句,?表示占位符 String sql = "select * from userinfo where user_id = ? "; //获取预处理的Statement对象 stmt = connection.prepareStatement(sql); //设置传入参数,第一个参数为sql语句中参数的序号 stmt.setString(1, "zhangsan"); //执行SQL语句 rs = stmt.executeQuery(); //处理查询结果(将查询结果转换成List<Map>格式) ResultSetMetaData rsmd = rs.getMetaData(); int num = rsmd.getColumnCount(); while(rs.next()){ Map map = new HashMap(); for(int i = 0;i < num;i++){ String columnName = rsmd.getColumnName(i+1); map.put(columnName,rs.getString(columnName)); } resultList.add(map); } } catch (Exception e) { e.printStackTrace(); } finally { try { // 关闭结果集 if (rs != null) { rs.close(); rs = null; } // 关闭执行 if (stmt != null) { stmt.close(); stmt = null; } if (connection != null) { connection.close(); connection = null; } } catch (SQLException e) { e.printStackTrace(); } } return resultList; }
<1.2>问题总结
1.数据库连接,使用时就创建,不使用时就关闭。数据库连接频繁的开启和关闭本身就造成了资源的浪费,影响系统的性能。
解决方案:可以使用数据库连接池来管理数据库的连接。
2.将sql语句硬编码到java代码中,如果sql语句需要修改,需要重新修改java代码,不利于系统维护。
解决方法:将sql语句配置在xml中。即使sql语句变化,不需要重新更改java代码。
3.在向statement设置参数时,对占位符的位置和向占位符设置的变量,硬编码在java代码中,不利于系统维护。
解决方法:将sql语句,占位符及参数全部配置在xml中。
4.从resultSet中遍历结果集数据时,存在硬编码。
System.out.println(rs.getString(“id));
解决方法:将查询结果自动映射成java对象,这样就不需要在代码中将对象写死。
带着这四点问题去学习MyBatis。
具体参考https://my.oschina.net/xianggao/blog/591482#OSC_h1_43
阅读全文
0 0
- 原生态jdbc程序中问题总结
- 原生态JDBC程序问题总结
- jdbc原生态问题总结
- 对原生态jdbc程序中的问题总结
- 对原生态JDBC程序中问题总结
- 对原生态jdbc程序中问题总结
- 对原生态jdbc程序中的问题总结
- 原生态JDBC程序
- 对原生态jdbc(单独使用jdbc开发)问题总结
- 对原生态jdbc程序中问题总结-敲过代码
- Mybatis之对原生态JDBC程序中问题总结(1)
- 1.原生态JDBC编程详解与问题总结
- Java 原生态JDBC问题总结及MyBatis解决方法
- 【SpringMVC+mybatis】1.原生态JDBC编程中的问题总结
- JDBC原生态开发的过程及问题总结
- Mybatis---原生态JDBC编程的问题
- 【Mybatis进阶】-- 原生态jdbc程序开发的短板
- Mybatis学习(一)原生态的JDBC编程总结
- Ionic从零单排(五)——Ionic程序与Java后台进行数据交互
- 『ORACLE』更改表名(11g)
- JAVA常用排序算法之简单选择排序
- Given a roman numeral, convert it to an integer.
- 查看端口占用情况
- 原生态JDBC程序问题总结
- swipe js插件使用
- poj3281 Dinig(最大流)
- 字符串数组
- 离散数学10
- Eclipse修改包访问规则
- [LeetCode] Flatten Binary Tree to Linked List 将二叉树展开成链表 C++
- JAVA-15-多线程的调度和控制、线程安全、死锁、等待和唤醒
- 解决Vim"UltiSnips requires py >= 2.7 or py3"