2013-02-08 76 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