JDBC的七个步骤
一、加载JDBC驱动;二、建立并获取数据库连接;三、创建JDBC Statements对象;四、设置SQL语句的传入参数;五、执行SQL语句并获得查询结果;六、对查询结果进行转换处理并将处理结果返回;七、释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);实例:public static List<Map<String,Object>>
一、加载JDBC驱动;
二、建立并获取数据库连接;
三、创建JDBC Statements对象;
四、设置SQL语句的传入参数;
五、执行SQL语句并获得查询结果;
六、对查询结果进行转换处理并将处理结果返回;
七、释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);
实例:
public static List<Map<String,Object>> queryForList(){
Connection connection=null;
ResultSet rs=null;
PerparedStatement 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="trainner";
//获取数据库连接
connection=DriverManager.getConnection(url,user,password);
String sql="select * from userinfo where user_id=?";
//创建Statement对象(每一个Statement为一次数据库执行请求)
stmt=connection.prepareStatement(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;
}
4、第一步优化:连接获取和释放##
4.1、问题描述:
数据库连接频繁的开启和关闭本身就造成了资源的浪费,影响系统的性能。
解决问题:
数据库连接的获取和关闭我们可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。
4.2、问题描述
但是现在连接池多种多样,可能存在变化,有可能采用DBCP的连接池,也有可能采用容器本身的JNDI数据库连接池。
解决问题:
我们可以通过DataSource进行隔离解耦,我们统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是有容器的JNDI实现都可以,所以我们将DataSource的具体实现通过让用户配置来应对变化。
``
5、第二步优化:SQL统一存取##
5.1、问题描述:
我们使用JDBC进行操作数据库时,SQL语句基本都散落在各个JAVA类中,这样有三个不足之处;
第一,可读性很差,不利于维护以及做性能调优。
第二,改动Java代码需要重新编译、打包部署。
第三,不利于取出SQL在数据库客户端执行(取出后还得删掉中间的Java代码,编写好的SQL语句后还得通过+号在Java进行拼凑)。
解决问题:
我们可以考虑不把SQL语句写到Java代码中,那么把SQL语句放到哪里呢?首先需要有一个 统一存放的地方,我们可以将这些SQL语句统一集中放到配置文件或者数据库里面(以key-value的格式存放)。然后通过SQL语句的key值去获取对应的SQL语句。
既然我们将SQL语句都统一放在配置文件或者数据库中,那么这里就涉及一个SQL语句的加载问题。
更多推荐
所有评论(0)