首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CachedRowSet插入行失败

使用CachedRowSet插入行失败
EN

Stack Overflow用户
提问于 2012-07-21 21:35:58
回答 2查看 2.8K关注 0票数 2

我正在使用CachedRowSetImpl,我可以从数据库获取数据,但我不能插入。

这是“守则”:

代码语言:javascript
复制
public class NewClass {

    static final String DATABASE_URL = "jdbc:derby://localhost:1527/TaskDB;create=true";
    static final String USERNAME = "user";
    static final String PASSWORD = "user";

    public static void main (String [] agr) throws SQLException
    {
        CachedRowSetImpl rs = new CachedRowSetImpl();
        rs.setUrl(DATABASE_URL);
        rs.setUsername(USERNAME);
        rs.setPassword(PASSWORD);

        rs.setCommand("SELECT * FROM TASKTABLE");
        rs.execute();

        rs.moveToInsertRow();
        rs.updateString("Column_Name","DataString");

        rs.insertRow();
        rs.moveToCurrentRow();
        rs.updateRow();
    }

}

它抛出异常:

线程"main“java.sql.SQLException中的异常:在NewClass.main at NewClass.main(NewClass.java:32)的插入行上失败

我试过JdbcRowSetImpl而不是CachedRowSetImpl,它工作得很好

更新:我使用了这段代码来获取有关异常的更多细节:

代码语言:javascript
复制
    catch(SQLException e) {
     do {
        System.out.println("SQLState:" + e.getSQLState());
        System.out.println("Error Code:" + e.getErrorCode());
        System.out.println("Message:" + e.getMessage());
        Throwable t = e.getCause();
        while(t != null) {
            System.out.println("Cause:" + t);
            t = t.getCause();
        }
        e = e.getNextException();
    } while (e != null);
}

产出如下:

SQLState:null 错误代码:0 消息:插入行失败

EN

回答 2

Stack Overflow用户

发布于 2012-08-30 15:43:23

我遇到了与您相同的问题,但我将acceptChanges(cnnt)放在异常抛出的末尾,正如API所述。

……

代码语言:javascript
复制
cachedSet.moveToInsertRow();
cachedSet.updateInt(1,12);
cachedSet.updateString(2,"Joe");
cachedSet.updateString(3,"abcde");
cachedSet.insertRow();
cachedSet.moveToCurrentRow();
cachedSet.acceptChanges(cnnt);

.

如果我在没有上一次row(acceptChanges(cnnt))的情况下运行它,则不会抛出任何异常,但不会更新DB。

如果我用最后一个运行它,就会有一个与您得到的一样的例外。我检查了一下,并从API获得了acceptChanges()文档:

代码语言:javascript
复制
SQLException - if the cursor is on the insert row 

我查了一下insertRow()的文件

SQLException -如果发生数据库访问错误;结果集并发性为CONCUR_READ_ONLY,则在关闭的结果集上调用此方法,如果游标不在插入行时调用此方法,或者如果插入行中的所有非空列都已被赋予非空值,则调用此方法。

也许你能从中得到点什么。

票数 2
EN

Stack Overflow用户

发布于 2012-08-16 00:38:27

您需要调用rs.acceptChanges();而不是rs.updateRow();

尝试用以下方法替换rs.updateRow():

代码语言:javascript
复制
try{
   jrs.acceptChanges();
}catch(SyncProviderException spe){
  //Conflict handling code.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11596022

复制
相关文章

相似问题

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