Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过JDBC(mariaDB)检索所选行的主键值_Java_Jdbc_Mariadb - Fatal编程技术网

Java 如何通过JDBC(mariaDB)检索所选行的主键值

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 :

我在使用JDBC获取所选记录的主键值时遇到问题。 我有一个HashMap,表名作为键,主键名作为值,我正在遍历它,以便找到用户选择的表名并获得主键名。到目前为止,一切正常,但当我尝试获取主键值时,它总是返回0

我使用的服务器运行在Mariadb2.4.1上,我使用的是Java1.8。下面是负责匹配用户输入和分配主键名称的for循环。在try-catch语句中,我尝试获取主键值,但它始终返回0。主键在数据库中设置为自动递增,并且值在数据库中正常更新

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查找所选行,并从中提取主键值。您可以删除它。