【发布时间】:2015-07-10 10:46:12
【问题描述】:
我正在尝试制作一个使用用户输入数据为表构建自定义查询的 sql 查询构建器类型程序
到目前为止我有
public int checkBetweenDates() throws SQLException{
String t1 = "2015-07-08"; //or later some user input variable
String t2 = "2015-07-09";//or later some user input variable
String id = "22 03 E7 99";//or later some user input variable
int rowCount = -1;
//Statement stmt = null;
String dateChoice = "select count(*) "
+ "from dancers "
+ "where ts between (t1) and (t2)"
+ "and id = (id)"
+ "values (?)";
Connection conn = DriverManager.getConnection(host, username, password);
System.out.println("Connected:");
PreparedStatement preparedStmt = (PreparedStatement) conn.prepareStatement(dateChoice);
preparedStmt.setString (1, t1);
// preparedStmt.setString (2, t2);
// preparedStmt.setString (3, id);
// stmt = conn.createStatement();
ResultSet rs = preparedStmt.executeQuery(dateChoice);
try {
rs = preparedStmt.executeQuery(dateChoice);
rs.next();
rowCount = rs.getInt(1);
System.out.println(rowCount);
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
rs.close();
preparedStmt.close();
}
return rowCount;
}
所以它连接并且一切正常,但它没有执行查询,说明值的 sql 语法有问题(?,?,?)
任何帮助都会很棒谢谢大家!!
卡尔
【问题讨论】:
-
sql server 和 mysql 存在语法差异。您将使用您的工具针对哪一个?此外,哪个服务器给了您上述错误? mysql还是sql server?
-
从 where 子句中删除
+ "values (?)" -
就像@Mini 指出的那样,SQL 不正确。我看到两个问题 1. t1 和 t2 是字符串,但您的代码没有连接它并直接使用。 2. values() 是用于插入而不是用于选择。建议在通过 JDBC 执行之前在 SQL 提示符下运行它。另一方面,在当今世界,JPA(带有 EclipseLink/Hibernate)为静态和动态查询提供了非常好的支持。我的两分钱是看那些而不是试图想出你自己的。
标签: java mysql sql sql-server jdbc