【问题标题】:USing Variables/JAVA functions in SQL arithmetic statements in JAVA Netbeans在 JAVA Netbeans 的 SQL 算术语句中使用变量/JAVA 函数
【发布时间】:2014-04-23 07:26:08
【问题描述】:

我正在尝试使用具有数据库中定义的另一个属性的 Java 函数来查询我的数据库。该语句不会产生错误。但是,输出是错误的。输出的结果为空,但从我的检查来看,它不为空。请问谁能告诉我我需要做什么?如何在 SQl 语句中使用 JAVA 函数?

expired_rows = dbMngr.runQuery(String.format("SELECT ID FROM Student WHERE 'System.currentTimeMillis()' - ArrivalTime > (%s) ", 5000));}

if (expired_rows == null) { 
    System.out.println("The number of expired row is " + expired_rows);
}
if (expired_rows != null) { 
    System.out.println("The number of expired row is " + expired_rows.length );
}

【问题讨论】:

  • long l = System.currentTimeMillis(); 然后在你的SQL语句中使用l的值。
  • 使用 prepd stmt.long l = System.currentTimeMillis() 时出现一些错误; String query = "select id from Student where ? - ArrivalTime > 5000";尝试 { PreparedStatement expired_row = con.prepareStatement(query); expired_row.setLong(1, l); expired_row.execute();结果集 res = expired_row.getResultSet(); if (res == null) { System.out.println("过期行数为" + res); expired_rows.length ); } if (res != null) { System.out.println("过期行数为" + res); System.out.println("过期行数为" + res.length ); }
  • ResultSet res =expired_row.executeQuery();然后通过while (rs.next){i++) 循环计算行数。我认为空值检查是多余的——executeQuery 要么抛出 SQLException 要么返回 ResultSet——我认为它永远不会返回空值,如果确实如此,通常意味着错误是完全不可恢复的
  • 感谢 Dave,我仍然收到错误消息:线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException。你觉得这可能是原因:String query = "select id from Student where ? - ArrivalTime > 5000"?

标签: java mysql sql function arithmetic-expressions


【解决方案1】:

您不能以您尝试的方式使用 java 函数。您只是将字符串 "'System.currentTimeMillis()'" 传递给 dbms - 您想传递 评估 该函数的结果

"SELECT ID FROM Student WHERE  %l - ArrivalTime > (%s) ",System.currentTimeMillis(), 5000));}"

工作? (我不确定 String.format 的语法并且没有访问文档的权限,但希望你能得到图片......)

更好的解决方案是使用 GriffeyDog 建议的 PreparedStatement,但与您已经完成的工作相距甚远。

此外,如果没有生成错误,那么您的 dbMngr 类似乎很可能正在吞下异常而不报告它们。

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多