Wenn Ihre aktuelle Aufgabe einfach darin besteht, große Datenmengen aus Textdateien direkt in die Datenbank zu importieren, und keine anspruchsvollen SQL-Manipulationen erforderlich sind, können Sie die Jackcess-API direkt verwenden. Um zum Beispiel eine CSV-Datei importieren Sie so etwas tun könnte:
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
}
Oder, wenn Sie brauchen, um manuell jede Eingabezeile zu analysieren, eine Zeile einzufügen, und rufen Sie den Autowert für die neue Zeile , dann würde der Code aussehen:
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
}
eine bestehende Reihe auf ihren Primärschlüssel basiert zu aktualisieren, würde der Code
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);
}
sein Beachten Sie, dass ich für die maximale Geschwindigkeit beim Öffnen der Datenbank .setAutoSync(false)
verwendet habe. Beachten Sie jedoch, dass die Deaktivierung von AutoSync die Wahrscheinlichkeit erhöht, dass die Access-Datenbank in einem beschädigten (und möglicherweise unbrauchbaren) Zustand verbleibt, wenn die Anwendung während der Ausführung der Updates abnormal beendet wird.
danke, aber ich muss die Datei teilen und Teilstring in jeder Zeile verwenden, so dass SQL-Abfragen und String-Splitting erfordern. –
@Yassine - Wenn Sie SQL (z. B. über PreparedStatement) verwenden, um jeweils eine Zeile einzufügen, können Sie dasselbe Ergebnis auch mit Jackcess und seiner AddRow-Methode erzielen. Auf diese Weise können Sie den UCanAccess-/HSQLDB-Overhead vermeiden. –
Ja, ich verwende PreparedStatement, um jede Zeile (basierend auf ihren ersten 3 Zeichen) einzufügen, nachdem sie mit SubString geteilt und in Variablen gespeichert wurde. Wie kann ich die Methode Jackcess und addRow verwenden? N.B: Ich verwende AUTO_GENERATED_KEY, um den Primärschlüssel der eingefügten Zeile zurückzugeben, um es nach dem Einfügen zu verwenden. hat die addRow-Methode diese Option? –