假设我有一个程序,将记录插入java中ddatabase的mysql表中。
我不是逐行插入,而是按1000条记录的批插入。使用 ExecuteBatch
方法,它似乎不起作用,因为它仍然逐行插入。
代码(仅代码段):
public void readDataBase(String path,String word) throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager
.getConnection("jdbc:mysql://126.32.3.20/fulltext_ltat?"
+ "user=root&password=root");
String sql="insert IGNORE into fulltext_ltat.indextable values (default,?, ?) ";
preparedStatement = connect.prepareStatement(sql);
for(int i=0;i<1000;i++) {
preparedStatement.setString(1, path);
preparedStatement.setString(2, word);
preparedStatement.addBatch();
if (i % 1000 == 0) {
preparedStatement.executeBatch();
System.out.print("Add Thousand");
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
preparedStatement.close();
connect.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
代码:调用上述
public static void main(String[] args) throws Exception {
StopWatch stopwatch = new StopWatch();
stopwatch.start();
File folder = new File("D:\\PDF1");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles) {
if (file.isFile()) {
HashSet<String> uniqueWords = new HashSet<>();
String path = "D:\\PDF1\\" + file.getName();
try (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(" ");
for (String word : words) {
uniqueWords.add(word)
;
}
}
// System.out.println(uniqueWords);
}
} catch (IOException e) {
System.err.println("Exception while trying to read pdf document - " + e);
}
Object[] words = uniqueWords.toArray();
MysqlAccessIndex connection = new MysqlAccessIndex();
for(int i = 1 ; i <= words.length - 1 ; i++ ) {
connection.readDataBase(path, words[i].toString());
}
System.out.println("Completed");
}
}
我运行程序的那一刻 if statement
总是执行,而不是检查是否有1000条记录,然后只执行以插入到数据库。
我做错什么了吗?
2条答案
按热度按时间yfjy0ee71#
在配置属性url中添加:
allowMultiQueries=true
kb5ga3dv2#
i % 1000 == 0
什么时候是真的i==0
,因此只在循环的第一次迭代中执行批处理。您应该在循环之后执行批处理:
现在,如果您有10000条记录,并且希望每1000条执行一次批插入,则可以编写:
编辑:为了不插入相同的
word
多次向表传递数组到方法:改变
到
以及
到
最后,批插入循环将变成: