每当我运行程序时,我都会出现以下错误。
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 :(得分: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()