jdbc的封装

创建连接池

package com.oraec.jdbcutil;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
*链接池
*/
public class JDBCUtil {
// 驱动
private final static String DRIVER_CLASS = "oracle.jdbc.OracleDriver";
// URL
private final static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
// 用户名
private final static String USER = "scott";
// 密码
private final static String PASSWORD = "oraec";
private static ComboPooledDataSource datasouce;
static {
try {
// 创建类连接池
datasouce = new ComboPooledDataSource();
// 设置加载驱动
datasouce.setDriverClass(DRIVER_CLASS);
// 设置URL
datasouce.setJdbcUrl(URL);
// 设置用户名
datasouce.setUser(USER);
// 设置密码
datasouce.setPassword(PASSWORD);
// 设置初始化连接数量
datasouce.setInitialPoolSize(5);
// 设置连接池每次增加连接的数量
datasouce.setAcquireIncrement(3);
// 设置连接池最大连接数量
datasouce.setMaxPoolSize(50);
// 设置连接池最小连接数量
datasouce.setMinPoolSize(3);
// 设置闲置连接最大存活时间 gc
datasouce.setMaxIdleTime(200);

} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*得到链接
*@return
*/
public static Connection getConnection(){
try {
return datasouce.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException();
}
}

public static void main(String[] args) {
System.out.println(getConnection());
}
/**
*关闭资源
*
*@param rs
*@param st
*@param conn
*/
public static void isClose(ResultSet rs,Statement st,Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

 

 

 

 

 

package com.oraec.jdbcutil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;

public class JDBCTemplate {
//泛型 方法泛型
/**
* 针对同一张表的 不同条件的查询方法 users
* Object... 作为形参 代表任意个数的任意类型参数
*/
public List<Map<String,Object>> queryForList(String sql,Object...obj){
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
Connection conn=JDBCUtil.getConnection();
PreparedStatement ps=null;
ResultSet rs=null;
try {
ps = conn.prepareStatement(sql);
//拼接参数
setParameters(ps, obj);
//执行
rs=ps.executeQuery();
//通过结果集得到元数据 相当于得到了数据库中一个表结构
ResultSetMetaData rsm=rs.getMetaData();
//得到一条数据 一共有多少列
int num=rsm.getColumnCount();
while(rs.next()){
// System.out.println(rs.getInt(1));
// System.out.println(rs.getString(2));
// System.out.println(rs.getString(3));
// System.out.println(rs.getString(4));
// System.out.println(rs.getString(5));
// System.out.println(rs.getString(6));
Map<String, Object> map=new HashMap<String, Object>();
for (int i = 1; i <=num; i++) {
System.out.println(rsm.getColumnLabel(i));
//得到列名作为map的键,再通过列名获取rs结果集中的对应数据作为map的值
map.put(rsm.getColumnLabel(i),rs.getObject(rsm.getColumnLabel(i)));
list.add(map);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 设置预处理参数的方法
* @param ps
* @param obj
*/

public void setParameters(PreparedStatement ps,Object...obj){
if(obj!=null){
for (int i = 0; i < obj.length; i++) {
try {
ps.setObject(i+1,obj[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

 

实列运用

package com.oraec.jdbctest;

import java.util.List;
import java.util.Map;

import com.oraec.jdbcutil.JDBCTemplate;

public class Test {
public static void main(String[] args) {
String sql = "select * from past where name=?";
JDBCTemplate jt = new JDBCTemplate();
List<Map<String, Object>> list = jt.queryForList(sql, new Object[]{"asd"});
System.out.println(list.size());
}
}

 

posted @ 2017-02-08 18:06  我是小小竹  阅读(872)  评论(0编辑  收藏  举报