如何通过 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数据库