写法介绍
updateResult = statement.executeUpdate(sql);
if(updateResult !=-1 ){//建表成功,开始操作
sql = "INSERT INTO Test VALUE ('1170210017','YZY','22')";
updateResult = statement.executeUpdate(sql);
sql = "INSERT INTO Test VALUE ('1170210018','YY','21')";
updateResult = statement.executeUpdate(sql);
sql = "INSERT INTO Test VALUE ('1170210019','HC','20')";
updateResult = statement.executeUpdate(sql);
sql = "SELECT * FROM Test";
resultSet = statement.executeQuery(sql);
// executeQuery会返回结果的集合,否则返回空值
Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句
sql = "INSERT INTO TEST VALUE(?,?,?)";
preparedStatement = connection.prepareStatement(sql);//预编译
preparedStatement.setString(1,"1170210028");
preparedStatement.setString(2,"HL");
preparedStatement.setInt(3,45);
updateResult = preparedStatement.executeUpdate();
使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的命令,并且可以重用。
体现preparestatement优点的例子
statement:
for(int i =0 ;i < 5 ;i ++ ){
sql="insert into TEST(Tno,Tage) values('"+"11702100"+i+"',"+i+");";
//编译+执行
updateResult=statement.executeUpdate(sql);
}
statement执行批量处理时,执行一次sql语句就编译一次,效率低。
preparestatement
sql="insert into TEST(Tno,Tage) values(?,?)";
for(int i =0 ;i < 5 ;i ++ ){
//预编译
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,"11702200"+i);
preparedStatement.setInt(2,i);
//这里才是执行
updateResult = preparedStatement.executeUpdate();
if(updateResult!=-1){
System.out.println("插入成功"+i);
}
}
每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译
PrepareStatement的优点:
1.效率更高
随着数据的不断增大,PreparedStatement的效果是比Statement
的效果要好,
2.安全性好
PreparedStatement会进行预处理编译,在数据的安全性上PreparedStatement是可以防止Statement的sql注入导致的漏洞问题。
网友评论