我用Java创建了一个字母游戏,我需要在其中使用Microsoft Access数据库通过JDBC包含高分功能。数据库中的表包含以下字段
Table Name: Scores
Name (Text)
Difficulty (Text)
Characters (Number)
Accuracy (Text)
Time (Text)
Score (Text)
我需要一个SQL语句来插入Java中的值以更新Microsoft Access数据库表。
答案 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,然后在预准备语句中设置您需要作为参数插入的值。