あなたは、クエリオブジェクトツールにデータをカプセル化し、任意のテーブルを照会することができます

パッケージcom.briup.jdbctest。

インポートをjava.lang.reflect.Field;
インポートのjava.math.BigDecimal;
インポートのjava.sql.Connection;
インポートのjava.sql.DriverManager。
インポートのjava.sql.PreparedStatement;
インポートのjava.sql.ResultSet;
輸入java.sql.ResultSetMetaData。
輸入ます。java.sql.SQLException;
輸入はjava.util.ArrayList;
輸入はjava.util.List;

パブリッククラスJDBCUtils {
プライベート静的接続でCONN = NULL; //连接对象
プライベート静的な文字列ドライバ= "oracle.jdbc.driver.OracleDriverと"; //瓶包中的にOracleDriver中的类
プライベート静的文字列のURL = "はjdbc:オラクル:薄い:@ // 127.0.0.1:1521/orcl"。
プライベート静的な文字列のユーザー名=「スコット」。
プライベート静的文字列のパスワード=「虎」。
プライベート静的PreparedStatementのPS = NULL;
プライベート静的のResultSet rsを= NULL;

パブリック静的接続のgetConnection(){
{試す
にClass.forName(ドライバ)。
CONN =したDriverManager.getConnection(URL、ユーザ名、パスワード);

}キャッチ(例外e){
// TODO自動生成キャッチブロック
e.printStackTrace();
}
CONN返します。
}

//包装されるテーブル内のデータのすべてのオブジェクト
/ **
*
* @paramジェネリック<T>オブジェクトパッケージ
* @paramのclazz
* @paramのSQL文SQL
* @param argsをパラメータは、プリコンパイルされたステートメントに渡す
* @return
* /
パブリック静的<T>リスト<T> queryToObj(クラス<T> clazz、コネティカット接続、SQL文字列は、オブジェクト...引数を){
試みを{
//結果を取得する設定1.
PS = conn.prepareStatement(SQL);
について(INT 1 = I; I <= args.length; Iは++){
ps.setObject(I、引数[I - 1]);
}
RS = ps.executeQuery()。

そして、すべてのフィールドにクエリのフィールド名// 2. GETアクセスの結果
のResultSetMetaDataのmetaData = rs.getMetaData();

//保存するオブジェクト
のArrayListを<T> COLS =新しい新規のArrayList <>();
一方(rs.next()){
//オブジェクトの作成
T OBJ = clazz.newInstance();
。(INT I = 1; I <= metaData.getColumnCount(); I ++){
//によって反射対応するフィールド取得
提出フィールド、= clazz.getDeclaredField(metaData.getColumnLabel(I).toLowerCase());
filed.setAccessible(真の);
Object値= RS。 getObject(metaData.getColumnLabel(I));
// Oralce BigDecimalの数はでJavaある
IF(instanceofのBigDecimal値){
値=((BigDecimalの)値).intValue();
}
filed.set(OBJ、値) ;
}
cols.add(OBJ);
}
戻りCOLS;
}キャッチ(例外E){
e.printStackTrace();
} {最後に
閉じる(CONN、PS、RS);
}
はnullを返します。
}

//释放资源
プライベートの静的な無効閉じる(接続CONN、PreparedStatementのpsの、のResultSet RS){

もし(connの= nullを!){
{しようと
はconn.closeを();
}キャッチ(のSQLException E){
// TODO自動生成キャッチブロック
e.printStackTrace();
}
}
もし(!PS = NULL){
{試みる
)(ps.closeします。
}キャッチ(のSQLException E){
// TODO自動生成キャッチブロック
e.printStackTrace();
}
}
(!RS = NULL)であれば{
{試みる
)(rs.closeします。
}キャッチ(のSQLException E){
// TODO自動生成キャッチブロック
e.printStackTrace();
}
}
}

公共の静的な無効メイン(文字列[]引数)はSQLExceptionが{スロー

//接続の接続=のgetConnection();
接続の接続= JDBCUTil.getConnection()。
文字列のSQL = "?どこのid =またはID = STU SELECT * FROM";
リスト<ステュ>リスト= queryToObj(Stu.class、接続、SQL、1、2)。
用(ステュのSTU:リスト){
のSystem.out.println(STU)。
}

}
}

おすすめ

転載: www.cnblogs.com/codlover/p/11494000.html