我是Java和JDBC的新手。 我试图通过JDBC从数据库中获取double值,并使全局变量等于该值。这就是我所做的。
public class Console {
String sql;
Statement stmt;
Connection conn;
ResultSet rs;
//Category Total
public static double num;
public Console(){
try{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting to database...");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?autoReconnect=true&useSSL=false","user","password");
stmt = conn.createStatement();
System.out.println("Connected database successfully...");
sql = "SELECT sum(a) FROM table";
while(rs.next()) {
rs = stmt.executeQuery(sql);
num = rs.getDouble("sum(a)");
}
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
System.out.println(num);
}
}
当我运行程序时,它打印0.0,虽然实际值不是。
答案 0 :(得分:3)
您需要将之前的结果集到while循环中,然后遍历它
rs = stmt.executeQuery(...);
while (rs.next()) {
// and process your results row by row here...
}
否则(如您所见),您的rs
变量未设置
您的结果集不会包含sum(a)作为列名。您可以按位置获取结果(例如getInt()
可以获取索引整数)或重命名结果列(例如选择sum(a) as sum FROM table
)并像这样引用它。
答案 1 :(得分:1)
您还没有通过执行查询来初始化ResultSet
。然后你可以循环结果集。
sql = "SELECT sum(a) FROM table";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
num = rs.getDouble("sum(a)");
}
你已经在循环中得到了结果,但是你必须在到达循环之前这样做。
答案 2 :(得分:0)
由于JDBC驱动程序的行为,您获得的是0.0。 来自java doc
返回:列值;如果值为SQL NULL,则为值 返回为0
要知道Resultset中的最后一个读取值为null,您可以使用方法rs.wasNull()方法。如果读取的最后一列值为SQL NULL,则返回true,否则返回false。
答案 3 :(得分:0)
最好将column alias分配给计算结果,例如sudo pip install matplotlib
,并使用该别名检索值。
同样好的做法是使用Java的try-with-resources。
try-with-resources语句确保在语句结束时关闭每个资源。
此外,如果您的SQL语句将返回sum(a)
,例如如果表为空或没有行适用于NULL
子句中的条件,ResultSet.getDouble
方法将返回值0.
WHERE