DBHelper
パッケージcom.nll.dao;
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.HashMap;
import java.util.List;
import java.util.Map;
public class DBHelper {
//ロードドライバーは、通常、一度
静的にのみロードします{
try {
//最初のステップドライバー
//mysql5.0+バージョン( "com.mysql.cj.jdbc.Driver")バージョン8.0+( "com.mysql.cj.jdbc.Driver")
Class.forName( "oracle.jdbc.OracleDriver")をロードします;
} catch(ClassNotFoundException e){
// TODO自動生成されたcatchブロック
e.printStackTrace();
}
}
public static Connection getConnection(){
// 2番目のステップは接続を確立することです。これもカプセル化します。主にトラブルが発生するのに長すぎるのはなぜですか
conn = null;
try {
// mysqlは "jdbc:mysql:// localhost:3306 / [データベース名]?に変更できますか?allowPublicKeyRetrieval = true&serverTimezone = UTC&useSSL = false&characterEncoding = UTF-8"
conn = DriverManager.getConnection( "jdbc:oracle:thin:@ 127.0 .0.1:1521:orcl "、" scott "、" scott ");
} catch(SQLException e){
// TODO自動生成されたcatchブロック
e.printStackTrace();
}
return conn;
}
私たちは、同じ機能のSQLステートメントは同じではありませんだけで準備されたステートメントのパラメータは内部のそれのではなくオブジェクトのSQL文SQL文を記述する//第3のステップはある
我々がパラメータとしてSQL文に終わるので//
// CRUDどちらも同じメソッドexecuteUpdateであり、戻り値は同じです
//
public int doUpdate(String sql、Object ... params)をカプセル化するときに一緒に追加、削除、変更します{
//最初に接続を取得します
Connection conn = getConnection();
//戻り値を決定する
int result = -1;
try {
//
PreparedStatement オブジェクトPreparedStatement pstmt = conn.prepareStatement(sql);
//パラメータについては、プレースホルダはありますか?
//メンバーパラメータの追加、削除、
変更だけでなく、クエリのパラメータもあるので、doParams(pstmt、params);をカプセル化します
// SQLステートメントを実行します
result = pstmt.executeUpdate();
closeAll(null、conn、pstmt);
} catch(SQLException e){
// TODO自動生成されたcatchブロック
e.printStackTrace();
}
return result;
}
public List <Map <String、String >> findAll(String sql、Object ... params){
List < Map <String、String >> list = new ArrayList <Map <String、String >>();
try {
//最初に接続を取得する
Connection conn = getConnection();
ResultSet resultset = null;
//
PreparedStatement オブジェクトPreparedStatement pstmt = conn.prepareStatement(sql);
//パラメータについてはどうですか、プレースホルダはありますか?
//メンバーパラメータの追加、削除、
変更だけでなく、クエリのパラメータもあるので、doParams(pstmt、params); もカプセル化します。
resultset = pstmt.executeQuery();
// Map のキーを取得する方法-"このsqlステートメントのフィールド
//最初に、結果セットを通じてメタデータを取得する必要があります
ResultSetMetaData rsmd = resultset.getMetaData();
String [] columnNames = new String [rsmd .getColumnCount()];
for(int i = 0; i <columnNames.length; i ++){
//ここで取得するキーはすべて大文字なので、小文字の
columnNames [i] = rsmd.getColumnName( i + 1).toLowerCase();
}
while(resultset.next()){
Map <String、String> map = new HashMap <String、String>();
//列名に従って
、(String cn: columnNames){
文字列値= resultset.getString(cn);
map.put(cn、value);
}
//当一条取完放到list里面去
list.add(map);
}
closeAll(resultset、conn、pstmt);
} catch(SQLException e){
// TODO自動生成されたcatchブロック
e.printStackTrace();
}
リストを返します。
}
private void closeAll(ResultSet rs、Connection conn、PreparedStatement pstmt){
// TODO自動生成されたメソッドスタブ
try {
if(rs!= null){
rs.close();
}
if(conn!= null){
conn.close();
}
if(pstmt!= null){
pstmt.close();
}
} catch(SQLException e){
// TODO自動生成されたcatchブロック
e.printStackTrace();
}
}
private void doParams(PreparedStatement pstmt、Object ... params){
//最初にユーザーがパラメーターを渡していないかどうかを確認し、次にパラメーターを挿入する必要はありません
if(params!= null && params.length> 0){
//私たちはパラメーターObject ...量指定子パラメーターのみを注入します、本質的には
(int i = 0; i <params.length; i ++)の配列{
//すべてがオブジェクトです
try {
pstmt.setObject(i + 1、params [i]);
} catch(SQLException e){
// TODO自動生成されたcatchブロック
e.printStackTrace();
}
}
}
}
}
Test.java
パッケージcom.nll.dao; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Map; パブリック クラスTest1 { public static void main(String [] args){ // TODO自動生成されたメソッドスタブ // jdbcのカプセル化をテスト // 静的メソッドではないため、最初に インスタンス化DBHelper db = new DBHelper(); // // sqlを書き込みパラメータのないステートメント // 文字列sql1 = "update autoincre_demo set id = id + 1"; // int result1 = db.doUpdate(sql1); // if(result1> 0){ // System.out.println( "正常に変更されました "); // } else { // System.out.println(" Modified failed "); // } // //sqlステートメントを書き込む(パラメーター付き) // String sql = "update autoincre_demo set NAME =?"; // // 実行 // int result = db.doUpdate(sql、 "Haikou"); // if(result> 0 ){ // System.out.println( "Modified successful"); // } else { // System.out.println( "Modified failed"); // } // クエリ操作 文字列sql2 = "select * from autoincre_demo " ; リスト <Map <String、String >> list = db.findAll(sql2); for(int i = 0; i <list.size(); i ++ ){ System.out.println(list.get(i).get( "name" )); } } }