Java ResultSet.getInt()错误
所以我尝试使用java连接到数据库。。我写的函数getOutSymptoms有个问题 这是密码Java ResultSet.getInt()错误,java,mysql,Java,Mysql,所以我尝试使用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.
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");
为什么呢?我怎样才能修好它
非常感谢。您需要遍历结果集以获得返回的行。当您第一次获得新的结果集时,它没有指向任何特定的行(其指针设置为第一行之前的一行),您需要至少调用一次
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()
,才能获得实际结果。要开始使用结果集,必须调用next()方法。虽然您没有说明确切的错误,但是您肯定会遇到这个问题,除非在调用getInt()之前添加它
您需要使用
rs.next()
迭代resultSet对象以获取值。resultSet不指向实际行,但当调用rs.next()
时,它指向第一个结果
while(rs.next(){
int d = rs.getInt(" ");
}
rs.next()
返回一个布尔值,如果没有返回任何内容,循环将不会执行&运行时不会出现异常。您已经在连接字符串中传递了数据库名称,因此请更改此值
String query = "SELECT `user`.`out_symptoms` FROM user WHERE (`user`.`id` =" + userID + ")";
到
然后像这样迭代获得的结果集
while(rs.next()) {
int out_symptoms_value = rs.getInt("out_symptoms");
}
此外,最好使用
PreparedStatement
而不是Statement
哪个cna阻止sql注入什么错误?说“错误”而不告诉我们它是编译时错误还是异常,或者结果是什么,就像去看医生,希望他们在不描述症状的情况下诊断出问题。正是这样。。谢谢你:)很乐意帮忙,不problem@user3818372欢迎:)
while(rs.next()) {
int out_symptoms_value = rs.getInt("out_symptoms");
}