簡體   English   中英

Java Prepared語句未執行

[英]Java Prepared statement not executing

我創建了一個3層小程序,其中包括:前端-> servlet->數據庫。

在前端,我將一些詳細信息輸入表單。 它們被傳遞到servlet,該servlet將呈現一些HTML並顯示輸入到表單中的值,同時還調用類DatabaseHelper。 然后,DatabaseHelper連接並將這些相同的值插入表中。

我知道這些值將被傳遞給servlet類,因為它們正在HTML中顯示。 因此,問題必須出在准備好的語句之內。 問題是,我看不到語句本身有任何錯誤。 當我查詢表本身時,那里沒有數據。

數據庫連通性是有效的,因為我可以使用硬編碼的語句而不是准備好的語句將值插入數據庫。

這里是我正在使用的語句。 任何建議深表感謝。

    public void addRegisterDetails(String name, String email, String country, String password, ){
    try{ 
        String driver = "com.mysql.jdbc.Driver";    
        Class.forName(driver).newInstance();
        // Make db connection
        con = DriverManager.getConnection(url, USERNAME, PASSWORD);   
        st  = con.createStatement();


        String query = " INSERT INTO user_information (name, email, country, password)" + " VALUES (?, ?, ?, ?)";
        PreparedStatement preparedStmt = con.prepareStatement(query);
        preparedStmt.setString (1, name);
        preparedStmt.setString (2, email);
        preparedStmt.setString (3, country);
        preparedStmt.setString (4, password);
        preparedStmt.execute();

    }catch(ClassNotFoundException ex) {
        System.out.println(ex);
    }catch(Exception e){
         e.printStackTrace();
    }
}

表定義


id | 名稱| 電郵| 國家| 密碼

除id(類型為INT)外的所有VARCHAR。

您應該在語句對象上調用方法executeUpdate()

另外,我看不到任何提交數據的調用,任何事務處理。 如果出於這個問題的目的跳過了那段代碼,那是很好的。 否則,這是非常重要的一步(如果一切順利,則提交,對於異常情況回滾)

使用executeUpdate進行數據庫寫操作:

preparedStmt.executeUpdate();

答:數據庫ID未設置為自動遞增。 由於某種原因,這不允許您隨后將數據插入表中。 感謝ChadNC指出這一點。

另外,為什么st = con.createStatement();

為什么在查詢中有領先的空間?

String query = " INSERT INTO user_information (name, email, country, password)" 
                 + " VALUES (?, ?, ?, ?)";

這個領先的空間可能或可能不重要...

最后,您應該在使用完連接后使用try-with-resources或finally塊關閉連接。

暫無
暫無

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

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