2012-08-06 5 views
7

JDBC経由でMySQLにアクセスするクラスに対して 'クエリ'メソッドを作成する必要があります。JDBCを使用してオブジェクトの配列として行全体を取得する方法

メソッドへの入力パラメータは、完全なSQLコマンド(値を含む)です。したがって、フェッチする列の名前はわかりません。

列の一部が文字列であり、いくつかの他のもの等、整数で

方法は、各ハッシュマップは1行であり、ArrayListの結果のすべての行を含む型ArrayList<HashMap<String,Object>> の値を返す必要があります。

ResultSet.getMetaData().getColumnCount()を使用して列の数を取得し、現在の行から1つずつセルをフェッチすることを考えていますが、これが唯一の解決策ですか?もっと良いものは?

答えて

13

ここには、誰かが必要な場合のためのサンプルコードがあります。 (コード内の 'Con'は標準のJDBC接続です)。

//query a full sql command 
public static ArrayList<HashMap<String,Object>> 
rawQuery(String fullCommand) { 
    try { 

    //create statement 
    Statement stm = null; 
    stm = con.createStatement(); 

    //query 
    ResultSet result = null; 
    boolean returningRows = stm.execute(fullCommand); 
    if (returningRows) 
     result = stm.getResultSet(); 
    else 
     return new ArrayList<HashMap<String,Object>>(); 

    //get metadata 
    ResultSetMetaData meta = null; 
    meta = result.getMetaData(); 

    //get column names 
    int colCount = meta.getColumnCount(); 
    ArrayList<String> cols = new ArrayList<String>(); 
    for (int index=1; index<=Col_Count; index++) 
     cols.add(meta.getColumnName(index)); 

    //fetch out rows 
    ArrayList<HashMap<String,Object>> rows = 
    new ArrayList<HashMap<String,Object>>(); 

    while (result.next()) { 
     HashMap<String,Object> row = new HashMap<String,Object>(); 
     for (String colName:cols) { 
     Object val = Result.getObject(colName); 
     row.put(colName,val); 
     } 
     rows.add(row); 
    } 

    //close statement 
    stm.close(); 

    //pass back rows 
    return tows; 
    } 
    catch (Exception ex) { 
    System.out.print(ex.getMessage()); 
    return new ArrayList<HashMap<String,Object>>(); 
    } 
}//raw_query 
関連する問題