我使用java在sql查询中传递日期.Below是我的代码,不会检索结果。
java.sql.Date d1=java.sql.Date.valueOf(startDate);
java.sql.Date d2=java.sql.Date.valueOf(enddate);
String url= "jdbc:jtds:sqlserver://"+serverName+"/"+database;;
String driver = "net.sourceforge.jtds.jdbc.Driver";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url);
System.out.println("Connected to the database!!! Getting table list...");
Statement sta = conn.createStatement();
String Sql = "Select INDEX from Table where DATE between "+d1+" and "+d2;
System.out.println("sql="+Sql);
rs = sta.executeQuery(Sql);
}
} catch (Exception e) {
e.printStackTrace();}
查询不返回任何行,因为日期应该作为' 2015-02-28'但查询将日期视为2015-02-28而没有单引号。请建议。
答案 0 :(得分:1)
通过将字符串连接在一起来创建SQL语句会使您的软件容易受SQL injection影响(如果变量的值来自用户输入)。
您应该使用PreparedStatement
代替:
PreparedStatement sta =
conn.prepareStatement("Select INDEX from Table where DATE between ? and ?");
sta.setDate(1, d1);
sta.setDate(2, d2);
rs = sta.executeQuery(Sql);
答案 1 :(得分:0)
添加单引号
String Sql = "Select INDEX from Table where DATE between '"+d1+"' and '"+d2+"'";
但最好的选择是使用PreparedStatement。
答案 2 :(得分:0)
尝试如下:
String Sql = "Select INDEX from Table where DATE between '"+d1+"' and '"+d2 + "'";
话虽如此,你应该研究PreparedStatements
。
答案 3 :(得分:0)
您在查询中有多个问题
INDEX
是保留字,您需要使用反引号http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html 所以查询应该是
String Sql = "Select `INDEX` from Table where DATE between '"+d1+"' and '"+d2+"'";
答案 4 :(得分:0)
用
替换您的查询String Sql = "Select INDEX from Table where DATE between '"+d1+"' and '"+d2+"'";
我建议您使用PreparedStatement而不是
String query="Select INDEX from Table where DATE between ? and ?";
PreparedStatement ps=con.prepareStatement(query);
ps.setDate(1,d1);
ps.setDate(2,d2);
ps.executeQuery();