java - 遇到空行时停止在 Excel 中读取
问题描述
我目前有一个程序可以读取 Excel 文件并通过使用迭代器处理每个工作表中的数据,将每一行插入数据库。当我使用提供的 excel 文件构建和测试程序时,一切都完全按照我的预期工作。我将程序传递到我们的生产服务器,现在我们发现一个特定的文件导致程序抛出一个
SQLServerException: Violation of PRIMARY KEY constraint 'PK_V2Product'. Cannot insert duplicate key in object 'dbo.V2Product'. The duplicate key value is ().
据我了解,
重复键值为 ()
表示为主键设置的值是空字符串。这告诉我,迭代器已经传递了有形数据的行,并找到了其中包含空字符串值的行。除了简单/hacky之外,例如实现以下内容:
while(iterator.hasNext(){
//Iterator runs through, building the object
//String value = ""; //Primary Key, gets set in the workflow based on column name
...
if(value == null || value.equals("null") || value.equals("")){
continue;
}
...
//Would insert data at this point if the primary key field is not null
}
有什么方法可以确定工作表的其余部分是否可能包含列中包含空字符串的行并结束迭代?还是让迭代器在空字符串的行和行中运行它的过程,直到我们达到 .xlsx 可以拥有的最大行数是最好的选择?是否有可能创建一个计数器并实现一个条件,如果计数器的值达到 20,则认为工作表的其余部分为空并中断迭代器循环,而不会造成任何无意的副作用?
关于我们正在使用的 INSERT 过程的一些信息:
preparedStatement = connection.prepareStatement("SELECT * FROM Table WHERE PrimaryKey = ?", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
preparedStatement.setString(1, value);
ResultSet.TYPE_SCROLL_SENSITIVE、ResultSet.CONCUR_UPDATABLE
如果结果集返回为空,则允许我们更新现有记录或插入新记录 (resultSet.moveToInsertRow())。
解决方案
推荐阅读
- sql - 删除查询结果之外的所有内容
- c++ - 如何访问 CGAL 3D 三角剖分中的构面?
- python - 如何从 Cloud Bigtable 中仅读取某些列族?
- node.js - Node js docker远程调试chrome
- javascript - 如何在 Bootstrap 模式对话框(JS)中获取图像的高度
- facebook - 登录用户到 facebook 给定的电子邮件
- python - Pymongo 在尝试连接到 mongodb 时抛出“KeyError:'errmsg'”
- haskell - 无法理解来自非法元组列表的错误消息
- algorithm - Contextual-Bandit 方法:算法 1 LinUCB 与不相交的线性模型
- rest - 在 Web 服务器或应用程序服务器中托管 REST api