2016-09-12 58 views
0

プログラムを実行するたびに次のエラーが発生します。JDBC - 結果セットに現在の行エラーがありません

com.microsoft.sqlserver.jdbc.SQLServerException:結果セットの現在の行が ではありません。

プログラムは、MySQLデータベースからユーザーが選択したデータを印刷することになっています。 SQLコードを問題なくクエリーとして実行するので、Javaプログラムに問題がある理由がわかりません。

// Use the JDBC driver 
import java.sql.*; 
import com.microsoft.sqlserver.jdbc.*; 
import java.util.Scanner; 

    public class SQLTest { 

     public static void main(String[] args) { 

      String numOfEmployees, username, password, selectSQL, results; 
      int variableSelection; 

      //Creates scanner object and asks for username and password. 
      Scanner input = new Scanner(System.in); 
      System.out.println("Username: "); 
      username = input.next(); 
      System.out.println("Password: "); 
      password = input.next(); 

      //Logs into MySQL database with given username and password. 
      String connectionString = 
       "jdbc:sqlserver://steffentest.database.windows.net:1433;" 
       + "database=testdb;" 
       + "user=" +username+ "@steffentest;" 
       + "password="+password+";" 
       + "encrypt=true;" 
       + "trustServerCertificate=false;" 
       + "hostNameInCertificate=*.database.windows.net;" 
       + "loginTimeout=30;"; 




      // Declare the JDBC objects. 
      Connection connection = null; 
      Statement statement = null; 
      ResultSet resultSet = null; 


      try { 
       connection = DriverManager.getConnection(connectionString); 


       System.out.println("Successfully logged in...\n"); 

       System.out.println("Number of employees to view: "); 
       numOfEmployees = input.next(); 

       System.out.println("What information would you like to see?"); 
       System.out.println("---------------------"); 
       System.out.println("1) Company Name"); 
       System.out.println("2) Email Address"); 
       System.out.println("3) Phone Number"); 
       System.out.println("---------------------"); 
       variableSelection = input.nextInt(); 

       switch (variableSelection) 
       { 
       case 1: 
        statement = connection.createStatement(); 
        selectSQL = "SELECT TOP " + numOfEmployees + "Title, FirstName, LastName, CompanyName from SalesLT.Customer"; 
        resultSet = statement.executeQuery(selectSQL); 
        results = "Name: " + resultSet.getString(2) + " " + resultSet.getString(3) + "\nCompany: " + resultSet.getString(4) + "\n"; 
        System.out.println(""); 
        while (resultSet.next()) 
        { 
         System.out.println(results); 
        } 
        break; 
       case 2: 
        statement = connection.createStatement(); 
        selectSQL = "SELECT TOP " + numOfEmployees + "Title, FirstName, LastName, EmailAddress from SalesLT.Customer"; 
        resultSet = statement.executeQuery(selectSQL); 
        results = "Name: " + resultSet.getString(2) + " " + resultSet.getString(3) + "\nEmail Address: " + resultSet.getString(4) + "\n"; 
        System.out.println(""); 
        while (resultSet.next()) 
        { 
         System.out.println(results); 

        } 
        break; 
       case 3: 
        statement = connection.createStatement(); 
        selectSQL = "SELECT TOP " + numOfEmployees + "Title, FirstName, LastName, PhoneNumber from SalesLT.Customer"; 
        resultSet = statement.executeQuery(selectSQL); 
        results = "Name: " + resultSet.getString(2) + " " + resultSet.getString(3) + "\nPhone Number: " + resultSet.getString(4) + "\n"; 
        System.out.println(""); 
        while (resultSet.next()) 
        { 
         System.out.println(results); 

        } 
        break; 
       default: 
        System.out.println("Please enter a number 1-3."); 
        break; 
       } 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
      finally { 
       if (connection != null) try { connection.close(); } catch(Exception e) {} 
       if (statement != null) try { statement.close(); } catch(Exception e) {} 
       if (resultSet != null) try { resultSet.close(); } catch(Exception e) {} 
       input.close(); 
      } 
     } 
    } 

答えて

0

あなたが

は、例えば正しいスペース

を持っているので、ラインのこれらの種類を変更してみてください無効なSQLを持っています

"SELECT TOP " + numOfEmployees + " Title, 

"SELECT TOP " + numOfEmployees + "Title, 

また、それをテストする方が安全だろうあなたが

https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#first()

1

を使用して、有効なResultSetを持っているかどうかは、結果セットが何も登録を返されないことを意味するものではありません。これは、レコードセットが読み込みたい行に設定されていないことを意味します。

最初にレコードセットをロードするときに、どの行にも配置されません。したがって、rs.next()は、最初の行の結果セットを配置します(つまり、現在の行の最初の行を作成します)。その行からいくつかのデータを読み取ることができます。結果セットには、そこからデータを読み取るための現在の行が必要です。スペースに注意

System.out.println(""); 
while (resultSet.next()) 
{ 
results = "Name: " + resultSet.getString(2) + " " + resultSet.getString(3) + "\nCompany: " + resultSet.getString(4) + "\n"; 
       System.out.println(results); 
} 

クエリは明らかにはスペースのnumOfEmployeesのタイトルを持っていない連結

"SELECT TOP " + numOfEmployees + " Title,... // space 
関連する問題