JDBC getDouble返回0.0

时间:2016-11-20 10:02:04

标签: java jdbc

我是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,虽然实际值不是。

4 个答案:

答案 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