【问题标题】:ResultSet.getInt() ERROR [closed]ResultSet.getInt() 错误 [关闭]
【发布时间】:2014-07-09 17:37:23
【问题描述】:

所以我正在尝试使用 java 连接到数据库。我编写的 getOutSymptoms 函数出现问题。

这是代码

package database_console;

import java.sql.*;

public class DBConnect {

private  Connection con;
private  Statement st;
private ResultSet rs;

public DBConnect(){

    try {
        Class.forName("com.mysql.jdbc.Driver");


            try {
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/users", "root", "admin");
                st = con.createStatement();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }




    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public int getOutSymptoms(int userID) throws SQLException{
String query = "SELECT `user`.`out_symptoms` FROM user WHERE (`user`.`id` =" + userID + ")";

rs = st.executeQuery(query);
int out_symptoms_value = rs.getInt("out_symptoms");
st.close();
return out_symptoms_value;

}

错误出现在getOutSymptoms 函数的行:

int out_symptoms_value = rs.getInt("out_symptoms");

这是为什么呢?我该如何解决?

非常感谢。

【问题讨论】:

  • 什么错误?说“错误”而不告诉我们它是编译时错误还是异常,或者结果是什么,就像去看医生并期望他们在不描述症状的情况下诊断出什么问题。

标签: java mysql


【解决方案1】:

您需要遍历结果集才能获得返回的行。当您第一次获得新的 ResultSet 时,它并没有指向任何特定的行(它的指针设置为 first 之前的一行),您需要至少调用一次 rs.next() 方法才能获得实际结果。

如果你知道只能有一个结果,你可以这样做:

if (rs.next()) {
   int out_symptoms_value = rs.getInt("out_symptoms");
   //do other stuff
} else {
   //query returned no results
}

如果您希望返回多行,那么您可以这样做:

while(rs.next()) {
  int out_symptoms_value = rs.getInt("out_symptoms");
  //do the rest of processing
}

TLDR:您需要至少调用一次rs.next() 才能获得实际结果。

【讨论】:

  • @user3818372 你欢迎 :)
【解决方案2】:

为了开始使用 ResultSet,您必须调用 next() 方法。虽然你没有说明确切的错误,但除非在调用 getInt() 之前添加,否则你肯定会遇到这个问题。

http://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

【讨论】:

  • 正是这样..谢谢你:)
  • 乐于助人,没问题
【解决方案3】:

您需要使用rs.next() 遍历resultSet 对象以获取值。 resultSet 不指向实际行,但是当您调用 rs.next() 时,它指向第一个结果。

while(rs.next(){
 int d = rs.getInt("  ");
}

rs.next() 返回一个布尔值,如果不返回任何内容,则循环将不会执行,并且在运行时不会出现异常。

【讨论】:

    【解决方案4】:

    您已经在连接字符串中传递了数据库名称,因此请更改此设置

    String query = "SELECT `user`.`out_symptoms` FROM user WHERE (`user`.`id` =" + userID + ")";
    

    String query = "SELECT out_symptoms FROM tableName WHERE id =" + userID;
    

    然后像这样遍历获得的 ResultSet

    while(rs.next()) {
      int out_symptoms_value = rs.getInt("out_symptoms");
    
    }
    

    此外,最好使用PreparedStatement 而不是Statement,这可以防止您进行sql注入

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2015-02-17
      • 2014-09-18
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多