所以我一直在使用标准
查询数据库Statement s = connection.createStatement();
ResultSet rs = s.executQuery(queryString);
ResultSetMetadata rsmd = rs.getMetaData();
while(rs.next)){
String code = "";
String value = "";
for(int i = 1; i <= rsmd.getColumnCount(); i++){
Object obj = rs.getObject(i);
if(i == 1){
code = obj.toString():
}
else{
label = obj.toString();
}
}
//Store code and labels in map
}
...go on to close statement and move on.
我试图在每个实例中从表中选择两列。
在大多数情况下,这很有效。使用MySql&amp; Microsoft Sql数据库我在表中获得了完整数据的结果集。但是,当我尝试使用Oracle数据库执行此操作时,我得到一个空的结果集。
我在SQL Developer应用程序中测试了我的查询字符串,它工作正常,返回我的数据。但结果集不包含任何内容。 resultSet元数据表明它有两列。在与不同于其他两个的Oracle数据库交互时,我需要做些什么吗?感谢。
答案 0 :(得分:2)
如果您的查询在针对Oracle数据库运行时有效,并且您知道代码可以运行,因为您已针对MySQL运行它,那么还需要尝试其他一些事情:
1.确保您的JDBC连接URL正确无误。您确定要连接到您打算使用的数据库吗? (即 - 那将返回你期望的行的那个?)
2。)考虑凭据。确保通过JDBC使用与直接连接到Oracle时相同的凭据。
3.确保两个连接都是在同一台机器上并且环境相同。 Oracle驱动程序依赖于环境变量来查找包含别名&amp;的文件(我相信它被称为tnsnames.ora,或类似的东西)。连接信息。获取该文件的不同版本可能会指向不同的Oracle实例。
4.。)尝试在查询中手动指定架构名称。因此,而不是select * from my_table
使用select * from my_schema.my_table
。有时,Oracle客户端会将其会话配置为在其首选项中设置默认架构。
5.如果您尝试选择已随Oracle客户端插入的数据,请确保已在Oracle客户端中提交了该事务,以便其他会话可以看到该数据。
要使用的最后一个调试工具是尝试通过Squirrel DB客户端进行连接。 Squirrel是一个100%纯Java java客户端,使用JDBC连接到任何数据库。确保您的JDBC驱动程序,连接URL等都有效是一个很好的测试。
答案 1 :(得分:0)
数据库表有记录但JDBC客户端无法检索记录。表示JDBC客户端没有select权限。请在命令行上运行以下查询:
grant all on emp to hr;