witam
Potrzebuje uruchomić prosty skrypt w javie który zapisuje csv do bazy mdb.
Znalazłem coś co mogło by mi się przydać
Kompiluje go przy pomocy :
javac -cp ./lib/jackcess-2.1.11.jar:./lib/commons-csv-1.5.jar Jackcess.java
jednak jak chce uruchomić z przygotowanym plikiem csv to dostaje błąd chyba biblioteki commons-csv.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/csv/CSVFormat
at Jackcess.main(Jackcess.java:58)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.csv.CSVFormat
at jdk.internal.loader.BuiltinClassLoader.loadClass(java.base@9-internal/BuiltinClassLoader.java:366)
at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.base@9-internal/ClassLoaders.java:184)
at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:419)
... 1 more
Będę wdzięczny za jakąkolwiek wskazówkę.
Próbowałem dać również uruchomic. podając classpath tj.
java -cp ./lib/commons-csv-1.5.jar:commons-lang-2.6.jar:jackcess-2.1.11.jar:commons-codec-1.11.jar:Jackcess.class Jackcess.main /home/bnawrocki/test.csv accdb
niestety otrzymuje komunikat
Error: Could not find or load main class Jackcess.main
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
//import com.healthmarketscience.jackcess.*;
import com.healthmarketscience.jackcess.ColumnBuilder;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.Database.FileFormat;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.DataType;
import com.healthmarketscience.jackcess.Table;
import com.healthmarketscience.jackcess.TableBuilder;
public class Jackcess {
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.out.println("Usage: Jackcess <input.csv> <accdb|mdb>");
System.exit(0);
}
String csvPath = args[0];
String dbFormat = args[1];
String filepath = csvPath.substring(0, csvPath.lastIndexOf("."));
String filename = filepath.substring(filepath.lastIndexOf("/") + 1, filepath.length());
String dbExt = "";
int line = 1;
boolean dbCreate = false;
switch (dbFormat) {
case "accdb":
dbExt = ".accdb";
dbFormat = "V2010";
break;
case "mdb":
dbExt = ".mdb";
dbFormat = "V2003";
break;
default:
System.out.println("Unrecognized database format.");
System.exit(0);
break;
}
BufferedReader csvData = new BufferedReader(new FileReader(csvPath));
String firstline = csvData.readLine();
String[] headers = {};
headers = firstline.split("\t");
Iterable<CSVRecord> records = CSVFormat.TDF.parse(csvData);
List<Object> values = new ArrayList<>();
// create first database >>
int dbVolume = 0;
File f = new File(filepath + '-' + dbVolume + dbExt);
DatabaseBuilder dbb = new DatabaseBuilder(f)
.setFileFormat(FileFormat.valueOf(dbFormat)).setAutoSync(false);
Database db = dbb.create();
TableBuilder bldr = new TableBuilder("export");
for(String header : headers) {
bldr.addColumn(
new ColumnBuilder(header, DataType.TEXT)
.setLengthInUnits(255)
.setCompressedUnicode(true)
);
}
Table tbl = bldr.toTable(db);
db.flush();
long prevFileSize = f.length();
long currFileSize = 0;
// << create first database
for (CSVRecord record : records) {
if(dbCreate == true) {
dbCreate = false;
db.close();
// create nth database >>
dbVolume++;
f = new File(filepath + '-' + dbVolume + dbExt);
dbb = new DatabaseBuilder(f)
.setFileFormat(FileFormat.valueOf(dbFormat)).setAutoSync(false);
db = dbb.create();
bldr = new TableBuilder("export");
for(String header : headers) {
bldr.addColumn(
new ColumnBuilder(header, DataType.TEXT)
.setLengthInUnits(255)
.setCompressedUnicode(true)
);
}
tbl = bldr.toTable(db);
db.flush();
prevFileSize = f.length();
currFileSize = 0;
// << create nth database
}
values.clear();
record.forEach(x -> values.add(x));
tbl.addRow(values.toArray());
if((line % 100000) == 0) {
db.flush();
currFileSize = f.length();
System.out.printf("%d (+%d)%n", currFileSize, currFileSize - prevFileSize);
prevFileSize = currFileSize;
if(currFileSize >= 2000000000) { //~93% of 2 GB (2147483648 B) considering the last write
dbCreate = true;
}
}
line++;
}
db.close();
}
}