java.sql.SQLException : Before/after start of result set

标签 java mysql database jdbc resultset

我在让程序从数据库读取信息时遇到问题。我希望它基本上打印出一个包含提取信息的表格(我遵循的教程正是这样做的)。不幸的是,在仔细研究我的代码和教程之后,我发现没有任何区别。最终我希望能够从数据库中提取信息并允许用户编辑此信息。

这是我的代码:

import java.sql.*;

public class Main {
//Driver and connection URL.
private String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static String connectionString = "jdbc:mysql://localhost/employees"; 

//DB Credentials.
private static String password = "password";
private static String username = "root";

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null; 

        try {
            //Register JDBC Driver.
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionString,      username, password);
            System.out.println("Connected to database.");


            statement =    connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,  ResultSet.CONCUR_UPDATABLE);


            resultSet = statement.executeQuery("SELECT * from employees");  

            //process query results.
            ResultSetMetaData metaData = resultSet.getMetaData();
            int numberOfColumns = metaData.getColumnCount();
            System.out.println("Emloyees table of Employees DB");

            for (int i=1; i<=numberOfColumns; i++){
                System.out.printf("%-10s\t", resultSet.getObject(i));    //Return the value of a given object as a java object.
            }
            System.out.println();

            //Initial cursor is before first row. 
            while(resultSet.next()){ //move cursor forward one row.
                for (int i=1; i<=numberOfColumns; i++){
                    System.out.printf("%-10s\t", metaData.getColumnName(i));
                }
            }
            System.out.println();


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try{
                connection.close();
                statement.close();
                resultSet.close();
            }
                catch(SQLException se){
                    se.printStackTrace();
                }
            }
        System.out.println("Great! Everything works!");
        }

}        

这是我运行程序时发生的情况:

Fri Aug 12 19:49:55 EDT 2016 WARN: Establishing SSL connection without    server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

Connected to database.
Emloyees table of Employees DB
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:790)
at com.mysql.jdbc.UpdatableResultSet.checkRowPos(UpdatableResultSet.java:214)
at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4432)
at Main.main(Main.java:38)
Great! Everything works!

值得注意的是:它正在连接到数据库,如果我将 for 循环与 while 循环交换,它将多次打印每列的名称,并且 java.sql.SQLException 将在结果开始后发生设置而不是之前设置。

最佳答案

你的代码没有任何意义。除非 next() 返回 true,否则无法调用 ResultSet.getObject(),并且不需要调用 ResultSet.next() 在循环中只是为了打印出列名称。它们不会每行改变。

还需要假设您希望在数据之前打印列名称。

打印列名称的循环应该位于打印 getObject() 值的循环所在的位置,反之亦然。

关于java.sql.SQLException : Before/after start of result set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927919/

相关文章:

java - 未针对特定 URL 模式调用第二个 Servlet 过滤器

java - HSQLDB 支持中的文档数据类型

java - firebase 数据库查询并返回值 true,但如果用户存在则仍继续前进,并注册重复条目

mysql - 在 MY-SQL 中一起插入多个不存在的值。其中 "NULL"应该是唯一的

mysql - mysql select语句中where子句中的if语句

java - 如何为带有堆栈的 Iterator 类设置构造函数?

javascript - PHP/html : instant search function: Can't search for foreign (e. g.Chinese)字符

PHP/MySQL : Check if Data Was Output Before, 如果是,则输出不同的数据

sql - db *sql.DB 在 a.go 中声明在 b.go 中不可用

database - 如何加密 WinForms 1.1 app.config 中的连接字符串?