2012-12-30 32 views
0

我正在嘗試使用Prepared Statement來插入一條記錄(到嵌入式java數據庫中)。當我點擊保存按鈕(JButton)時,我想要輸入的信息。我是Java新手,從來沒有嘗試過使用準備好的語句。編寫語句連接錯誤

我有問題讓我的連接(con)知道它是一個連接。以下代碼用於我在動作偵聽器中準備的聲明。

請讓我知道我做錯了什麼。非常感謝您的參與。我希望我正確地做了代碼。

String sql = "INSERT INTO Users (UserId, fName, lastName, userName, password) VALUES (?, ?, ?, ?, ?)"; 
PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 

stmt.setString(2, "fName"); 
stmt.setString(3, "lastName"); 
stmt.setString(4, "userName"); 
stmt.setString(5, "password"); 
stmt.executeUpdate(); 
+0

你是如何創建'con'的? –

+0

Connection con = DriverManager.getConnection(host,uName,uPass); –

+0

主機,uName和uPass都是變量,也是givin –

回答

1

的問題是不是與準備好的語句。比這更基本。

con.prepareStatement ...... CON有下劃線且說,它無法找到變量

這意味着,con不在範圍內。我們不知道你究竟做了什麼,但這裏有一個例子:

if (foo) { 
    Connection con = DriverManager.getConnection(host, uName, uPass); 
} 
String sql = "INSERT INTO Users (UserId, fName, lastName, userName, password) " + 
      "VALUES (?, ?, ?, ?, ?)"; 

// Compilation error  vvv 
PreparedStatement stmt = con.prepareStatement(sql, 
               Statement.RETURN_GENERATED_KEYS); 

的問題是,con是一個局部變量,並在它是塊結束超出範圍聲明。如果您嘗試使用超出範圍的變量,編譯器會說它找不到它。從本質上講,它不知道你在說什麼變量約....

+0

非常感謝你,這工作完美 –

4

這個片斷:

Connection con = DriverManager.getConnection(host, uName, uPass); 

將表明,Connectioncon只被本地定義。使這一類的成員變量和使用:

con = DriverManager.getConnection(host, uName, uPass); 

你似乎並沒有被設置的第一個參數在PreparedStatement

stmt.setString(1, UserId); 

而且你確定你要設置的文字參數值?

更新:

的第一個參數是自動生成的,你可能會想:

String sql = "INSERT INTO Users (fName, lastName, userName, password) VALUES (?, ?, ?, ?)"; 

PreparedStatement stmt = ... 
stmt.setString(1, fName); 
stmt.setString(2, lastName); 
stmt.setString(3, userName); 
stmt.setString(4, password); 
+0

我不知道如何添加第一個參數,因爲它是自動生成的 –

+0

問題是關於連接,但您的參數觀察和答案是正確的:) –

+0

@LindyKron您可以從SQL中省略。查看更新。 – Reimeus

0

創建Connection對象與Database.Try連接了這樣的...

Connection con = DriverManager.getConnection(DB_host, DB_UserName, DB_UserPassword); 

這將創建本地對象con爲Connection類。

從你的表態我明白你正在使用用戶ID as autoincrement field。你不需要明確輸入值。

所以你修改烏爾語句

String sql = "INSERT INTO Users (fName, lastName, userName, password) VALUES (?, ?, ?, ?)"; 
PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
stmt.setString(1, "fName"); 
stmt.setString(2, "lastName"); 
stmt.setString(3, "userName"); 
stmt.setString(4, "password"); 
stmt.executeUpdate(); 

試試吧。希望它能爲你工作。