我有一个程序,从一个pdf文件中提取一些记录,然后将这些记录插入mysql中的一个表中。
我主要关心的一个问题是,在插入到表的过程中,在任何情况下是否有错误。假设我将一个文件中的1000条记录插入到表中,中途发生了一些不好的事情。那么它是自动回滚还是我需要包含一个 "Begin Transaction and Commit Transaction"
声明?
如果是这样,如何在java内部启动回滚?我正在考虑编写一个回滚函数来实现这一点。
我的代码:
public void index(String path) throws Exception {
PDDocument document = PDDocument.load(new File(path));
if (!document.isEncrypted()) {
PDFTextStripper tStripper = new PDFTextStripper();
String pdfFileInText = tStripper.getText(document);
String lines[] = pdfFileInText.split("\\r?\\n");
for (String line : lines) {
String[] words = line.split(" ");
String sql="insert IGNORE into test.indextable values (?,?)";
// con.connect().setAutoCommit(false);
preparedStatement = con.connect().prepareStatement(sql);
int i=0;
for (String word : words) {
// check if one or more special characters at end of string then remove OR
// check special characters in beginning of the string then remove
// insert every word directly to table db
word=word.replaceAll("([\\W]+$)|(^[\\W]+)", "");
preparedStatement.setString(1, path);
preparedStatement.setString(2, word);
preparedStatement.addBatch();
i++;
if (i % 1000 == 0) {
preparedStatement.executeBatch();
System.out.print("Add Thousand");
}
}
if (i > 0) {
preparedStatement.executeBatch();
System.out.print("Add Remaining");
}
}
}
// con.connect().commit();
preparedStatement.close();
System.out.println("Successfully commited changes to the database!");
}
上面的这个函数将被另一个要执行的函数调用,而try-and-catch异常在调用者函数中。
我的回滚功能:
// function to undo entries in inverted file on error indexing
public void rollbackEntries() throws Exception {
con.connect().rollback();
System.out.println("Successfully rolled back changes from the database!");
}
我很感激你的建议。
1条答案
按热度按时间mwyxok5s1#
我不知道您使用的是什么库,所以我只想猜测异常名称和类型。如果您查看api,您可以查看哪些函数抛出了哪些异常。
当然还有一些例外,你需要说明,我没有补充。
编辑:您的具体问题可以在这个链接找到