- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用批处理在数据库中插入大量记录。如果其中任何一个失败,我只会在更新计数数组中获得记录号(和最后一条异常消息)。
是否有可能得到所有错误的原因?
我正在使用 Java7 和 Mysql 连接器 (5.1.35)。我还将自动提交设置为 false。
最佳答案
是否有可能得到所有错误的原因?
是的,这是可能的。
BatchUpdateException is thrown when an error occurs during a batch update operation. It provides (among others) the update counts for all commands that were executed successfully during the batch update.
The BatchUpdateException class is a subclass of SQLException, which represents an exception that provides information on a database access error or other errors.
BatchUpdateException 应该被 last catch 子句 捕获,因为它是 SQLException
的子类。您可以在它到达 SQLException
之前手动捕获它。
下面是示例代码
import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class CatchExceptionExample {
private static final String HOST = "jdbc:mysql://localhost/";
private static final String DB = "db_test";
private static final String USER = "root";
private static final String PASSWORD = "bitnami";
public static void main(String[] args) {
String sqlQuery = "INSERT INTO `tbl` (`id`, `name`, `surname`, `age`) VALUES (?,?,?,?)";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(HOST+DB,USER,PASSWORD);
PreparedStatement ps = conn.prepareStatement(sqlQuery);
ps.setInt(1,6);
ps.setString(2, "Name1");
ps.setString(3, "Surname1");
ps.setInt(4, 1);
ps.addBatch();
ps.setInt(1,1);
ps.setString(2, "Name1");
ps.setString(3, "Surname1");
ps.setInt(4, 1);
ps.addBatch();
int[] affectedRecords = ps.executeBatch();
} catch (BatchUpdateException ex) {
int[] updateCount = ex.getUpdateCounts();
int count = 1;
for (int i : updateCount) {
if (i == Statement.EXECUTE_FAILED) {
System.out.println("Error on request " + count +": Execute failed");
} else {
System.out.println("Request " + count +": OK");
}
count++;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
有关详细级别的说明,请访问 How to resolve Batch Update Exception关联。也不要忘记阅读本文的更多关于 BatchUpdateException 部分。
关于java - 处理来自 BatchUpdateException 的多个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34474696/
下面的代码给出了一个BatchUpdateException,我不知道为什么。 public void createContactmoment(Document document) { try
当我由于违反唯一约束而出现 BatchUpdateException 时,是否有办法确定批插入中的哪条记录违反了规定?例如,假设我正在通过调用 PreparedStatement.executeBat
我有一个 java 程序,可以将文本文件中的数千行数据读取到数据库中。它使用语句批处理一次插入几千行。 如果任何行无法更新,我将继续尝试其余行,直到列表末尾。之后,我返回并检查哪些行失败,然后将这些行
这个问题可能很愚蠢,但我面临着这种情况: 我有一个每次用户发送请求时都会填充的表,我在插入的最后一行中的一个字段(日期)上使用日期。问题是,我插入的最后一行总是会尝试插入自身,因为它在我正在考虑的范围
我正在使用批处理在数据库中插入大量记录。如果其中任何一个失败,我只会在更新计数数组中获得记录号(和最后一条异常消息)。 是否有可能得到所有错误的原因? 我正在使用 Java7 和 Mysql 连接器
我从 stmt.executeBatch() 语句中得到这个 BatchUpdateException: BatchUpdateException: A resultset was created f
我有许多映射数据流在过去几个月中一直定期运行,其中一些从昨天开始出现故障。 数据流模式是 - Source: 2 Azure SQL DB tables, a lookup table in Syna
我对 Hybris 非常陌生,我正在开发 6.2 版本。经过一些尝试后,我决定创建一个新的空扩展来工作。因此,第一步是创建一个新文件夹,在其中导入平台的所有“准备好的”B2C 扩展。这样做之后我导入了
我正在使用 Postgres 9.3、Spring 和 Java。 对于来自 javadoc 的 BatchUpdateException: After a command in a batch up
我编写了一个 java 程序,它使用 jdbc 连接到 mysql 数据库。它将记录插入到 mysql。sql是这样的: INSERT INTO my_schema.my_table VALUE
我尝试使用 PreparedStatement.executeBatch() 执行批处理查询,并 try catch BatchUpdateException 中发生的任何异常。但我在调用 Batch
我有一个类似 的域 class BusinessOrganization { static hasMany = [organizationBusinessTypes:OrganizationB
我正在使用具有一对一关系的 Hibernate XML 映射构建一个应用程序。我的实体是 Auto 和 Targa。 这是我的 Java 类定义。 Targa.java public class Ta
我遇到了一些麻烦。 我正在尝试列出一些有关在 executeUpdate() 期间失败的查询的数据,并且我读到可以捕获 BatchUpdateException 然后获取 updateCount,它会
我有一个批量更新函数,不包含任何 GROUP_CONCAT() 调用; UPDATE product SET viewed = ? WHERE product_id = ? 如
一些遗留代码表现出奇怪的行为。我有一个 Hibernate 标准: Session session = em.unwrap(Session.class); Criteria crit = sessio
spark2.2 中使用 jdbc 驱动写入 TiDB 时出现此错误: java.sql.BatchUpdateException: transaction too large, len:300200
我正在尝试使用额外的列保存多对多关系,但我的代码运行不正常。我希望有人能帮助我 我的数据库是: CREATE TABLE MUSICISTA ( ID INTEGER UNSIGNED NOT N
我正在尝试使用 JdbcTemplate 将当前时间戳存储在 Oracle 数据库中。我试图在其中存储两列 timestamp ,但一列是 VARCHAR ,一列是 TIMESTAMP ,但是查看异常
我正在尝试从 MATLAB 写入 PostgreSQL 数据库表。我已经使用 JDBC 建立了连接并创建了表,但是当我尝试插入记录时出现 BatchUpdateException。 插入数据的 MAT
我是一名优秀的程序员,十分优秀!