-1

アクセス mdb ファイルの Select * からテキスト ファイルを作成しようとしています。以下のコードを記述して同じものを実装しましたが、データを読み込もうとしているときに、「スレッド "main" java.sql.SQLException で例外が発生しました: [Microsoft][ODBC ドライバー マネージャー] 無効な記述子インデックス"

この方法が実際に機能するかどうかはわかりません。コードは次のとおりです。

//=============Extract contents in Access and save it as Text File Format==========================================
//String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test\\TestEJFolder\\BWC_Ejournal.mdb";
String connectionString ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\\test\\TestEJFolder\\BWC_Ejournal.mdb;";
DriverManager.getConnection(connectionString, "", "");
Connection conn = DriverManager.getConnection(connectionString, "", "");
String sql = "SELECT * FROM Events";
Statement cmd = conn.createStatement(); 
cmd.execute(sql);
ResultSet reader = cmd.executeQuery(sql);
//String path = "\\" + time_stmp + "_" + file_name;
File sw = new File(text_dir,file_name);
File ssw = new File(s_path);
sw.createNewFile();     
final String format = "{0,-22} {1,-4} {2,-4} {3,-4} {4,-20} {5,-22}";
BufferedWriter output = new BufferedWriter(new FileWriter(sw));
String line = null;
//reader.beforeFirst();
//boolean b = true;
int colCount = rs.getColumnCount();
while (reader.next())
{
    //Errors here while trying to read      
    line = String.format(format, String.format("{0:dd-MM-yyyy HH:mm:ss}", reader.getObject(5)).trim(), reader.getObject(0).toString().trim(), reader.getObject(1).toString().trim(), reader.getObject(2).toString().trim(), reader.getObject(3).toString().trim(), reader.getObject(4).toString().trim());
}
output.write(line);
output.close();
conn.close();
4

3 に答える 3

2

に問題がありString.formatます。文字列に関する Java チュートリアルをご覧ください。

フォーマット文字列の作成

printf()およびformat()メソッドを使用して、書式設定された数値で出力を印刷する方法を見てきました。このクラスには、オブジェクトではなくオブジェクトを返すString同等のクラス メソッドがあります。format()StringPrintStream

Stringの静的メソッドを使用format()すると、1 回限りの print ステートメントとは対照的に、再利用できるフォーマットされた文字列を作成できます。たとえば、代わりに

System.out.printf("The value of the float " +
                  "variable is %f, while " +
                  "the value of the " + 
                  "integer variable is %d, " +
                  "and the string is %s", 
                  floatVar, intVar, stringVar); 

あなたは書ける

String fs;
fs = String.format("The value of the float " +
                   "variable is %f, while " +
                   "the value of the " + 
                   "integer variable is %d, " +
                   " and the string is %s",
                   floatVar, intVar, stringVar);
System.out.println(fs);
于 2013-06-25T12:18:17.063 に答える
1

コードからの抜粋:

...reader.getObject(0).toString().trim()

AFAICT、1から始まる列インデックスをgetObjectメソッドに渡すことが期待されています。あなたがそこに行こうとしている理由がわかりません。

PS 次回は、コードの書式設定に注意し (空の行、コメント、不要なステートメントをすべて削除します)、スタック トレースを投稿し、例外をスローする行を明確に強調表示します。

于 2013-06-25T12:05:53.867 に答える
0

1.テストを機能の小さな単位に分離するようにしてください

1.1 DB からオブジェクトへの読み取り (時間がある場合は休止状態を使用してみてください) 1.2 オブジェクトの出力を試みます 1.3 ファイルへの書き込みを試みます

すべてのユニットを参照してください

私はいくつかの問題を見ます:1.日付は文字列ではなく日付オブジェクトでなければなりません2.複数の接続があります

于 2013-06-25T12:00:16.637 に答える