0
           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: 更新不可能な列に割り当てようとしています

4

1 に答える 1

2

Access データベースの 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();
于 2015-02-14T18:55:40.807 に答える