在使用jdbc来操作数据库时,首先要准备对应的数据库连接的jar包,使用jdbc连接数据库的一般代码如下:
import java.sql.Connection;使用这种方式存在的问题:
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* Created by ajin on 16-12-14.
*/
public class JdbcConnect {
public static void main(String[] args){
//数据库连接
Connection connection =null;
//预编译的Statement,使用这种预编译的statement可以提高数据库的性能,还能防止sql注入
PreparedStatement preparedStatement =null;
//结果集
ResultSet resultSet =null;
try{
//加载数据库的驱动,这里使用mysql
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理器来获得数据库的连接
connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis","root","admin");
//定义sql语句
String sql="select * from userinfo where name = ?";
//获取预处理的statement
preparedStatement=connection.prepareStatement(sql);
//设置占位符的参数
preparedStatement.setString(1,"zcj");
//向数据库发出sql进行查询,查询出结果集
resultSet=preparedStatement.executeQuery();
//遍历结果集
while(resultSet.next()){
System.out.print(resultSet.getString("id"));
}
}catch (Exception e){
e.printStackTrace();
}finally {
//释放资源,注意倒着释放
if(resultSet!=null){
try{
resultSet.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(preparedStatement!=null){
try{
preparedStatement.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(connection!=null){
try{
connection.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}
(1)数据库连接,使用时建立连接,不使用就释放,对数据连接释放频繁,造成数据库资源浪费,影响性能
解决办法:数据库连接池
(2)sql语句硬编码,不利于sql语句修改的维护, 设想:将sql语句配置到xml文件中,sql变化,不需要重新编译java代码
(3)设置参数硬编码,设想,将sql语句占位符和参数全部配置到xml中
(4)从resultSet中比那里结果集数据,存在硬编码 设想,将查询的结果集自动映射为java对象
(5)对程序员来讲,更加关心的是sql语句编写和参数设置这部分内容,连接的建立和释放并不需要每次都关心, 设想:程序员可以更多的关注sql语句编写和参数设置问题