我正在开发一个 Java 应用程序,使用 GridDB 作为数据库和 GridDB的 JDBC 驱动程序。在执行 SQL 查询来检索自动生成的密钥时,我遇到以下异常:
java.sql.SQLFeatureNotSupportedException: JDBC_OPTIONAL_FEATURE_NOT_SUPPORTED
at com.toshiba.mwcloud.gs.sql.internal.StatementAdapter.getGeneratedKeys(StatementAdapter.java:123
数据库: GridDB 5.1 CE
JDBC 驱动程序: GridDB JDBC 驱动程序版本 5.1
执行查询:
Connection connection = DriverManager.getConnection("jdbc:gs://Farwa:20001/default", "GridDB", "admin786");
String query = "INSERT INTO Customers (Customer_ID, Customer_name) VALUES (1, Ali)";
PreparedStatement preparedStatement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, "Value1");
preparedStatement.setString(2, "Value2");
int rowsAffected = preparedStatement.executeUpdate();
ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
if (generatedKeys.next()) {
System.out.println("Generated Key: " + generatedKeys.getInt(1));
}
CREATE TABLE Customers (
Cusomter_ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
Customer_Name VARCHAR2(50)
);
发生错误是因为 GridDB JDBC 驱动程序不支持
getGeneratedKeys()
方法。
生成的键是声明为生成的列的值;例如各种 SQL 方言中的 IDENTITY、AUTO_INCRMENT 等。
GridDB 的 SQL 不支持任何这种性质的列类型。 因此,当您尝试调用
SQLFeatureNotSupportedException
时,JDBC 驱动程序抛出 getGeneratedKeys
是适当的。
在您的问题中,您向我们提供了下表声明。
CREATE TABLE Customers (
Cusomter_ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
Customer_Name VARCHAR2(50)
);
根据此处描述的 GridDB SQL 语法,这是无效的。 (检索于2024-12-18)
第一栏名称中的拼写错误让我相信这不是“真实的”。