package com.joe.utilities.common.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class MyConnection { private static final Log log = LogFactory.getLog(MyConnection.class); public static java.sql.Connection getConnection(String driverClassName,String DB_URL , String DB_USER, String DB_PASSWORD) { java.sql.Connection conn = null; try { Class.forName(driverClassName); try { DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver()); conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } return conn; } public static void closeResultSet(ResultSet rs) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void closeStatement(Statement st) { try { if (st != null) st.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void closeConnection(java.sql.Connection conn) { try { if (conn != null && !conn.isClosed() ) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void closePreparedStatement(java.sql.PreparedStatement pstmt) { try { if (pstmt != null ) { pstmt.close(); } } catch (SQLException e) { e.printStackTrace(); } } public String[] getDBbaseParam(){ String url = this.getClass().getResource("").getPath().replaceAll("%20", " "); String path = url.substring(0, url.indexOf("WEB-INF")) + "WEB-INF/jdbc.properties"; ConfigBundle configBundle = new ConfigBundle(path); String driverClassName = configBundle.getString("datasource.driverClassName"); String DB_URL = configBundle.getString("datasource.url"); String DB_USER = configBundle.getString("datasource.username"); String DB_PASSWORD = configBundle.getString("datasource.password"); return new String[]{driverClassName,DB_URL,DB_USER,DB_PASSWORD}; } //获取datasource public static com.mchange.v2.c3p0.ComboPooledDataSource getC3P0DS(HttpServletRequest request,String dataSourceName){ try { ServletContext sc = request.getSession().getServletContext(); WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(sc); com.mchange.v2.c3p0.ComboPooledDataSource ds=(com.mchange.v2.c3p0.ComboPooledDataSource)wac.getBean(dataSourceName); return ds; } catch (Exception e) { return null ; } } public static BasicDataSource getBasicDS(HttpServletRequest request,String dataSourceName){ try { ServletContext sc = request.getSession().getServletContext(); WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(sc); BasicDataSource ds=(BasicDataSource)wac.getBean(dataSourceName); return ds; } catch (Exception e) { return null ; } } public java.sql.Connection getMyCon(int type){ String url = this.getClass().getResource("").getPath().replaceAll("%20", " "); String path = url.substring(0, url.indexOf("WEB-INF")) + "WEB-INF/jdbc.properties"; ConfigBundle configBundle = new ConfigBundle(path); String driverClassName = configBundle.getString("datasource.driverClassName"); String DB_URL = configBundle.getString("datasource.url"); String DB_USER = configBundle.getString("datasource.username"); String DB_PASSWORD = configBundle.getString("datasource.password"); String driverClassName2 = configBundle.getString("datasource2.driverClassName"); String DB_URL2 = configBundle.getString("datasource2.url"); String DB_USER2 = configBundle.getString("datasource2.username"); String DB_PASSWORD2 = configBundle.getString("datasource2.password"); Connection conn = null ; try{ if(type==1){ //log.info("连接数据库:DB_URL: "+DB_URL+"DB_USER: "+DB_USER+"DB_PASSWORD:"+DB_PASSWORD); conn = MyConnection.getConnection(driverClassName, DB_URL, DB_USER,DB_PASSWORD); }else if (type==2){ //log.info("连接数据库:DB_URL: "+DB_URL2+"DB_USER: "+DB_USER+"DB_PASSWORD:"+DB_PASSWORD2); conn = MyConnection.getConnection(driverClassName2, DB_URL2, DB_USER2,DB_PASSWORD2); } }catch(Exception e){ e.printStackTrace(); } return conn; } public ResultSet getData(String sql,int startNo,int maxCount,Connection conn){ ResultSet rs = null ; try { // conn.prepareStatement(sql,游标类型,能否更新记录); // 游标类型: // ResultSet.TYPE_FORWORD_ONLY:只进游标 // ResultSet.TYPE_SCROLL_INSENSITIVE:可滚动。但是不受其他用户对数据库更改的影响。 // ResultSet.TYPE_SCROLL_SENSITIVE:可滚动。当其他用户更改数据库时这个记录也会改变。 // 能否更新记录: // ResultSet.CONCUR_READ_ONLY,只读 // ResultSet.CONCUR_UPDATABLE,可更新 PreparedStatement pstat = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); //最大查询到第几条记录 pstat.setMaxRows(startNo+maxCount-1); rs = pstat.executeQuery(); //将游标移动到第一条记录 rs.first(); // 游标移动到要输出的第一条记录 rs.relative(startNo-2); } catch (SQLException e) { e.printStackTrace(); } return rs ; } /** * 从数据库中查询所有记录,然后通过游标来获取所需maxCount条记录 * @param sql 传入的sql语句 * @param startNo 从哪一条记录开始 * @param maxCount 总共取多少条记录 */ public void getDataFromAll(String sql,int startNo,int maxCount,Connection conn){ try { PreparedStatement pstat = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = pstat.executeQuery(); rs.first(); rs.relative(startNo-1); int i = startNo-1; while(i < startNo + maxCount-1 && !rs.isAfterLast()){ System.out.println(rs.getInt(1)); i++; rs.next(); } } catch (SQLException e) { e.printStackTrace(); } } public List<Object[]> getListByResultSet(ResultSet rs){ ResultSetMetaData rsmd = null ; List<Object[]> list = new ArrayList<Object[]>(); try { rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); while (rs.next()) { Object objList[] = new Object[columnCount]; for (int i = 1; i <= columnCount; i++) { objList[i-1] = rs.getObject(i); } list.add(objList); } } catch (Exception e) { // TODO: handle exception } return list ; } public List getList(ResultSet rs,String[] columnArray){ List<String[]> exportList = new ArrayList<String[]> (); try { while (rs.next()) { String[] s = new String[columnArray.length]; for (int i = 0; i < columnArray.length; i++) { s[i] = rs.getObject(columnArray[i]).toString(); } exportList.add(s); } } catch (Exception e) { System.out.println("getList ERROR:" + e); }finally{ MyConnection.closeResultSet(rs); } return exportList ; } }