簡體   English   中英

SQL查詢的WHERE子句中有錯誤,

[英]having error in WHERE clause of SQL query,

我在此代碼中有一個錯誤:

public List<AvailableTest> srchInTestsInDb(String search, String catg) {
    try 
     { 
         Connection conn = Dbconn.Connect();

         System.out.println(catg);

         String sql = "SELECT * "
                 + "FROM AVAILABLE_TESTS "
                 + "WHERE TST_CATAGORY="+catg+"";
                // + "TST_NAME LIKE '"+search+"%'";// AND TST_CATAGORY ="+catg+""; 

         Statement statement = conn.createStatement(); 
         ResultSet rs = statement.executeQuery(sql); 
         List<AvailableTest> testList = new ArrayList<AvailableTest>(); 
         while (rs.next()) 
         { 
            AvailableTest newtest = new AvailableTest(); 

            newtest.setTstNo(rs.getInt("TST_NO"));

            newtest.setTstName(rs.getString("TST_NAME"));

            newtest.setTstCatagory(rs.getString("TST_CATAGORY"));

            newtest.setTstNormalValue(rs.getString("TST_NORMALVAL"));

            testList.add(newtest); 
         } 
         return testList;
     } 
     catch (SQLException ex) 
     { 
         Logger.getLogger(DbHandeler.class.getName()).log(Level.SEVERE, null, ex);
         return null; 
     }
}

其輸出為:

chem
Jul 29, 2014 10:02:28 PM Db.DbHandeler srchInTestsInDb
SEVERE: null
java.sql.SQLSyntaxErrorException: ORA-00904: "CHEM": invalid identifier

當我打印“ catg”時,它會打印我在查詢中需要的“ chem”,但是它不起作用。

它應該是WHERE TST_CATAGORY='"+catg+"'" ,因為String參數應該用引號引起來。

就是說,這是一個非常糟糕的做法,並且冒着SQL注入的風險。 使用准備好的語句:

String sql = "SELECT * "
                 + "FROM AVAILABLE_TESTS "
                 + "WHERE TST_CATAGORY=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString (1, catg);
ResultSet res = stmt.executeQuery ();;

Oracle沒有考慮將CHEM作為列名,因為它沒有被引用。 要使Oracle將其視為字符串,請使用單引號。

String sql = "SELECT * "
+ "FROM AVAILABLE_TESTS "
+ "WHERE TST_CATAGORY='"+catg+"'";

嘗試:

String sql = "SELECT * "
                 + "FROM AVAILABLE_TESTS "
                 + "WHERE TST_CATAGORY='"+catg+"';";

由於catg的內容是字符串,因此它也應該用引號引起來(在SQL-Query中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM