2016-08-13 16 views
0

私のプログラムでデータベースから情報を読み取ることに問題があります。私は基本的に抽出された情報を持つテーブルを印刷したいと思います(そして私が従ったチュートリアルはそれを正確に行います)。残念なことに、私のコードとチュートリアルを流しても、私は違いは見つけられません。最終的に私はデータベースから情報を引き出し、ユーザーがこの情報を編集できるようにしたいと考えています。ここでjava.sql.SQLException:結果セットの開始前後に

は私のコードです:それは、データベースに接続すると、私はループのための私を入れ替えた場合にされています。注目に値する

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! 

:ここ

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!"); 
     } 

}   

は私がプログラムを実行するときに起こる私のものです私のwhileループでは、各列の名前を何度か表示し、java.sql.SQLExceptionは前回ではなく結果セットの開始後に発生します。

答えて

2

あなたのコードは意味をなさない。 next()がtrueを返さない限り、ResultSet.getObject()に電話をかけることはできません。列名を印刷するだけでループ内でResultSet.next()を呼び出す必要はありません。行ごとに変更されることはありません。

また、データの前に列名を印刷することも前提としています。

列名を出力するループは、getObject()の値を出力するループがある場所で、の場合はその逆でなければなりません。

関連する問題