Java 如何通过JDBC(mariaDB)检索所选行的主键值
我在使用JDBC获取所选记录的主键值时遇到问题。 我有一个HashMap,表名作为键,主键名作为值,我正在遍历它,以便找到用户选择的表名并获得主键名。到目前为止,一切正常,但当我尝试获取主键值时,它总是返回0 我使用的服务器运行在Mariadb2.4.1上,我使用的是Java1.8。下面是负责匹配用户输入和分配主键名称的for循环。在try-catch语句中,我尝试获取主键值,但它始终返回0。主键在数据库中设置为自动递增,并且值在数据库中正常更新Java 如何通过JDBC(mariaDB)检索所选行的主键值,java,jdbc,mariadb,Java,Jdbc,Mariadb,我在使用JDBC获取所选记录的主键值时遇到问题。 我有一个HashMap,表名作为键,主键名作为值,我正在遍历它,以便找到用户选择的表名并获得主键名。到目前为止,一切正常,但当我尝试获取主键值时,它总是返回0 我使用的服务器运行在Mariadb2.4.1上,我使用的是Java1.8。下面是负责匹配用户输入和分配主键名称的for循环。在try-catch语句中,我尝试获取主键值,但它始终返回0。主键在数据库中设置为自动递增,并且值在数据库中正常更新 for (Map.Entry hashMap :
for (Map.Entry hashMap : getTablesWithPrimaryKeys().entrySet()) {
if (getTableName().compareTo(hashMap.getKey().toString()) == 0) {
setPrimaryKey((String)hashMap.getValue());
System.out.println(getPrimaryKey());
try {
PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + tableName, Statement.RETURN_GENERATED_KEYS);
statement.executeQuery();
ResultSet resultSet = statement.getGeneratedKeys();
if (resultSet.next()) {
setPrimaryKeyValue(resultSet.getLong(1));
System.out.println(getPrimaryKeyValue());
}
connection.close();
} catch (SQLException exception) {
exception.printStackTrace();
}
}
}
我不会抛出异常,所以这里肯定缺少一些东西。有什么帮助吗?您的查询是
select*from…
,并且您总是以long形式获得第一列值:resultSet.getLong(1)
。您从不在任何地方使用主键列名。请注意,如果要基于键获取值,则贴图的整个点都是无效的。迭代条目会破坏整个点。此外,select语句不会生成新的键,因此我看不到返回\u生成的\u键的点。
从何处选择…
?因此问题纯粹是逻辑问题。如果用户在JavaFXTableView中选择一行,那么您将在JavaFXTableView中找到所选行的主键。不在数据库表中,它不知道您在Java应用程序中选择了哪一行。使用JavaFX tableview查找所选行,并从中提取主键值。您可以将其删除。您的查询是select*from…
,并且总是以long形式获取第一列值:resultSet.getLong(1)
。您从不在任何地方使用主键列名。请注意,如果要基于键获取值,则贴图的整个点都是无效的。迭代条目会破坏整个点。此外,select语句不会生成新的键,因此我看不到返回\u生成的\u键的点。
从何处选择…
?因此问题纯粹是逻辑问题。如果用户在JavaFXTableView中选择一行,那么您将在JavaFXTableView中找到所选行的主键。不在数据库表中,它不知道您在Java应用程序中选择了哪一行。使用JavaFX tableview查找所选行,并从中提取主键值。您可以删除它。