插入时的 JDBC PreparedStatement 默认值 (UCanAccess)

Posted

技术标签:

【中文标题】插入时的 JDBC PreparedStatement 默认值 (UCanAccess)【英文标题】:JDBC PreparedStatement default values on Insert (UCanAccess) 【发布时间】:2017-07-05 12:11:14 【问题描述】:

我想知道如何通过 UCanAccess 获取新插入的 MS Access 行的默认值。

表:my_tbl

Column   Type
-------+-----------------------
ID     | PrimaryKey, AutoNumber
Label  | Text
DT     | Date/Time, Default: Now()

代码

PreparedStatement st = conn.prepareStatement("INSERT INTO my_tbl (Label) VALUES (?)", Statement.RETURN_GENERATED_KEYS);
st.setString(1, "my new label");

int insertResult = st.executeUpdate();
if(insertResult > 0) 
    ResultSet rs = st.getGeneratedKeys();
    rs.next();
    System.out.println("ID: " + rs.getInt(1));


//How do I get the generated value of DT

限制

我不能使用关键字 DEFAULT,因为 UCanAccess 会抛出 SQLException (SO discussion about DEFAULT):

Caused by: org.hsqldb.HsqlException: DEFAULT keyword cannot be used as column has no DEFAULT

您有其他解决方案吗?

【问题讨论】:

【参考方案1】:

如何获取DT的生成值

您将需要使用 rs.getInt(1) 返回的值来执行表单的另一个 SELECT 查询

SELECT DT FROM my_tbl WHERE ID = ?

然后从为该查询调用 executeQuery 生成的 ResultSet 中检索值。

【讨论】:

以上是关于插入时的 JDBC PreparedStatement 默认值 (UCanAccess)的主要内容,如果未能解决你的问题,请参考以下文章

JDBC事务案例学习

eclipse往mysql里面插入数据时的乱码

JDBC连接数据库(Java DataBase Connectivity,java)

JDBC-PreparedStatement实现CURD(笔记)

DBeaver客户端工具结果集缓存实现的猜测

java连接SQL Server数据库