查询中缺少单引号

时间:2015-03-10 07:47:31

标签: java mysql

我使用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而没有单引号。请建议。

5 个答案:

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

您在查询中有多个问题

  1. INDEX是保留字,您需要使用反引号http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
  2. 来逃避它
  3. 日期应在引号内使用
  4. 所以查询应该是

    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();