-1

我正在尝试从访问 mdb 文件的 Select * 创建文本文件,我编写了下面的代码来实现相同的功能,但是当我尝试读取数据时,我收到此错误“线程“主”java.sql.SQLException 中的异常: [Microsoft][ODBC Driver Manager] 无效的描述符索引”

不确定这种方法是否真的有效,代码如下:

//=============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();
4

3 回答 3

2

有问题String.format。查看关于字符串的 Java 教程

创建格式字符串

您已经看到了使用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);
于 2013-06-25T12:18:17.063 回答
1

摘自您的代码:

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

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

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

于 2013-06-25T12:05:53.867 回答
0

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

1.1 从数据库读取到对象(如果你有时间尝试使用休眠) 1.2 尝试打印对象 1.3 尝试写入文件

看到每个单元

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

于 2013-06-25T12:00:16.637 回答