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

Posted

技术标签:

【中文标题】如何通过 JDBC 将值插入 Microsoft Access 数据库?【英文标题】:How do I Insert values into a Microsoft Access Database through JDBC? 【发布时间】:2009-04-17 22:26:56 【问题描述】:

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

Table Name: Scores

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

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

【问题讨论】:

【参考方案1】:

尝试以下方法:

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。它位于控制面板 -> 管理工具 -> 数据源

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

【讨论】:

【参考方案2】:

插入

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 了解更多信息。

编辑:取自 cmets

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

这是JDBC tutorial on updating 和a tutorial on inserting。

【讨论】:

我在Scores表中有一个主键,需要插入的值在JAVA中是可变的,它们是如何插入的?? 每次玩游戏时数值都会改变 值会改变,还是会在表中插入新记录?我不熟悉 JDBC,但如果它类似于 DAO、ADO 或 ADO.NET,那么您应该能够使用参数构建一个命令对象,其值将是您希望插入/更新的值,然后执行该对象命令对象,使用与数据库的连接 看这里,java.sun.com/docs/books/tutorial/jdbc/overview/index.html 看起来最好的方法是使用 JDBC API 编写存储过程,然后在准备好的语句中设置需要插入的值作为参数 这里有一个关于更新java.sun.com/docs/books/tutorial/jdbc/basics/updating.html和插入jdbc-tutorial.com/jdbc-prepared-statements.htm的JDBC教程

以上是关于如何通过 JDBC 将值插入 Microsoft Access 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

使用窗体上的按钮将值插入Microsoft Access数据库

如何使用java将值动态传递给sp?

如何通过 switch compact 将值 1 插入 sq-lite 中的列

如何使用过程将值插入数据库

如何使用C将值插入双向链表

如何使用自定义插件将值插入 Joomla 2.5 DB