4

すべての行を含むデータ ファイルの値を使用してテーブルを更新する必要があります。現在、JDBC バッチを使用しています。データ ファイルには、数百の列と数百万の行が含まれています。

たとえば、データファイルには、単純にするために3列2行が含まれています

1,ABC,DEF
2.GHI,JKL

PreparedStatement pstmt = connection.prepareStatement(insert);
                //how to find type
                pstmt.setInt(1, 2);
                pstmt.setString(2, "GHI");
                pstmt.setString(3, "JKL");
                pstmt.addBatch();
                pstmt.executeBatch();

今私の質問は、データファイルからのデータに基づいて、実行時に呼び出す必要があるsetIntsetString、さらに重要なことに、それを呼び出す必要がある回数をどのように見つけるかsetXXXですaddBatch()。これは、テーブルごとに専用の準備済みステートメントが必要なようです。さらに重要なことに、データファイルにある列の数に基づいて、実行時に setObject を呼び出す必要がある回数を見つける必要がありますか? とにかくこれをジェネリックにすることはできますか?

私はJDBCが初めてなので、ガイドしてください。前もって感謝します。

4

3 に答える 3

8

setObject(int index, Object obj) を使用できます。次に、JDBC が正しいタイプを判別します。

于 2013-07-05T08:45:09.890 に答える
-1

以下のスニペットのように使用できます。詳細については、statement.setObject のドキュメントを確認してください。以下のスニペットの「rs」は、1 つのテーブルから何らかのクエリを実行して取得した結果セットです。以下のスニペットの「クエリ」は、別のテーブルへの挿入または更新クエリです。以下の例では、列の型を動的に識別しながら、あるテーブルからの選択と他のテーブルへの挿入を示しています。注: テーブルの列の型は一致している必要があります。そうでない場合、例外がスローされます。

PreparedStatement statement = connection.prepateStatement( query );
ResultSetMetaData rsmd = rs.getMetaData();
while( rs.next() )
{    
    for( int i = 1 ; i <= rsmd.getColumnCount() ; i++ )
    {
        statement.setObject( i, rs.getObject(i), rsmd.getColumnType(i) );
    }
}
于 2016-08-18T10:06:08.453 に答える