-1

我正在开发一个连接到任何给定 MSSQL 数据库的 android 应用程序。为了使其正常工作,我必须读取数据库元数据以获取其中的表名。我在开发开始时对其进行了测试,它运行良好。这是有效的代码:

Class.forName("net.sourceforge.jtds.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
DatabaseMetaData dbmd = conn.getMetaData();
String[] tables = {"TABLE"};
ResultSet rs = dbmd.getTables(null, null, "%", tables);
while (rs.next()) {
     String tableName = rs.getString(3);
     t.setText(t.getText()+" "+tableName+";");
}
conn.close();

正如我所说,它工作得很好,如果我取消注释它仍然可以在那个地方工作。后来,我在我的 Connection 课上做了类似的事情:

public ArrayList<String> getTableNames() throws SQLException {
ArrayList<String> namelist = new ArrayList<String>();
DatabaseMetaData dbmd = conn.getMetaData();
String[] tables = {"TABLES"};
ResultSet rs = dbmd.getTables(null, null, "%", tables);
while (rs.next()) {
    String name = rs.getString(3);
    namelist.add(name);
}
return namelist;
}

conn 是 Connection 对象,它的创建方式与上面在类构造函数中的创建方式相同。

问题是它返回空列表,经过一些测试,我意识到这是因为 ResultSet 是空的(rs.next() 返回 false)。我有点迷茫,因为它基本上和以前做的一样,只是它在课外工作,而不是在课内。有任何想法吗?

4

1 回答 1

0

在您的第一个代码片段中,您将“TABLE”作为参数,在第二个片段中,您将“TABLES”作为参数。

我想你打错了。

于 2013-08-06T14:13:46.303 回答