我知道,这个问题已经问过了。但我仍然没有明白为什么我的准备声明不会影响执行时间。在java中编写语句对性能的影响
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);
}
}
首先,这个方法我试过来执行插入表情,然后我学到准备语句上的执行时间的好效果。然后,我用以下方法尝试了计划:
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数据库btw.I使用则ExecuteBatch和addBatch方法来减少执行时间。但它仍然是一样的,甚至比第一个更糟糕。有人可以给我解释一下吗?谢谢:)
[如果要执行Statement对象**多次**,它通常降低了使用PreparedStatement对象,而不是执行时间(http://docs.oracle.com/javase /tutorial/jdbc/basics/prepared.html)。 –