所以我有一个程序选择一个DB并将其导出为csv。当我导出数据库时,选项卡定界不会保留任何数据类型。理想情况下,csv应将文本字段保留为" ####"," ##" 而不只是####,##。 虽然字段是"数字"他们没有必要被视为数字。这种格式化的缺乏会导致排序的小问题,我可以看到jackcess支持数据类型,但是我需要使用游标来保存这些数据类型,还是仍然可以使用exportFile()函数?
public DBTool() {
JOptionPane.showMessageDialog(null, "Select an access database file to be converted to .csv");
String userhome = System.getProperty("user.home");
JFileChooser chooser = new JFileChooser(userhome);
//chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle("Choose Database to Convert");
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
System.out.println("getCurrentDirectory(): " + chooser.getCurrentDirectory());
System.out.println("getSelectedFile() : " + chooser.getSelectedFile());
source = chooser.getSelectedFile().toString();
destination = chooser.getCurrentDirectory() + "\\output.csv";
System.out.println("Source: " + source);
System.out.println("Destination: " + destination);
} else {
System.out.println("No Selection ");
}
}
public void openEDB(){
sourceF = new File(source);
long length = sourceF.length();
System.out.println(length);
try {
try {
db = new DatabaseBuilder(sourceF)
.setCodecProvider(new CryptCodecProvider("password"))
.open();
} catch (IOException ex) {
Logger.getLogger(DBTool.class.getName()).log(Level.SEVERE, null, ex);
}
db = DatabaseBuilder.open(sourceF);
} catch (IOException ex) {
Logger.getLogger(DBTool.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void exportDB(){
destinationF = new File(destination);
try {
ExportUtil.exportFile(db, "TableName", destinationF);
JOptionPane.showMessageDialog(null, "Success, .csv created: " + this.destination);
} catch (IOException ex) {
Logger.getLogger(DBTool.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
答案 0 :(得分:1)
我不知道在导出时强制Jackcess将所有文本字段括在双引号中的方法。但是,这不会影响Jackcess导出行的顺序。
使用exportFile()时,Jackcess将以自然顺序导出行,这是行在表格中实际存在的顺序(通常但不总是,顺序为哪些行插入表中。)
使用exportWriter() with a Cursor时,Jackcess将按Cursor定义的顺序导出行。因此,如果要对输出进行排序的字段上有索引,则可以创建IndexCursor并使用exportWriter()和该Cursor将行转储为CSV。
如果要对输出进行排序的字段没有索引,并且您无法(或不愿意)在Access数据库中创建此类索引,则另一种方法是使用{{3} JDBC驱动程序基于具有ORDER BY子句的SQL语句创建ResultSet,然后使用UCanAccess之类的东西将ResultSet转储为CSV。