現在の作業では、テキストファイルから大量のデータを直接データベースにインポートするだけで、洗練されたSQL操作は必要ありません.Jackcess APIを直接使用することを検討してください。
String csvFileSpec = "C:/Users/Gord/Desktop/BookData.csv";
String dbFileSpec = "C:/Users/Public/JackcessTest.accdb";
String tableName = "Book";
try (Database db = new DatabaseBuilder()
.setFile(new File(dbFileSpec))
.setAutoSync(false)
.open()) {
new ImportUtil.Builder(db, tableName)
.setDelimiter(",")
.setUseExistingTable(true)
.setHeader(false)
.importFile(new File(csvFileSpec));
// this is a try-with-resources block,
// so db.close() happens automatically
}
または、手動入力のそれぞれの行を解析する必要がある場合は、行を挿入し、新しい行のためのオートナンバー型の値を取得する:たとえば、あなたがこのような何かを行うことができ、CSVファイルをインポートします、その後、コードをよりこのようになる:
String dbFileSpec = "C:/Users/Public/JackcessTest.accdb";
String tableName = "Book";
try (Database db = new DatabaseBuilder()
.setFile(new File(dbFileSpec))
.setAutoSync(false)
.open()) {
// sample data (e.g., from parsing of an input line)
String title = "So, Anyway";
String author = "Cleese, John";
Table tbl = db.getTable(tableName);
Object[] rowData = tbl.addRow(Column.AUTO_NUMBER, title, author);
int newId = (int)rowData[0]; // retrieve generated AutoNumber
System.out.printf("row inserted with ID = %d%n", newId);
// this is a try-with-resources block,
// so db.close() happens automatically
}
は、その主キーに基づいて、既存の行を更新するには、コードは以下のようになり
Table tbl = db.getTable(tableName);
Row row = CursorBuilder.findRowByPrimaryKey(tbl, 3); // i.e., ID = 3
if (row != null) {
// Note: column names are case-sensitive
row.put("Title", "The New Title For This Book");
tbl.updateRow(row);
}
最大速度の場合は、データベースを開くときに.setAutoSync(false)
を使用しましたが、AutoSyncを無効にすると、アップデートの実行中にアプリケーションが異常終了した場合、Accessデータベースファイルが破損している可能性があります。
ありがとうございますが、ファイルを分割して、すべての行で部分文字列を使用して、SQLクエリーと文字列分割が必要です。 –
@Yassine - SQLを使用して(PreparedStatementなど)一度に1つの行を挿入する場合、JackcessとそのAddRowメソッドを使用して同じ結果を達成することもできます。そうすれば、UCanAccess/HSQLDBオーバーヘッドを回避できます。 –
はいPreparedStatementを使用して、各行を(最初の3文字に基づいて)subStringで分割し、変数に格納した後、JackcessとaddRowメソッドをどのように使用できますか? N.B:挿入後に使用するために、挿入された行の主キーを返すためにAUTO_GENERATED_KEYを使用しています。 addRowメソッドはこのオプションを持っていますか? –