我在使用CachedRowSet时遇到错误

时间:2015-09-27 20:29:33

标签: java sql-server jdbc cachedrowset

我发现错误,我无法弄清楚为什么会发生这种情况。我通过互联网搜索,但我没有找到任何结论。你能帮我吗 ?我做错了什么?如何编写此代码以便不再出现此问题?

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) 

1 个答案:

答案 0 :(得分:0)

当我使用CachedRowSet管理从MySql数据库检索的数据时,我也遇到了类似的问题。 由此我知道可能出现此问题的两种情况: - (1)当我们更新数据库表中的主键字段时,特别是当插入相同的值时     已存在于表中的某些原始数据中,因为我们无法插入相同的主键倍数     在表中的时间。 (2)当模式不匹配时,正在修改的字段大小为10 char,我们正在尝试     写11~20个char值

你能查看以上几点吗?如果你发现了其他一些问题请分享,因为它可能是 您尝试保存的数据与根据数据库表可接受的数据之间的任何类似的混淆

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