JAVA项目中批量导入数据到数据库后,数据库出问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA项目中批量导入数据到数据库后,数据库出问题相关的知识,希望对你有一定的参考价值。

我用excel表批量导入学生信息到数据库,页面上能显示出导入的学生信息,但打开数据表查看学生信息,里面没显示内容,一会儿后,弹出对话框提示:[Microsoft][ODBC SQL Server Driver]超时已过期,点击“帮助”提示如下信息:
ODBC 错误:<0s>。
生成了 ODBC 错误。可能删除了与某个外键值相关的记录,或者违反了 CHECK 约束。

有关详细信息,请参见 ODBC 文档。

?1988-2000 Microsoft Corporation。保留所有权利。
ODBC 错误:<0s>。
生成了 ODBC 错误。可能删除了与某个外键值相关的记录,或者违反了 CHECK 约束。

有关详细信息,请参见 ODBC 文档。

?1988-2000 Microsoft Corporation。保留所有权利。
ODBC 错误:<0s>。
生成了 ODBC 错误。可能删除了与某个外键值相关的记录,或者违反了 CHECK 约束。

有关详细信息,请参见 ODBC 文档。

?1988-2000 Microsoft Corporation。保留所有权利。
ODBC错误:<OS>。生成了 ODBC 错误。可能删除了与某个外键值相关的记录,或者违反了 CHECK 约束。有关详细信息,请参见 ODBC 文档。?1988-2000 Microsoft Corporation。保留所有权利。
但我用“添加”功能直接添加一条学生信息到数据库,却能打开数据表,正常显示里面的内容。我以前用同样的excel表多次批量导入过学生信息到数据库,都没有这样的问题,昨天才出现这样的问题?求助

参考技术A 可能删除了与某个外键值相关的记录,或者违反了 CHECK 约束。
这里不是提示信息了,你表里是不是又和外键值相关联的其他表,你给删除了追问

我要是把表里又和外键值相关联的其他表给删除了,那添加一条记录应该也不行啊,只有批量导入不行啊

追答

那我也不清楚,你是不是批量的时候什么数据错了,CHECK 约束,你批量数据可能有数据不符合,比如说id长度,或者名称长度啊,类型什么的。

追问

不可能呀,以前都是用同样的excel里数据导入多次都行啊,克昨天再试了一下,就不行了啊

追答

那我也不清楚了,毕竟根据你的提示信息我也只知道这么多。

追问

大姐,能不能留下你的Q,我跟你细说,帮我解决啊

追答

批量导入,你找两条,或三天数据导入试试,不行的话,你加个群号吧,51108313,也许有人知道怎么解决

追问

群满了

追答

这个肯定没有满,38611421

追问

谢谢,不过还是没人能解决这个问题

追答

我也没办法了。。

参考技术B 将主外键关系全部删除试试。(建议在创建数据库时不要建关系,以后便更项目时不好处理)追问

那为什么直接添加一条记录就可以,而批量导入多条就不行啊

参考技术C 这样肯定不行追问

那要什么办啊

参考技术D / W3C / / DTD html 4.0过渡/ / EN”>追问

什么呀

Java调用BCP导入数据到数据库解决标识列ID问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://enetq.blog.51cto.com/479739/912093

前面的一篇博文讲解了调用bcp批量导出数据,对于批量导入数据则写的不怎么详细,本文再详细的介绍下一个使用技巧。对于批量导入,如果表中含有标识列,则默认会按照Sql Server 的处理方式来处理这个标识列,因此也就不是我们需要的ID值了,本文我们一起来探讨下解决方法。

①要导入的数据如下:

 

技术分享

 

红框框的则是标识列,自动增长。

但是,我们使用了

 

bcp sportSys.dbo.competitions in %1competitions.xls -c -T >>%2import.txt

②导入数据之后,发现数据出现了问题。

 

技术分享 

可以很清晰的发现,ID变了,由此带来的问题也就可想而知了,怎么解决这个问题呢?

有人提出了下面的这种做法:

 

SET IDENTITY_INSERT tb ON--把显式值插入表的标识列中。  INSERT INTO.....  SET IDENTITY_INSERT tb OFF--完成之后关闭选项

这条语句使用的时候,只能一张表一张表的导入,也就失去了批量导入的意义了。
而且直接写在我们的bat文件中还会提示

SET IDENTITY_INSERT sportSys.dbo.compet  itions on  环境变量 IDENTITY_INSERT sportSys.dbo.competitions 没有定义

经查阅文档发现,bcp已经为我们提供了一个非常好的解决方法,加上-E

这个参数,即可解决标识列的问题!

下面是-E 参数的详细介绍,

-E   Specifies that identity value or values in the imported data file are to be used for the identity column. If -E is not given, the identity values for this column in the data file being imported are ignored, and SQL Server automatically assigns unique values based on the seed and increment values specified during table creation.    If the data file does not contain values for the identity column in the table or view, use a format file to specify that the identity column in the table or view should be skipped when importing data; SQL Server automatically assigns unique values for the column. For more information, see DBCC CHECKIDENT (Transact-SQL).   The -E option has a special permissions requirement. For more information, see "Remarks" later in this topic.

 

如果bcp导入的时候,没有加入-E这个参数,则对于目标表中的标识列的处理则由Sql Server 自动的来处理,因此得出的ID值就不是我们想要的了。

本文出自 “幽灵柯南的技术blog” 博客,请务必保留此出处http://enetq.blog.51cto.com/479739/912093


以上是关于JAVA项目中批量导入数据到数据库后,数据库出问题的主要内容,如果未能解决你的问题,请参考以下文章

Java通过Mybatis实现批量插入数据到Oracle中

在PB中,把数据窗口导入到excel

influxdb批量导入

PHP Excel大批量导入崩溃怎么办?

批量Excel数据导入Oracle数据库 导入excel错误:外部表不是预期的格式 解决方案

怎样将xml批量导入excel