【问题标题】:where clause SQL in JSPJSP中的where子句SQL
【发布时间】:2013-11-23 08:35:36
【问题描述】:

谁能告诉我为什么我的 SQL 语句在 JSP 中不起作用。我将字符串的输出复制到 oracle,它按预期工作。这个说法正确吗?

ResultSet rs = stmt.executeQuery("SELECT disc||crs_num FROM crs_sec_schedule_reader where'" +sqlString+"' ");

以下是代码的详细信息:

String sqlString;

sqlString = "crs_sec_schedule_reader.semester = '" + semesterAdjusted+"' ";


if(!department.equals( "Select All"))
{
sqlString += " and discipline_schedule_reader.discipline_name = '" + department+"'";
}

if (div_undr.equals("null") && div_grad.equals("G"))
{
sqlString += "and crs_sec_schedule_reader.D_E_G ='" + "G"+"'";
}
else if (div_undr .equals("U") && div_grad.equals( "null"))
{
sqlString += " and (crs_sec_schedule_reader.D_E_G = '"+ "D" +"' or     
crs_sec_schedule_reader.D_E_G ='" + "E"+"')";
}
else
{
sqlString += "and (crs_sec_schedule_reader.D_E_G = '" + "D" + "' or  
crs_sec_schedule_reader.D_E_G ='" + "E"+"'or crs_sec_schedule_reader.D_E_G = '"+"G" 
+"') ";
}



.....

ResultSet rs = stmt.executeQuery("SELECT disc||crs_num FROM crs_sec_schedule_reader    
where'" +sqlString+"' ");

【问题讨论】:

  • 将生成的完整SQL语句打印出来,仔细查看后贴在这里。

标签: java sql oracle jsp


【解决方案1】:

删除 sqlString 周围的单引号。

你在哪里

ResultSet rs = stmt.executeQuery("SELECT disc||crs_num FROM crs_sec_schedule_reader where'" +sqlString+"' ");

我相信你想要

ResultSet rs = stmt.executeQuery("SELECT disc||crs_num FROM "
  + "crs_sec_schedule_reader where " +sqlString);

【讨论】:

  • 我很有信心。记住他的sqlString 也包含单引号。确保 where 后面也有空格。
【解决方案2】:

where 后缺少空格引号,请使用以下语句。

stmt.executeQuery("SELECT disc||crs_num FROM crs_sec_schedule_reader where '" +sqlString+"' "); 

sqlString = " crs_sec_schedule_reader.semester = '" + 学期调整+"'";

【讨论】:

    【解决方案3】:

    where 之后的单引号在我看来很可疑

    你最终会得到

    where 'crs_blah_blah ......
    

    但是按照 Matt 的建议去做 - 打印完整的 sql 语句并查看它的样子。这些东西总是很繁琐。

    【讨论】:

      【解决方案4】:

      WHERE 子句后应有空格

      (WHERE 条件)

      String sqlString;
      // Your Code Goes Here...
      ResultSet rs = stmt.executeQuery("SELECT disc||crs_num FROM crs_sec_schedule_reader WHERE TRUE AND '" + sqlString + "' ");
      

      使用预处理语句防止 SQL 注入。试试下面的例子:

      String selectSQL = "SELECT USER_ID, USERNAME FROM DBUSER WHERE USER_ID = ?";
      PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
      preparedStatement.setInt(1, 1001);
      ResultSet rs = preparedStatement.executeQuery(selectSQL );
      while (rs.next()) {
          String userid = rs.getString("USER_ID");
          String username = rs.getString("USERNAME"); 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-26
        • 2011-08-07
        • 1970-01-01
        相关资源
        最近更新 更多