-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」をパラメーターとして配置し、2 番目のスニペットでは「TABLES」をパラメーターとして配置します。

私はあなたがタイプミスをしたと思います。

于 2013-08-06T14:13:46.303 に答える