تنزيل حزمة التبعية: http://xiazai.VeVB.COm/201407/tools/java-db-dependency(VeVB.COm).rar
كود مصدر فئة اتصال قاعدة البيانات:
الحزمة com.itjh.javaUtil;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.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.dbcp.ConnectionFactory;import org.apache.commons.dbcp.DriverManagerConnectionFactory;import org.apache.commons.dbcp.PoolableConnectionFactory;import org.apache.commons.dbcp.PoolingDriver;import org.apache.commons.dbutils.DbUtils;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.MapListHandler;import org.apache. commons.pool.ObjectPool;import org.apache.commons.pool.impl.GenericObjectPool;/** * فئة شاملة للاتصال بقاعدة البيانات. </br> * يعتمد على حزم الجرة: commons.dbcp-1.4، commons.dbutils-1.3، commons.pool-1.5.4 package. * * @author Song Lijun* @date 3 يوليو 2014*/public class DBUtil {private String dri = null;private String url = null;اسم مستخدم السلسلة الخاصة = null;كلمة مرور السلسلة الخاصة = null;private StringpoolName = null /; / اسم تجمع الاتصال الخاص ObjectPool ConnectionPool = null; // تجمع الاتصال // فئة الاستعلام المجدولة المقابلة Private QueryThread queryThread = null /** * الوظيفة: المنشئ * * @author Song Lijun * @date 3 يوليو، 2014 * @param dri * اسم الفئة الكاملة للسائق، على سبيل المثال: com.mysql.jdbc.Driver. * @param url * اتصال عنوان url لقاعدة البيانات، على سبيل المثال: * "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" * @param userName * اسم مستخدم قاعدة البيانات، على سبيل المثال: root * @param كلمة المرور * كلمة مرور قاعدة البيانات، على سبيل المثال: abc * @param PoolName * اسم تجمع اتصال قاعدة البيانات الذي تم إنشاؤه، مثل mypool. لاحظ أنه لا يمكن تكرار هذا الاسم لحاوية الويب. */public DBUtil(String dri, String url, String userName, Stringpassword,String PoolName) {this.dri = dri;this.url = url;this.username = userName;this.password = كلمة المرور;this.poolName = PoolName ;}/** * تنفيذ SQL. * * @param conn * الاتصال * @param pstm * PreparationStatement * @return int الصف المتأثر المطابق لتنفيذ SQL. * @throws SQLException * @author Song Lijun* @date 3 يوليو 2014*/public int Execute(Connection conn, PreparationStatement pstm)throws SQLException {try {return pstm.executeUpdate();} أخيرًا {Close(conn);} } /** * الاستعلام SQL. * * @param conn * الاتصال * @param pstm * PreparationStatement *return List<Map<String,Object>> مجموعة نتائج الاستعلام *throws SQLException * @author Song Lijun * @date 3 يوليو 2014 */القائمة العامة <Map استعلام <String, Object>> (Connection conn,PreparedStatement pstm) يطرح SQLException {try {return resultSetToList(pstm.executeQuery());} أخيرًا {Close(conn);}}/** * الوظيفة: يتم تحويل ResultSet إلى List<Map<String,Object>> * * * @param rs * مجموعة البيانات الأصلية ResultSet * @ return List<Map<String,Object>> * @throws java.sql.SQLException * @author Song Lijun* @date 3 يوليو 2014*/قائمة خاصة<Map<String, Object>> resultSetToList(ResultSet rs)throws java.sql.SQLException {if (rs == null)return Collections.EMPTY_LIST;ResultSetMetaData md = rs.getMetaData() / / احصل على المعلومات الهيكلية لمجموعة النتائج (RS)، مثل عدد الحقول وأسماء الحقول وما إلى ذلك int columnCount = md.getColumnCount(); // إرجاع عدد الأعمدة في كائن ResultSet هذا List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> RowData = new HashMap<String, Object>();while (rs.next()) {rowData = new HashMap<String, Object>(columnCount);for (int i = 1; i <= columnCount; i++) {rowData.put(md.getColumnName(i), rs.getObject(i));}list.add(rowData);}return list;}/** * بيان SQL للاستعلام. * * @param sql * بيان SQL المنفذ * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date 3 يوليو 2014 */public List<Map<String, Object >> الاستعلام (سلسلة SQL) يلقي SQLException {List<Map<String, Object>> النتائج = null;Connection conn = null;try {conn = getConnection();QueryRunner qr = new QueryRunner();results = qr.query(conn, sql, new MapListHandler());} أخيرًا {Close(conn);} إرجاع النتائج;}/** * الاستعلام SQL بناءً على بيان المعلمات * * @param sql * بيان SQL * @param param * المعلمة * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date 3 يوليو 2014*/ public List<Map<String, Object>> query(String sql, Object param)throws SQLException {List < Map<String, Object>> results = null;Connection conn = null;try {conn = getConnection();QueryRunner qr = new QueryRunner();results = (List<Map<String, Object>>) qr.query(conn, sql, param,new MapListHandler());} Catch (SQLException e) {e.printStackTrace();} أخيرًا {Close (conn);}return results;}/** * تنفيذ عبارة SQL* * @param sql * عبارة SQL المنفذة* @return الصفوف المتأثرة* @throws Exception * @author Song Lijun* @date 3 يوليو 2014*/public int تنفيذ (String sql) throws Exception {Connection conn = getConnection();introws = 0;try {QueryRunner qr = new QueryRunner();rows = qr.update(conn, sql);} أخيرًا {Close(conn);}returnrows;}/** * تنفيذ عبارة SQL مع المعلمات* * @param sql * عبارة SQL المنفذة* @param params * المعلمات* @return إرجاع الصفوف المتأثرة* @throws Exception * @ المؤلف Song Lijun* @date 3 يوليو 2014*/public int تنفيذ (String sql, Object[] params) يطرح استثناء {Connection conn = getConnection();introws = 0;try {QueryRunner qr = new QueryRunner();rows = qr.update(conn, sql, params);} أخيرًا {Close(conn);}returnrows;}/ ** * أغلق الاتصال * * @param conn * @throws SQLException * @author Song Lijun * @date 3 يوليو، 2014*/public void Close(Connection conn) throws SQLException {if (conn != null) {conn.closure();}DbUtils. CloseQuietly(conn);}/** * بدء تجمع الاتصال* * @ المؤلف Song Lijun* @date 3 يوليو، 2014*/private void StartPool() {try {Class.forName(dri);} Catch (ClassNotFoundException e1) {e1.printStackTrace();}if (connectionPool != null) {ShutdownPool();} حاول {connectionPool = new GenericObjectPool(null);ConnectionFactory ConnectionFactory = new DriverManagerConnectionFactory(url, اسم المستخدم, كلمة المرور);PoolableConnectionFactory PoolableConnectionFactory = جديد PoolableConnectionFactory(connectionFactory, ConnectionPool, null, "SELECT 1", false,true);Class.forName("org.apache.commons.dbcp.PoolingDriver");PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:Apache: المشاعات:dbcp:");driver.registerPool(poolName, poolableConnectionFactory.getPool());} Catch (Exception e) {e.printStackTrace();}// افتح برنامج الاستعلام queryThread = new QueryThread(this);queryThread.start();}/** * أغلق تجمع الاتصال * * @author Song Lijun* @تاريخ 3 يوليو 2014*/private void ShutdownPool() {try {PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:Apache:commons:dbcp:");driver. ClosePool(poolName);// إغلاق الاستعلام المجدول queryThread.setStartQuery(false);} Catch (SQLException e) {e.printStackTrace() ;}}/** * احصل على اتصال* * @return * @author Song Lijun* @date 3 يوليو 2014*/الاتصال العام المتزامن getConnection() {Connection conn = null;try {if (connectionPool == null)StartPool();conn = DriverManager.getConnection("jdbc:Apache:commons:dbcp:"+poolName) ;} قبض (استثناء e) {e.printStackTrace();}return conn;}}/** * عند بدء تشغيل تجمع الاتصال، فإنه سيقوم تلقائيًا بالاستعلام عن قاعدة البيانات بشكل منتظم لمنع انتهاء مهلة اتصال قاعدة البيانات. * * @author Song Lijun* @date 3 يوليو 2014*/class QueryThread Extends Thread {private DBUtil dbUtil = null;// ما إذا كان سيتم تمكين الاستعلام public boolean startQuery = true;/** * الوظيفة: اتصال قاعدة البيانات المقابل. * * @author Song Lijun* @date 3 يوليو 2014* @param dbUtil * اتصال قاعدة البيانات*/public QueryThread(DBUtil dbUtil) {this.dbUtil = dbUtil;}public void run() {while (true) {try { if (startQuery) {this.dbUtil.query("select 1");}// System.out.println(startQuery+" 123");} Catch (Exception e) {e.printStackTrace();} أخيرًا {try {Thread.sleep(120000);} Catch (InterruptedException e) {e.printStackTrace(); }}}}setStartQuery باطلة عامة (boolean startQuery) {// System.out.println("startQuery اغلاق:"+startQuery);this.startQuery = startQuery;}}