将Access数据库导出到文本File Java

时间:2013-06-25 11:46:31

标签: java ms-access text

我正在尝试从Access *访问mdb文件创建文本文件,我写下面的代码实现相同,但是当我尝试读取数据时,我收到此错误“线程中的异常”主“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();

3 个答案:

答案 0 :(得分:2)

String.format出现问题。查看Java Tutorial on Strings

  

创建格式字符串

     

您已经看到使用printf()format()方法打印带格式化数字的输出。 String类具有等效的类方法format(),它返回String个对象而不是PrintStream个对象。

     

使用String的静态format()方法可以创建一个可以重复使用的格式化字符串,而不是一次性打印语句。例如,而不是

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);

答案 1 :(得分:1)

摘自您的代码:

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

AFAICT,您应该将列索引从1开始传递到getObject方法。我不确定你想要到那里去。

P.S。下次注意代码格式化(删除所有空行,注释,不必要的语句),发布堆栈跟踪并突出显示抛出异常的行。

答案 2 :(得分:0)

1.尝试将测试分成一个小的功能单元

1.1从DB读入对象(如果你有时间尝试使用hibernate) 1.2尝试打印对象 1.3尝试写入文件

看到每个单位

我看到一些问题: 1. Date应该是Date对象而不是String 2.你有一个以上的连接