在使用SQL Server 导入和导出向导将Excel表格导入到数据库中的表格里,执行后报错如下
错误 0xc002f210: 准备 SQL 任务 1: 执行查询“TRUNCATE TABLE [dbo].[rs]
”失败,错误如下:“Cannot truncate table ‘dbo.rs’ because it is being referenced by a FOREIGN KEY constraint.”。失败的原因可能有: 查询本身有问题、未正确设置 “ResultSet” 属性、未正确设置参数或未正确建立连接。
经历多次尝试后,发现并不是参数设置不对,数据源类型不同。而是目标表设置了许多外键关系,将这些关系一一删除后,即可导入成功。
导入数据后,又重新将这些关系添加回来。保存的时候又报错,无法截断表 ‘某表’,因为该表正由 FOREIGN KEY 约束引用。
我的解决方法是将在创建或重新启用时检查现有改为否
这个类型支持前后滚动取得纪录next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行absolute(int n),以及移动到相对当前行的第几行relative(int n),要实现这样的ResultSet在创建Statement时用如下的方法。Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)
其中两个参数的意义是:
resultSetType是设置ResultSet对象的类型可滚动,或者是不可滚动。取值如下:
ResultSet.TYPE_FORWARD_ONLY只能向前滚动
ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。
resultSetConcurency是设置ResultSet对象能够修改的,取值如下:
ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
所以如果只是想要可以滚动的类型的Result只要把Statement如下赋值就行了。
Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,
ResultSet.CONCUR_READ_ONLY)
ResultSet rs = st.excuteQuery(sqlStr);
refreshRow()用数据库里最新的数据来刷新当前rowsetFetchDirection(int direction);设置此 ResultSet 对象中行的处理方向。初始值由生成此 ResultSet 对象的 Statement 对象确定。获取方向可以在任何时间更改。。
setFetchSize(int rows);为 JDBC 驱动程序设置此 ResultSet 对象需要更多行时应该从数据库获取的行数。如果指定的获取大小为零,则 JDBC 驱动程序忽略该值,随意对获取大小作出它自己的最佳猜测。默认值由创建结果集的 Statement 对象设置。获取大小可以在任何时间更改。
rowDeleted();获取是否已删除某行。删除的行可能在结果集中留下一个可见的“洞”。此方法可用于检测结果集中的洞。返回值取决于此 ResultSet 对象是否可以检测到删除。
注:对于 CONCUR_READ_ONLY 的结果集并发性,对 rowDeleted 方法的支持是可选的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)