SqlHelper操作データベースツールクラス


SqlHelper操作データベースツールクラス
    このツールクラスはSqlHelperのベースバージョンであり、クラス全体を静的クラスにすることで、高同時データベース操作に対応するのは難しいかもしれませんが、この問題は解決できます.SqlHelperオブジェクトを作成することで、メンバー変数、メンバーメソッドのstaticを削除し、取得接続という操作を分離してクラスを作成し、接続を取得するたびに、そのクラスのオブジェクトを取得します.これにより,同時の問題をある程度解決することができる.
プロパティファイルdbInfo.properties、Javaプロジェクトルートディレクトリの下に置く、srcディレクトリの下に置くにはクラスローダを使う
#oracle   
url=jdbc:oracle:thin:@127.0.0.1:1521:SWITCH
user=scott
password=123456
driver=oracle.jdbc.driver.OracleDriver

バージョン1.0 SqlHelper.java
次の機能があります.
callPro1(String sql, String[] parameters) 戻り値なしでストアド・プロシージャを呼び出す
callPro2(String sql, String[] inParameters,Integer[] outParameters) 戻り値のあるストアド・プロシージャの呼び出し
ResultSet executeQuery(String sql, String[] parameters) 簡単なSelect操作
ArrayList executeQuery2(String sql, String[] parameters) 二次パッケージのSelect操作、やや複雑
executeUpdate(String[] sql, String[][] parameters) トランザクションを考慮したupdate/delete/insert(DML)メソッド
executeUpdate(String sql, String[] parameters) 単一update/delete/insert(DML)メソッド
package com.jdbc;
import java.sql.Statement;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.CallableStatement;
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.Properties;

/**
 * 
 * @author Switch
 * @function          
 * 
 */
public class SqlHelper {
	//        
	private static Connection ct = null;
	private static PreparedStatement ps = null;
	private static ResultSet rs = null;
	private static CallableStatement cs = null;

	//        
	private static String url = "";
	private static String user = "";
	private static String password = "";
	private static String driver = "";

	private static Properties pp = null;
	private static FileInputStream fis = null;

	//          
	static {
		try {
			//  dbInfo.properties         
			pp = new Properties();
			try {
				fis = new FileInputStream("dbInfo.properties");
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				pp.load(fis);
				url = pp.getProperty("url");
				user = pp.getProperty("user");
				password = pp.getProperty("password");
				driver = pp.getProperty("driver");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//     
			try {
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			fis = null;
		}
	}

	//     
	public static Connection getConnection() {
		try {
			ct = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ct;
	}

	//   PreparedStatement
	public static PreparedStatement getPreparedStatement() {
		return ps;
	}

	//   Connection
	public static Connection getCt() {
		return ct;
	}

	//   PreparedStatement
	public static PreparedStatement getPs() {
		return ps;
	}

	//   CallableStatement
	public static CallableStatement getCs() {
		return cs;
	}

	//   ResultSet
	public static ResultSet getRs() {
		return rs;
	}

	//       ,    
	// sql {call    (?,?,?)}
	public static void callPro1(String sql, String[] parameters) {
		try {
			ct = getConnection();
			cs = ct.prepareCall(sql);
			// ?  
			if (parameters != null && !parameters.equals("")) {
				for (int i = 0; i < parameters.length; i++) {
					cs.setObject(i + 1, parameters[i]);
				}
			}
			cs.execute();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
			close(rs, cs, ct);
		}
	}

	//       ,    
	public static CallableStatement callPro2(String sql, String[] inParameters,
			Integer[] outParameters) {

		try {
			ct = getConnection();
			cs = ct.prepareCall(sql);
			//     
			if (inParameters != null && !inParameters.equals("")) {
				for (int i = 0; i < inParameters.length; i++) {
					cs.setObject(i + 1, inParameters[i]);
				}
			}
			//     
			if (outParameters != null) {
				for (int i = 0; i < outParameters.length; i++) {
					cs.registerOutParameter(inParameters.length + i + 1,
							outParameters[i]);
				}
			}
			cs.execute();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {

		}
		return cs;
	}

	// select  
	public static ResultSet executeQuery(String sql, String[] parameters) {
		try {
			ct = getConnection();
			ps = ct.prepareStatement(sql);
			if (parameters != null && !parameters.equals("")) {
				for (int i = 0; i < parameters.length; i++) {
					ps.setString(i + 1, parameters[i]);
				}
			}
			rs = ps.executeQuery();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		}
		return rs;
	}

	// select  2(   )----  :      ,      
	public static ArrayList executeQuery2(String sql, String[] parameters) {
		ArrayList result = null;
		try {
			ct = getConnection();
			ps = ct.prepareStatement(sql);
			if (parameters != null && !parameters.equals("")) {
				for (int i = 0; i < parameters.length; i++) {
					ps.setString(i + 1, parameters[i]);
				}
			}
			rs = ps.executeQuery();
			//         
			ResultSetMetaData resultSetMetaData = rs.getMetaData();
			int column = resultSetMetaData.getColumnCount();

			result = new ArrayList();
			//     
			while (rs.next()) {
				//     ,      
				Object[] ob = new Object[column];
				for (int i = 1; i <= column; i++) {
					//     
					ob[i - 1] = rs.getObject(i);
				}
				result.add(ob);
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
			SqlHelper.close(rs, ps, ct);
		}
		return result;
	}

	//      update/delete/insert(DML)  
	public static void executeUpdate(String[] sql, String[][] parameters) {
		try {
			//     
			ct = getConnection();
			//         false
			ct.setAutoCommit(false);
			//        Serializable
			ct.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

			//           SQL  
			for (int i = 0; i < sql.length; i++) {
				if (parameters[i] != null && !parameters[i].equals("")) {
					ps = ct.prepareStatement(sql[i]);
					for (int j = 0; j < parameters[i].length; j++) {
						//  ?  
						ps.setString(j + 1, parameters[i][j]);
					}
				}
				//     
				ps.executeUpdate();
			}

			//   
			ct.commit();
		} catch (Exception e) {
			// TODO: handle exception
			//   
			try {
				ct.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
			close(rs, ps, ct);
		}
	}

	//       update/delete/insert(DML)  
	public static void executeUpdate(String sql, String[] parameters) {
		//   ps
		try {
			ct = getConnection();
			ps = ct.prepareStatement(sql);
			if (parameters != null && !parameters.equals("")) {
				//  ?  
				for (int i = 0; i < parameters.length; i++) {
					ps.setString(i + 1, parameters[i]);
				}
			}
			//     
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			//       
			e.printStackTrace();

			//       ,               
			//            
			throw new RuntimeException(e.getMessage());
		} finally {
			close(rs, ps, ct);
		}
	}

	//        
	public static void close(ResultSet rs, Statement ps, Connection ct) {
		//     
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//           
			rs = null;
		}
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//           
			ps = null;
		}
		if (ct != null) {
			try {
				ct.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//           
			ct = null;
		}
	}
}