公共(public)类所有数据{
public static void main(String arg[])
{
String str;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","root");
PreparedStatement stmt2;
String sql="select * from RECORDDATA where ID= ? and COMPANY_NM= ?";
stmt2=con.prepareStatement(sql);
int i=5;
str="Audi";
try
{
stmt2.setInt(1, i);
System.out.println("after setting id");
stmt2.setString(2,str);
System.out.println("after setting string");
}
catch(Exception iner)
{
System.out.println("int coulnm"+iner);
}
try
{
ResultSet showdata=stmt2.executeQuery();
System.out.println("after rs");
while(showdata.next())
{
System.out.println("in next");
System.out.println("\n"+showdata.getInt(1)+showdata.getString(2)+showdata.getString(3)+showdata.getString(4)+showdata.getString(5)+showdata.getString(6)+showdata.getString(7));
System.out.println("after next");
}
}catch(Exception e)
{
e.printStackTrace();
}
}catch(Exception e2)
{
e2.printStackTrace();
}
}
}
如果我使用硬编码值 ID=5 和 COMPANY_NM=Audi,它会从数据库中检索 3 条记录……但是我的程序从用户那里动态接受这些值……所以那是行不通的……请帮忙……我卡在这个阶段了...
showdata.next() 方法
没有执行.. 尽管数据库中有 3 条记录。
最佳答案
如果您希望返回多个 记录,为什么我在您的代码中找不到循环 来迭代这些记录?
此外,next()
将检索下一个 记录。调用它两次意味着您正在查看 第二个 检索到的记录。
现在是其他的东西:
Java 命名约定是类名必须以大写字母开头。
您不需要
Class.forName("oracle.jdbc.driver.OracleDriver")
。与 Java 6 或更高版本兼容的 JDBC 驱动程序不需要这样做。删除所有
try-catch
语句。您正在捕获错误,然后让代码继续运行,就好像没有任何问题一样。 不要那样做!您没有释放资源。使用
try-with-resources
进行更好的资源管理。它也更易于使用。
class Alldata {
public static void main(String arg[]) throws SQLException {
int id = 5;
String name = "Audi";
try (Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "root")) {
String sql = "select * from RECORDDATA where ID= ? and COMPANY_NM= ?";
try (PreparedStatement stmt = con.prepareStatement(sql)) {
stmt.setInt(1, id);
stmt.setString(2, name);
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
System.out.printf("\n%d, %s, %s, %s, %s, %s, %s%n", rs.getInt(1),
rs.getString(2), rs.getString(3), rs.getString(4),
rs.getString(5), rs.getString(6), rs.getString(7));
}
}
}
}
}
}
请注意,您正在使用 system
架构。您不应在系统架构中创建用户表。
用户 system
只能用于数据库维护,例如创建新用户。它不应该被应用程序使用。
更新
从评论来看,语句在硬编码时有效,但在使用 ?
标记时无效。为确保我做对了,请尝试以下代码:
class Alldata {
public static void main(String arg[]) throws SQLException {
try (Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "root")) {
String sql1 = "select count(*) from RECORDDATA where ID= ? and COMPANY_NM= ?";
try (PreparedStatement stmt = con.prepareStatement(sql1)) {
stmt.setInt(1, 5);
stmt.setString(2, "Audi");
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next())
System.out.println("Count 1: " + rs.getInt(1));
}
}
String sql2 = "select count(*) from RECORDDATA where ID= 5 and COMPANY_NM= 'Audi'";
try (PreparedStatement stmt = con.prepareStatement(sql2)) {
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next())
System.out.println("Count 2: " + rs.getInt(1));
}
}
}
}
}
它应该为“计数 1”和“计数 2”打印相同的数字。
关于java - JDBC 返回空结果集,但记录存在于数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649010/