2013-02-08 56 views
1
用於連接到數據庫
private void sUpdateBtnActionPerformed(java.awt.event.ActionEvent evt) { 
     String query = "UPDATE Student SET lastname = ?, firstname = ?, course = ?, yearlvl = ?, username = ?, password = ?"; 
     dbConn = DbConnection.dbConnect(); 
     prepState = dbConn.prepareStatement(query); 
     prepState.setString(1, sLnTf.getText()); 
     prepState.setString(2, sFnTf.getText()); 
     prepState.setString(3, courseTf.getText()); 
     prepState.setInt(4, Integer.parseInt(yearLvlTf.getText())); 
     prepState.setString(5, sUserTf.getText()); 
     prepState.setString(6, sPassTf.getText()); 
     prepState.executeUpdate(); 
    }catch(Exception e){ 
     appendEvent(sdf.format(new Date()) + " Error: " + e); 
    } 
} 

方法一般錯誤:在JDBC(更新數據庫)

import java.sql.*; 
import javax.swing.*; 

public class DbConnection { 
    Connection dbConn = null; 

    public static Connection dbConnect(){ 
     try{ 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      Connection dbConn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=H:/Integ Ongoing Project/_Midterm Project/Server/src/database/Database.accdb"); 
      return dbConn; 
     }catch(Exception e){ 
      System.out.println(e.getMessage()); 
      return null; 
     } 
    } 
} 
+3

NoQuestionFoundException。 – 2013-02-08 15:43:43

+0

我認爲答案是7 – cowls 2013-02-08 15:44:18

+0

它實際上是7 * 6 = 42. – 2013-02-08 15:45:08

回答

0

我覺得現在的問題是,你的SQL語句缺少WHERE子句。 (我知道WHERE在SQL的某些方言中是可選的......但是在這裏缺少WHERE對我沒有任何意義。)

我認爲這是錯誤的原因是,即使SQL方言允許這樣做,它也是不清楚其中表中的行是你「設置」的。即使SQL引擎可以解決這個問題,WHERE子句也可以更清楚地說明問題。 (並且在另一種情況下它「起作用」的事實並不意味着它必然是正確的。)

另一件可能導致問題的原因是「password」是一些保留字SQL方言。更改列名稱,或轉義它。


最後,實際的SQL的錯誤信息應該是在異常堆棧跟蹤,或未能在日誌文件中。那些應該是第一個的地方看看,如果你試圖找到你的數據庫代碼中的問題。尋找證據 ......而不是希望別人爲你猜出正確的答案。

+0

我已經嘗試把我的查詢中的where子句,但它仍然無法正常工作 我的第二個查詢更新教師的記錄工作正常,他們有同樣的語法與學生更新 – Norvin 2013-02-08 16:27:41

1

密碼reserved word。如果您必須將其保留爲字段名稱,請將其括在括號中以減少數據庫引擎混淆的可能性。

UPDATE Student 
SET 
    lastname = ?, 
    firstname = ?, 
    course = ?, 
    yearlvl = ?, 
    username = ?, 
    [password] = ? 
WHERE student_id = ? 

注意我包括一個WHERE條款,斯蒂芬建議,因爲它似乎不太可能,你會想在Student表適用於每那些相同的字段值。我使用student_id作爲表的主鍵的佔位符名稱...唯一標識每一行的字段。我的意圖是,您修改WHERE條款以引用要更改記錄的學生的主鍵。

如果您實際嘗試添加新記錄,而不是更新現有記錄(或記錄),請使用INSERT語句。

INSERT INTO Student (
    lastname, 
    firstname, 
    course, 
    yearlvl, 
    username, 
    [password] 
    ) 
VALUES (
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ? 
    ) 

而且,如果您有自動編號作爲主鍵的數據類型,數據庫引擎將爲您管理它。

+0

非常感謝先生,我嘗試了你給我的建議,它的工作:) – Norvin 2013-02-09 12:53:02