特定の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 を返します)。基本的に以前と同じことをしているので、ちょっと迷っています。クラスの外では機能しているだけで、内部では機能していません。何か案は?