JDBC - 结果集没有当前行错误

时间:2016-09-12 02:15:57

标签: java sql-server 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();
            }  
        }  
    }  

2 个答案:

答案 0 :(得分:1)

这并不意味着结果集没有返回注册。这意味着记录集未设置为您要读取的行。

第一次加载记录集时,不会为任何行定位。因此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 title

"SELECT TOP " + numOfEmployees + " Title,... // space

答案 1 :(得分:0)

您的SQL

无效

尝试更改这些类型的行,以便具有正确的空格

e.g。

"SELECT TOP " + numOfEmployees + "Title,

"SELECT TOP " + numOfEmployees + " Title,

使用

测试你是否有一个有效的resultSet会更安全

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

相关问题