如何通过JDBC将值插入Microsoft Access数据库?

时间:2009-04-17 22:26:56

标签: sql ms-access jdbc

我用Java创建了一个字母游戏,我需要在其中使用Microsoft Access数据库通过JDBC包含高分功能。数据库中的表包含以下字段

Table Name: Scores

Name       (Text)
Difficulty (Text)
Characters (Number)
Accuracy   (Text)
Time       (Text)
Score      (Text)

我需要一个SQL语句来插入Java中的值以更新Microsoft Access数据库表。

2 个答案:

答案 0 :(得分:2)

尝试以下内容:

String dataSourceName = "my_ODBC_DSN_name";
String username = "username";
String password = "password";
String url = "jdbc:odbc:" + dataSourceName;

Connection con = null;
try {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  con = DriverManager.getConnection(url, username, password);

  PreparedStatement pst = con.prepareStatement("INSERT INTO Scores "
           + "(Name, Difficulty, Characters, Accuracy, Time, Score) "
           + "VALUES (?, ?, ?, ?, ?, ?)");

  pst.setString(1, "Name String");
  pst.setString(2, "Difficulty String");
  pst.setInt(3, 20);
  pst.setString(4, "Acurracy String");
  pst.setString(5, "Time String");
  pst.setString(6, "Score String");

  pst.executeUpdate();
} catch (SQLException e) {
  e.printStackTrace();
} catch (ClassNotFoundException e) {
  e.printStackTrace();
} finally {
  if (con != null)
    try {
      con.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
}

您必须首先在Windows控制面板中设置ODBC DSN。它在控制面板 - >管理工具 - >数据来源

除了您的主要问题之外,我还认为您应该修改数据库架构,以便在时间和分数列中使用适当的列类型,并可能用于准确性和难度。在标准化设计中,“名称”也是另一个表的外键(类似于player_id),它将保存每个玩家的详细信息。

答案 1 :(得分:1)

到INSERT

INSERT INTO Scores (Name, Difficulty, Characters, Accuracy, Time, Score)
VALUES ('Name Value', 'Difficulty Value', 3, 'High', '10:30', '235');

为了更新,您需要在Scores表中使用PRIMARY KEY,这样您才能更新特定记录(除非您打算更新多条记录)。无论如何,我都会建议在桌面上使用PK。

此外,我注意到难度,准确度,时间和分数都是基于文本的字段 - 现在我不知道你的数据库架构/设计是什么样的,但是难度,准确度和分数让我觉得它是数字的自然,而时间听起来像日期/时间。有关详细信息,请查看MS Access (JET DB Engine) Data types

编辑:摘自评论

查看here,看起来在JDBC中参数化SQL语句的最佳方法是使用JDBC编写存储过程预处理语句) API,然后在预准备语句中设置您需要作为参数插入的值。

这是JDBC tutorial on updatinga tutorial on inserting