簡體   English   中英

為什么PrepareStatement不能生成正確的SQL查詢?

[英]Why does the PrepareStatement not generate correct SQL query?

以下是我的PrepareStatement代碼。 它不會生成正確的SQL查詢。 它也沒有超越1st println-statement。 另外它在查詢中說**未指明**(請參見下文)。

我們怎么解決這個問題呢?

   ps1 = con.prepareStatement(
                     "select stuId, name, relationsName, houseAddress, houseNumber from temp where "
                        + " stuId like '?%' and " 
                        + " sex = '?' and " 
                        + " name like '?%' and "
                        + " age BETWEEN ? and ? and "
                        + " relationsName like '?%' " 
                        + " order by name asc limit 0, 150000 "
               );

               System.out.println("ps1 Before : " + ps1);

輸出:

ps1之前:com.mysql.jdbc.JDBC4PreparedStatement@14d55de:從temp中選擇stuId,name,relationsName,houseAddress,houseNumber,其中stuId喜歡'?%'和sex ='?' 並命名為'?%'和年齡BETWEEN **未指明**和**未指明**和relationsName喜歡'?%'按名稱排序asc limit 0,150000

它沒有超出這一點。 此外,它說不在查詢中指定 (請參閱為末)。

有什么見解嗎?

       ps1.setString(1, stuId);
       ps1.setString(2, gender);
       ps1.setString(3, name);
       ps1.setInt(4, startAge);
       ps1.setInt(5, endAge);
       ps1.setString(6, relationsName);

       System.out.println("ps1 After : " + ps1);

       rs = ps1.executeQuery();

因為占位符用單引號括起來,因此使它成為一個值而不再是一個參數。 你應該擺脫它,例如

ps1 = con.prepareStatement(
                 "select stuId, name, relationsName, houseAddress, houseNumber from temp where "
                    + " stuId like ? and " 
                    + " sex = ? and " 
                    + " name like ? and "
                    + " age BETWEEN ? and ? and "
                    + " relationsName like ? " 
                    + " order by name asc limit 0, 150000 "
           );

對於LIKE語句,你應該在java中連接值,而不是在sql中,

ps1.setString(1, stuId + '%');

暫無
暫無

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

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