2012-05-16 84 views
0

我的數據庫由2列用戶名和餘額組成。用戶名的值爲Mike,餘額爲null。我正在嘗試更新餘額,但由於某種原因,它不會更新。我也沒有得到任何錯誤。任何建議用java更新mysql

<p>This is the deposit page</p> 
    <form action="deposit.jsp" method="POST"> 
    <label>deposit: </label><input type="text" name="deposit"><br> 
    <label>name: </label><input type="text" name="name"><br> 
    <input type="submit" value="deposit"> 

    <% 

    String deposit=request.getParameter("deposit"); 
String name=request.getParameter("name"); 
    try{ 
    Connection conn = null; 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root"); 
    Statement st=null; 
    st=conn.createStatement(); 
st.executeUpdate("update username set balance='"+deposit+"' where username='"+name+"'"); 

} 
catch(Exception e){ 
System.out.println(e); 
} 
%> 
</form> 
</body> 
</html> 

回答

1

如果我沒有理解什麼是正確的發生在這裏,你實際上調用分貝插入頁面加載(不是當用戶點擊提交時)......在這種情況下,你的SQL將尋找一個用戶名='',對吧?也許我不明白你在做什麼。而且你需要在整個shebang中調用commit(),但是在你實際給它一些有用的值之後。

哦,我看到你打電話給同一頁兩次,這取決於用戶是否提交...這是一個無法處理這種事情的不好方法......作爲測試看看你是否可以把東西放入你的數據庫中,這很好,但你絕對不能像這樣構建任何真正的東西。不惜一切代價將演示文稿和業務邏輯分開。我知道JSP(以及PHP和所有其他模板引擎)可以讓你合併它們,但僅僅因爲你「可以」做某事,並不意味着你應該這樣做。

[編輯2] 我們看不到您的數據庫,但是您真的有一張名爲用戶名的表,其中有一個名爲username的列嗎?因爲這就是你現在正在談論的內容。 update [TABLE NAME]。我猜這是因爲你試圖寫入一個不存在的表而失敗。

哦,並提交更新後調用。

+0

我現在只是測試我應該在哪裏調用commit() – toky

+0

看到我的第二個編輯 –

+0

我覺得現在真的很愚蠢,我的表名錯了,謝謝你現在有效。 – toky

2

地址: conn.commit()
在塊結束

+0

我在st.executeUpdate後添加了conn.commit()(「更新我們....並且它仍然不起作用 – toky

1

如果您創建兩個頁面以便查詢只運行一次,則更好。第一頁包括您的案例名稱和餘額等輸入字段。因此,在將表單提交到下一頁後,您可以將您編寫的代碼放在scriptlet中。 也寫System.out.println(e.getmessage())。所以你可以看到正確的信息。 還可以在Mysql瀏覽器中嘗試查詢以確認查詢中沒有拼寫錯誤。

1

第一次加載此頁面試圖更新以下內容:

update username set balance='null' where username='null'; 

至少有一個與該信息的用戶,並char類型的,什麼都不會發生。另一方面,今天使用scriptlets被認爲是不好的做法。我建議你申請MVC design pattern

有一個很好的答案JSP using MVC and JDBC