创建连接池
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()); }}
转载于:https://www.cnblogs.com/1x-zfd50/p/6379388.html
相关资源:自己封装的jdbc工具类