【发布时间】:2018-04-30 14:27:38
【问题描述】:
getTables() 方法没有为数据库中存在的表返回任何结果。我认为问题在于不知道在 ip 上查看哪个数据库。我如何指定 getTables() 方法应该在哪个数据库中查找,因为我有多个具有相同表的数据库?
//concatinating strings for IP to hit
String ArchiveDB_URL = "jdbc:sqlserver://" + getArchiveIPaddress();
// Database credentials
String USER = "Removed";
String PASS = "Removed";
Connection archiveConn = null;
Statement archiveStmt = null;
try {
// Register JDBC driver
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// Open a connection
archiveConn = DriverManager.getConnection(ArchiveDB_URL, USER, PASS);
DatabaseMetaData dbm = archiveConn.getMetaData();
ResultSet rsTBmd = dbm.getTables(null,null, "[myDatabase].[dbo].[myTable]", new String[] {"TABLE"});
System.out.println(rsTBmd.getString("TABLE_NAME"));
if (rsTBmd.next()){
//result sets start at 1 not 0
int rsTBmdi = 1;
while(rsTBmd.next()){
System.out.println(rsTBmd.getString(rsTBmdi));
rsTBmdi++;
}
}
【问题讨论】:
-
您可以尝试使用
archiveConn.setCatalog("myDatabase");设置当前数据库。 -
你能把问题说清楚一点吗?它是返回该数据库中的所有表并丢失了一个,还是根本不返回表,还是完全返回错误的表?每一个都可能意味着不同的问题(错误的服务器、缺少权限、默认数据库)。
-
致:Gord Thompson 我输入了 'archiveConn.setCatalog("myDatabase");'以上'DatabaseMetaData dbm = archiveConn.getMetaData();'它现在显示以下异常“数据库'[myDatabase]'不存在。确保输入的名称正确。”我知道它存在,我可以看到正在复制的其他表。
-
收件人:Aaron Bertrand 这应该是我在将表复制到其他 IP 之前检查表是否存在的尝试。当表格在那里时,我可以很好地复制它,但由于某种原因,我似乎无法让“if (rsTBmd.next())”返回 true。当我将“null”放在“getTables()”的第三个参数中时,while 循环会打印出以下内容。 master dbo spt_fallback_usg TABLE null
-
提示:回复 cmets 时,请使用@GordThompson,而不是“To: ...”。
标签: java sql-server jdbc mssql-jdbc