java - 通过 ResultSet 的 next() 方法避免跳过一行

标签 java mysql database jdbc resultset

这是一个简单的代码,用于打印数据库中的一些行。但是当我执行此操作时,屏幕上不会打印任何内容。我认为问题是 rs.next() 方法跳过了一行。那么我怎样才能避免这种情况或重置 rs.next() 方法的位置呢?

 String searchword = Searchtf.getText();
 try {
        Class.forName("com.mysql.jdbc.Driver");

        java.sql.Connection con = DriverManager.getConnection(url, db_username, db_password);

        java.sql.Statement stat = con.createStatement();

        String searchQuery = "SELECT * FROM user WHERE Name LIKE '" + searchword + "' ";

java.sql.ResultSet rs = stat.executeQuery(searchQuery);

        if (rs.next()) {
            while (rs.next()) {
                System.out.print(rs.getString("idUser") + " ,");
                System.out.print(rs.getString("Name") + " ,");
                System.out.print(rs.getString("Email") + " ,");
                System.out.println(rs.getString("country") + " .");
            }
        } else {
            JOptionPane.showMessageDialog(null, "Not Found");
        }
  } catch (Exception ex) {
        ex.printStackTrace();
    }

最佳答案

首先,停止那样构建 SQL - 使用参数化 SQL 和 PreparedStatement。您当前的代码容易受到 SQL 注入(inject)攻击。

基本上,不要连续两次调用 rs.next()(首先在 if 中,然后在 while 中)。 .. 您可以通过将 while 循环转换为 do/while 循环来轻松做到这一点:

if (rs.next()) {
    do {
        System.out.print(rs.getString("idUser") + " ,");
        System.out.print(rs.getString("Name") + " ,");
        System.out.print(rs.getString("Email") + " ,");
        System.out.println(rs.getString("country") + " .");
    } while (rs.next());
}

或者只是while 循环,用一个单独的变量来检测你已经看到了一些结果:

bool anyResults = false;
while (rs.next()) {
    anyResults = true;
    System.out.print(rs.getString("idUser") + " ,");
    System.out.print(rs.getString("Name") + " ,");
    System.out.print(rs.getString("Email") + " ,");
    System.out.println(rs.getString("country") + " .");
}
if (!anyResults) {
    JOptionPane.showMessageDialog(null, "Not Found");
}

(此外,您应该使用 try-with-resources 来关闭您的 ResultSet 等,并且仅将堆栈跟踪打印到 stdout 几乎从来都不是处理异常的合适方法...)

关于java - 通过 ResultSet 的 next() 方法避免跳过一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088163/

相关文章:

mysql - 将数据插入表列表中的一张表 (SELECT FROM INFORMATION_SCHEMA.TABLES)

mysql - 多张表查询的累计总和

java - 使用用户输入添加 BigDecimals

java - java中什么时候运行非静态 block ?

使用来自另一个查询的关联的 PHP 查询

java - 数据迁移时出现空值问题?

php - SQL查询: Data transfer from one database to another database

database - Laravel:Schema builder 和 Eloquent 之间的区别有人吗?

java - Tomcat Guice/JDBC 内存泄漏

java - Tomcat 7 Maven 构建因 Jersey 而失败