首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CachedRowSet更新H2中的记录

CachedRowSet更新H2中的记录
EN

Stack Overflow用户
提问于 2015-04-16 12:07:33
回答 1查看 652关注 0票数 0

我有一个带表的H2数据库

代码语言:javascript
复制
CREATE TABLE income_expense
(
  amount VARCHAR(255) NOT NULL,
  name VARCHAR(255) NOT NULL,
  ondate VARCHAR(255) NOT NULL
);

和一些像INSERT INTO income_expense VALUES ('10','Something','2015-04-15');这样的随机数据

然后,我用JDBC连接到这个数据库,并尝试通过CachedRowSet进行更新。

代码语言:javascript
复制
public void doUpdate()
{
    try
    { 
        Class.forName("org.h2.Driver");
        setConnection(
                DriverManager.getConnection("jdbc:h2:~/thisdb", "sa", ""));

        CachedRowSet crs2 = new CachedRowSetImpl();
        crs2.setType(CachedRowSet.TYPE_SCROLL_INSENSITIVE);
        crs2.setConcurrency(CachedRowSet.CONCUR_UPDATABLE);
        crs2.setCommand(
                "SELECT amount, name, ondate FROM income_expense");
        crs2.execute(getConnection());
        crs2.absolute(1);
        crs2.updateString("amount", "22");
        crs2.updateString("name"  , "33");
        crs2.updateString("ondate", "44");
        crs2.updateRow();
        crs2.acceptChanges();
    }
    catch (ClassNotFoundException | SQLException e)
    {
        System.out.println("Error occured." + e);
    }
}

此更新在同步时发生消息javax.sql.rowset.spi.SyncProviderException: 1冲突时失败。

我更新唱片做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 12:28:52

好吧..。只有在向表中添加主键之后,CachedRowSet更新才能正常工作:

代码语言:javascript
复制
ALTER TABLE income_expenses ADD COLUMN id INT NOT NULL AUTO_INCREMENT;
ALTER TABLE income_expenses ADD CONSTRAINT PRIMARY KEY (id);

和指定的列数,这些列构成唯一标识行的键,并将该列包含在SELECT中。

代码语言:javascript
复制
//First column from a command will be the key
crs2.setKeyColumns(new int[]{1});
crs2.setCommand("SELECT id, amount, name, ondate FROM income_expense");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29674255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档