程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

使用 CachedRowSet 插入行失败

发布于2022-01-17 22:11     阅读(1168)     评论(0)     点赞(28)     收藏(0)


我正在使用 CachedRowSetImpl,我可以从数据库中获取数据,但我无法插入。

这是代码:

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();
    }

}

它抛出异常:

线程“主”java.sql.SQLException 中的异常:在 NewClass.main(NewClass.java:32) 的 com.sun.rowset.CachedRowSetImpl.insertRow(CachedRowSetImpl.java:5462) 插入行失败

我试过 JdbcRowSetImpl 而不是 CachedRowSetImpl ,它工作正常

更新:我使用此代码来捕获有关异常的更多详细信息:

    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);
}

输出是:

SQL 状态:空

错误代码:0

消息:插入行失败


解决方案


我遇到了和你一样的问题,但是我把acceptChanges(cnnt)抛出异常的地方放在最后,如 API 所述。

……

cachedSet.moveToInsertRow();
cachedSet.updateInt(1,12);
cachedSet.updateString(2,"Joe");
cachedSet.updateString(3,"abcde");
cachedSet.insertRow();
cachedSet.moveToCurrentRow();
cachedSet.acceptChanges(cnnt);

......

如果我在没有最后一个的情况下运行它row(acceptChanges(cnnt)),则不会抛出任何异常,但不会更新数据库。

如果我用最后一个运行它,将会有一个和你一样的异常。我检查了,并acceptChanges()从 API 获得了文档:

SQLException - if the cursor is on the insert row 

我检查了以下文件insertRow()

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

也许你可以从中得到一些东西。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/376301/e34a18fad2b8bbbafdf1/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)