0

下面的代码:

public void insertNewStudent(int id, String pass, String fname, String lname, String   street, String city, String state, int Zip, String Email, double GPA) {
    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    conn = DriverManager.getConnection("jdbc:odbc:RegistrationDB", "", "");
    String query = "INSERT INTO Students (ID, Password, FirstName, LastName, Street, City, State, Zip, EMail, GPA)" + "VALUES (?,?,?,?,?,?,?,?,?,?)";
    PreparedStatement ps = conn.prepareStatement(query);
    ps.setInt(1, id);
    ps.setString(2, pass);
    ps.setString(3, fname);
    ps.setString(4, lname);
    ps.setString(5, street);
    ps.setString(6, city);
    ps.setString(7, state);
    ps.setInt(8, Zip);
    ps.setString(9, Email);
    ps.setDouble(10, GPA);
    ps.executeUpdate();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

抛出以下异常:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] The specified DSN contains an     architecture mismatch between the Driver and Application
    sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956)
    sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113)
    sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3072)
    sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
    sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
    java.sql.DriverManager.getConnection(DriverManager.java:579)
    java.sql.DriverManager.getConnection(DriverManager.java:221)
    business.studentDB.insertNewStudent(studentDB.java:53)
    controller.registercontrol.doPost(registercontrol.java:47)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

这是如何引起的,我该如何解决?

4

2 回答 2

1

添加finally

PreparedStatement ps = null; // declare outside the try block
try {
  // ...
} catch (Exception e) {
  // ...
} finally {
  try {
    if (ps != null) ps.close();
    if (conn != null) conn.close();
  } catch (SQLException e) {
    // ...
  }
}

保持Connection打开状态可能不会将更改提交到数据库。如果Connection正在共享并且您无法commit()明确关闭它,则您的更改。

ps.executeUpdate();
conn.commit();

编辑:鉴于共享的堆栈跟踪,请确保您的 Java IDE、Microsoft Access 和 JVM 或 JDK 都是相同的位,即 32 位或 64 位版本。但是,是的,finally仍然建议添加块。

于 2013-05-07T18:43:25.627 回答
1

所以改变你的异常处理发现了你真正的问题,这似乎是:

The specified DSN contains an architecture mismatch between the Driver and Application

这基本上告诉您有针对 64 位访问的 32 位驱动程序或其他方式。您需要找出哪个并使用正确的。例如,关于这个问题的更多信息在这个线程上。

于 2013-05-07T18:56:06.920 回答