java - JDBC 返回空结果集,但记录存在于数据库中

标签 java jdbc oracle10g

公共(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/

相关文章:

java - 为什么在本地网络中使用XAMPP无法连接MySQL和Java

java - 单个应用程序的两个不同数据库框架可以共享相同的连接对象吗?

sql - ORA-32033 : unsupported column aliasing : Oracle 10g

java - 如何使用java将工作表添加到现有的大型Excel文件(20MB)?

Java:检查日期选择器是否有值错误

java - 如何从另一个 Activity 重新排列 MainActivity 中的 ArrayList

mysql - 我可以使用驼峰式别名来命名 SQL 的结果列吗?

java - 在文本编辑器中查找上一个单词

java - SQL Server JDBC 异常

database - 如何从另一个表创建表并将 NULL 值传递给列?