我在使用缓存行集时遇到错误



我有一个错误,我不能弄清楚为什么会发生这种情况。我在网上搜索了,但没有找到任何结论。你能帮我一下吗?我做错了什么?应该如何编写这段代码,使这个问题不再发生?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.RowSetWriter;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetProvider;

public class Testing {

    void example() {
        try {
              Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost:1433;databaseName=Movies; integratedSecurity=true";
            Connection connect = DriverManager.getConnection(url);
            Statement s = connect.createStatement();
            ResultSet rs = s.executeQuery("select filmname from tblFilm where filmRuntimeMinutes <100");
            CachedRowSet cached = RowSetProvider.newFactory().createCachedRowSet();
            cached.populate(rs); // populam cached row set cu datele obtinute din ResultSet
            cached.moveToInsertRow(); //mutam cursorul pentru a permite modificari
            cached.updateString(1, "Ionut Asaftei"); //aplicam modificarea pe coloana dorita
            cached.insertRow(); //are ca efect introducerea noii inregistrari doar in row set (nu se conecteaza inca la baza de date
            cached.moveToCurrentRow(); // muta cursorul pe ultima pozitie retinuta /amintita / curenta
            cached.setTableName("tblFilm");
            cached.acceptChanges(connect); //modificarile sunt salvate pe server


        while(cached.next()) {
            System.out.println(cached.getString(1));
        }

    }catch(ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }

    }


    public static void main(String[] args) {
                Testing obj = new Testing();
                obj.example();
    }
    }
异常:

javax.sql.rowset.spi.SyncProviderException: 1 conflicts while synchronizing
at com.sun.rowset.internal.CachedRowSetWriter.writeData(Unknown Source)
at com.sun.rowset.CachedRowSetImpl.acceptChanges(Unknown Source)
at com.sun.rowset.CachedRowSetImpl.acceptChanges(Unknown Source)
at Testing.example(Testing.java:31) at Testing.main(Testing.java:55) 

当我使用CachedRowSet来管理从MySql数据库检索的数据时,我也面临着类似的问题。由此我知道有两种情况会出现这个问题(1)当我们更新数据库表中的主键字段时,特别是当我们插入相同的值时在原始表中已经存在,因为我们不能插入相同的主键多个时间在表中。(2)当模式不匹配时,如正在修改的字段大小为10字符,我们正在尝试写入11~20个字符值

你能检查一下以上几点吗?如果你发现其他问题,请分享,因为它可能是您试图保存的数据与数据库表

中可接受的数据之间的任何类似冲突

如果您仍然遇到问题,请描述您的tblFilm数据库表

最新更新