gpt4 book ai didi

java - 准备好的语句对java性能的影响

转载 作者:行者123 更新时间:2023-12-01 09:37:18 25 4
gpt4 key购买 nike

我知道,这个问题已经问过了。但我仍然不明白为什么我的准备语句没有影响执行时间。

Connection conn=null;
Statement stmt=null;

public Database(){
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager
.getConnection("jdbc:sqlite:***");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}

public void insert(String [] data){
try {
String query = "INSERT INTO tableName "
+ "VALUES ('"+data[0]+"',"+"'"+data[1]+"',"+Double.parseDouble(data[2])+","+
Double.parseDouble(data[3])+","+Double.parseDouble(data[4])+","+
Double.parseDouble(data[5])+")";

stmt =conn.createStatement();
stmt.executeUpdate(query);

} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}

首先,我尝试了这种方法来执行插入表达式,然后我了解到prepare语句对执行时间有很好的效果。然后我使用以下方法尝试了该程序:

Connection conn=null;
PreparedStatement preStmt=null;
private String queryTemplate = "insert into tableName values(?,?,?,?,?,?)";

public Database(){
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager
.getConnection("jdbc:sqlite:***");
preStmt = conn.prepareStatement(queryTemplate);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}

public void insert(String [] data){
try {
preStmt.setString(1,data[0]);
preStmt.setString(2,data[1]);
preStmt.setDouble(3,Double.parseDouble(data[2]));
preStmt.setDouble(4,Double.parseDouble(data[3]));
preStmt.setDouble(5,Double.parseDouble(data[4]));
preStmt.setDouble(6,Double.parseDouble(data[5]));

preStmt.addBatch();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}

public void ExecuteBatch()
{
try {
preStmt.executeBatch();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

顺便说一句,我正在使用 sqlite 数据库。我使用了executeBatch 和addBatch 方法来减少执行时间。但它仍然是一样的,甚至比第一个更糟糕。有人可以向我解释一下吗?谢谢:)

最佳答案

尝试切换到事务模式而不是自动提交模式,如下所示:

conn = DriverManager.getConnection("jdbc:sqlite:***");
// Set auto-commit to false which enable the transactional mode
conn.setAutoCommit(false);
...
// Explicitly commit statements to apply changes
conn.commit();

事实上,自动提交模式将在专用事务中执行每个插入请求并自动提交,当您有许多请求要执行时,这在 I/O 和性能方面会产生很大的成本,因为它会填满数据库的事务日志。

更多详情here

关于java - 准备好的语句对java性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38770818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com