我从数据库中获取一行信息放入ResultSet(RS),并不清楚每一列的数据类型(有String,有Int,有Date),然后将其放入到JTable中,纵向展示(第一列放RS的列名称,第二列放列的数据),代码如下:public void initInfo(String id) {
MyCon mycon = null;
Statement stmt = null;
ResultSet rs = null;
try {
mycon = new MyCon();//此处自己写的打开数据库程序,运行OK
stmt = mycon.con.createStatement();
String querycommand = "SELECT * FROM Table WHERE ID='" + id + "'";
rs = stmt.executeQuery(querycommand);
ResultSetMetaData rsmd = rs.getMetaData(); DefaultTableModel dataModel = new DefaultTableModel();
Object[][] values = new Object[0][0];
values = new Object[rsmd.getColumnCount()][2]; for (int i = 1; i <= rsmd.getColumnCount(); i++) {
//values[i] = new Object[2];
values[i][0] = rsmd.getColumnName(i);
System.out.println(rsmd.getColumnName(i));//此处OK
values[i][1] = rs.getObject(rsmd.getColumnName(i));//运行到此处报错,错误代码如下
}
String header[] = {"基本信息", "内容"};
dataModel.setDataVector(values, header);
JTable table = new JTable(dataModel);
JScrollPane pane = new JScrollPane(table);
this.add(pane, BorderLayout.CENTER); } catch (Exception ex) {
ex.printStackTrace();
} finally {
mycon.MyClose(mycon.con, stmt, rs);//自己写的一个关闭数据库程序,运行OK
}
}Mycon代码如下public MyCon() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (java.lang.ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
try {
con = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=" + System.getProperty("user.dir") + "\\data\\data.mdb", "", null);
} catch (SQLException sqle) {
JOptionPane.showMessageDialog(null, sqle.getMessage(), " 异常", JOptionPane.ERROR_MESSAGE);
}
}
错误如下:
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3811)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(JdbcOdbcResultSet.java:5638)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:583)
at sun.jdbc.odbc.JdbcOdbcResultSet.getObject(JdbcOdbcResultSet.java:1693)
有哪位能帮我调试一下,赶紧不尽
MyCon mycon = null;
Statement stmt = null;
ResultSet rs = null;
try {
mycon = new MyCon();//此处自己写的打开数据库程序,运行OK
stmt = mycon.con.createStatement();
String querycommand = "SELECT * FROM Table WHERE ID='" + id + "'";
rs = stmt.executeQuery(querycommand);
ResultSetMetaData rsmd = rs.getMetaData(); DefaultTableModel dataModel = new DefaultTableModel();
Object[][] values = new Object[0][0];
values = new Object[rsmd.getColumnCount()][2]; for (int i = 1; i <= rsmd.getColumnCount(); i++) {
//values[i] = new Object[2];
values[i][0] = rsmd.getColumnName(i);
System.out.println(rsmd.getColumnName(i));//此处OK
values[i][1] = rs.getObject(rsmd.getColumnName(i));//运行到此处报错,错误代码如下
}
String header[] = {"基本信息", "内容"};
dataModel.setDataVector(values, header);
JTable table = new JTable(dataModel);
JScrollPane pane = new JScrollPane(table);
this.add(pane, BorderLayout.CENTER); } catch (Exception ex) {
ex.printStackTrace();
} finally {
mycon.MyClose(mycon.con, stmt, rs);//自己写的一个关闭数据库程序,运行OK
}
}Mycon代码如下public MyCon() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (java.lang.ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
try {
con = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=" + System.getProperty("user.dir") + "\\data\\data.mdb", "", null);
} catch (SQLException sqle) {
JOptionPane.showMessageDialog(null, sqle.getMessage(), " 异常", JOptionPane.ERROR_MESSAGE);
}
}
错误如下:
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3811)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(JdbcOdbcResultSet.java:5638)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:583)
at sun.jdbc.odbc.JdbcOdbcResultSet.getObject(JdbcOdbcResultSet.java:1693)
有哪位能帮我调试一下,赶紧不尽
你现在的游标还是指向的第一个元素之前吧