我正在尝试从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();
答案 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.你有一个以上的连接