当前位置: 首页 > 面试题库 >

net.ucanaccess.jdbc.UcanaccessSQLException:尝试分配给不可更新的列

彭博厚
2023-03-14
问题内容
           try{

            //taking input from user about how much balance
            Scanner input = new Scanner(System.in);
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            String url = "jdbc:ucanaccess://c://Bibek//Atmcard.accdb";
            System.out.print("\nConnecting to database...");
            con = DriverManager.getConnection(url);
            st = con.createStatement();
            System.out.println("\n Enter balance you want to withdraw:\n");


            balance = Double.parseDouble(input.nextLine());
            String sql = "select AccountBalance From Atm";
            result = st.executeQuery(sql);
                while(result.next()){
                    //assigning balanceFromDb to deduct and update in database
                    Double balanceFromDb = result.getDouble("AccountBalance");
                    balanceFromDb=balanceFromDb-balance;
                    result.updateDouble("AccountBalance", balanceFromDb);
                    result.updateRow();
                }



    }catch(Exception ex){
            System.err.println(ex.toString());
    }

输出:连接到数据库…输入要提取的余额:

20

net.ucanaccess.jdbc.UcanaccessSQLException:尝试分配给不可更新的列


问题答案:

检查访问数据库中的Atm对象,并确保它是表而不是查询。还要检查AccountBalance的数据类型,并确保它是可编辑字段。如果它是自动递增或计算的,则将无法更新。

编辑:看起来您必须声明它为可更新的游标。这是ucanacces上源于伪造的示例http://ucanaccess.sourceforge.net/site.html
使用可更新的ResultSet

PreparedStatement ps =     super.ucanaccess.prepareStatement( "SELECT *  FROM T1", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE, ResultSet.CLOSE_CURSORS_AT_COMMIT);
rs = ps.executeQuery();
rs.next(); 
rs.updateString(2, "show must go off"); 
rs.updateRow();


 类似资料:
  • 我正在尝试从Ansible 2.9升级。2至2.10。我知道当前的ansible需要删除,我相信我在这方面取得了成功。文档中有几个不同的命令行(使用pip安装Ansible)。那个似乎没有出错的人使用了python3,并产生了。。。 但“which ansible”不产生输出,“ansible--version”命令未找到。 使用原始的python(2.7.16)产生... 但仍然没有答案。你知道

  • 我在尝试更新我的Eclipse时出错! 以下是在“安装下载0”期间发生内部错误的错误日志 Java . lang . illegalargumentexception:比较法违反了它的通用契约!at Java . util . comparabletimsort . merge hi(comparabletimsort . Java:835)at Java . util . comparablet

  • 有时,我的应用程序在启动时会随机出现故障,它会在应用程序类中崩溃,用户无法再次打开应用程序,直到他们进入设置并清除应用程序数据 “DiskbasedBache”试图分配超过1GB的内存,原因并不明显 我怎么才能让这一切不发生?这似乎是Volley的一个问题,或者是一个基于自定义磁盘的缓存的问题,但是我没有立即看到(从堆栈跟踪中)如何‘清除’这个缓存,或者做一个条件检查或者处理这个异常 欣赏洞察力

  • 本文向大家介绍解读golang plugin热更新尝试,包括了解读golang plugin热更新尝试的使用技巧和注意事项,需要的朋友参考一下 当我们在使用php开发的时候,基本不需要关心热更新这件事的,因为PHP本身已经帮我处理好了,只需要提交代码,PHP重新解释一遍即可。而go则是静态语言,编译后得到的是直接被机器执行的,所有代码已经翻译成相对应的机器指令并且在运行时已经加载到内存,不能动态更

  • 我有一个模型 视图定位对象: 然后它会做出一些改变(或者可能不会) 然后它尝试保存任何更改: 这里是Django尝试插入另一行而不是更新的地方,导致了一个DB错误 解决方案中有一种类似的问题: 一旦我将primary_key字段设置为自动字段,问题就消失了。 但是,我的主键已经是一个自动字段。 所以我用调试器逐步浏览了django代码,并在文件中资助了这个: 似乎如果没有更改(因此更新不做任何事情

  • 我有一个JTabbedPane(比如myTabPane),有一个选项卡(为了清晰起见,我们只取一个选项卡)。在创建JTabbedPane时,我在这个选项卡中添加了一个JPanel(比如panel_A)。我在这个JPanel上有一个按钮。这个选项卡完美地显示了我的JPanel,上面有按钮。到目前为止一切都很好。 我已经在按钮上定义了一个侦听器,该侦听器创建了另一个扩展JPanel的类的实例(例如pa