PreparedStatement的參數問題(已解決)


對於一個數據庫,我在對數據進行刪除操作的時候出現了問題

確切的說是PreparedStatement的問題

 

初步代碼是這樣的結構:

        String sql = new String("DELETE FROM flight WHERE ? = ? ");
        int res; PreparedStatement pstmt = connect.prepareStatement(sql); pstmt.setString(1, "flightNo"); pstmt.setString(2, flight.getFlightNo()); 

我起初想把WHERE語句中寫成很多 ? = ?的結構,這樣可以傳入很多自定義參數,不過都是不識別的。

然后進行了錯誤排查,發現錯誤出現在等號前的?中,把等號前的問好改成flightNo,手敲進去就好了

初步猜測是插入參數默認是等號前不能作為參數,因為sql語句中這里表示column

是colunm = 值的對應關系,所以只能是手打進去。

所以sql語句的參數不可以是column項的。

 

具體代碼如下:此為更改后的版本

@Override
    public int delete(Flight flight) throws SQLException {
        // TODO Auto-generated method stub
        Connection connect = DBUtil.getConnection();
        String sql = new String("DELETE FROM flight WHERE flightNo = ? ");
        int res;
        PreparedStatement pstmt = connect.prepareStatement(sql);
        pstmt.setString(1, flight.getFlightNo());
        System.out.println(sql);
        res = pstmt.executeUpdate();
        return res;
    }

 ~~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~~~

確定這個sql語句是只接受參數的,字段名是不可以作為問好傳參的。

新的解決辦法為StringBuffer作為sql的儲存體,每次傳入判斷語句就append進去或者中間插入

最后再來執行。

 

提升運行速度的另一要素是封裝預編譯的方法,連接->預編譯->運行

以及close的方法,涉及到線程的時候不能在增刪改查方法體的try語句塊中關閉

涉及到線程的語句會再次補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM