PrepareStatement:对SQL进行预编译,在数据库中形成“执行计划”,可以对SQL语句中的“变量参数“进行修改,这样可以减少数据库不必要的反复创建“执行计划”,
package dbcpool;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class PreDemo {
public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
String sql = "insert into animal values (?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
//更改SQL参数
ps.setInt(1, 6);
ps.setString(2, "James");
ps.setInt(3,24);
//执行“执行计划”,返回成功更新的行数
int n = ps.executeUpdate();
System.out.println(n);
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
}
Statement:使用比较僵硬,需要反复创建执行计划,浪费数据库开支,高并发使用数据库时造成数据库效率下降。
package jdbcconnection;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
Statement st = conn.createStatement();
String sql = "select * from animal";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id:"+id+",name:"+name+",age:"+age);
}
rs.close();
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (conn!=null) {
DBUtils.close(conn);
}
}
}
}