1. 程式人生 > 程式設計 >基於JDBC訪問MySql公共方法例項解析

基於JDBC訪問MySql公共方法例項解析

本來專案都是用到例如Hibernate這些工具的,可是因為現在專案要求現在又丫的回到基於JDK的解決方案了。

這個方法很簡單,但是對於資料的連線使用連線池,連線池也是直接初始化的。

package com;
import java.sql.*;
import java.util.*;
import org.apache.commons.dbcp.BasicDataSource;
/**
 * @說明 資料庫連線管理
 * @author cuisuqiang
 */
public class ConnectionManager {
	/**
	 * @說明 執行一條SQL
	 */
	@SuppressWarnings("unchecked")
	public static List<Object[]> excuteQuery(String sql) {
		Connection conn = null;
		PreparedStatement psta = null;
		ResultSet resultSet = null;
		List<Object[]> relist = new ArrayList<Object[]>(); // 總資料
		Object[] objects = null; // 每行資料
		try {
			conn = ConnectionManager.getConn(); // 得到連結
			if(null != conn){
				psta = conn.prepareStatement(sql);
				resultSet = psta.executeQuery(); // 執行查詢,返回結果接集合
				int count = resultSet.getMetaData().getColumnCount(); // 一共有多少列資料
				// 迴圈行
				while (resultSet.next()) {
					objects = new Object[count];
					// 資料集索引從 1 開始,而陣列存放時是從 0 開始
					for (int i = 1; i <= count; i++) {
						objects[i - 1] = resultSet.getObject(i);
					}
					relist.add(objects);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			relist = null;
		} finally {
			try {
				if(null != resultSet)
					resultSet.close();
				if(null != psta)
					psta.close();
				if(null != conn)
					conn.close();
			} catch (Exception e2) {
				
			}
		}
		return relist;
	}
	private static org.apache.commons.dbcp.BasicDataSource ds = null;
	static {
		ds = new BasicDataSource(); // 組建資料來源物件
		int initialSize = 1; // 連線池啟動時的初始值
		int maxActive = 10; // 連線池的最大值
		int maxIdle = 1;   // 最大空閒值
		int minIdle = 1;   // 最小空閒值
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://192.168.154.128:3306/t2?useUnicode=true&characterEncoding=gbk");
		ds.setUsername("root");
		ds.setPassword("123456");
		ds.setInitialSize(initialSize);
		ds.setMaxActive(maxActive);
		ds.setMaxIdle(maxIdle);
		ds.setMinIdle(minIdle);
	}
	/**
	 * 從資料來源中取得資料庫連線
	 */
	public static Connection getConn() {
		try {
			return ds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}

我使用的是BasicDataSource,你可能需要兩個Jar包,commons-pool.jar,commons-dbcp.jar,連線mysql的話需要mysql-connector-java-3.1.13-bin.jar。

寫一個mian方法直接測試:

package com; 
import java.util.List; 
public class T { 
  @SuppressWarnings("unchecked") 
  public static void main(String[] args) { 
    try { 
      List<Object[]> list = ConnectionManager.excuteQuery("select * from t"); 
      for (int i = 0; i < list.size(); i++) { 
        Object[] os = list.get(i); 
        for(Object o : os){ 
          if (o instanceof String) { 
            String s = (String) o; 
            String newStr = new String(s.getBytes("ISO-8859-1"),"GBK"); 
            System.out.print("字串:" + newStr + "\t\t"); 
          }else if(o instanceof Long){ 
            Long s = (Long) o; 
            System.out.print("浮點值:" + s + "\t\t"); 
          }else if(o instanceof Integer){ 
            Integer s = (Integer) o; 
            System.out.print("整形值:" + s + "\t\t"); 
          }else{ 
            System.out.print("未知型:" + o + "\t\t"); 
          } 
        } 
        System.out.println(); 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 
    }     
  } 
}

我返回的是一個List集合,裡面包含了一個Object陣列。呼叫者在收到這個返回集合後可以根據實際情況進行解析,公共方法只是執行SQL,然後得到資料連線進行資料訪問。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。