Statement和PreparedStatement的差异huabian - 千亿集团

Statement和PreparedStatement的差异huabian

2018-09-26 10:34:53 | 作者: 允晨 | 标签: 数据库,参数,句子 | 浏览: 7791

[size=medium]PreparedStatement从Statement承继而来。

同构sql:sql句子根本相同,仅仅详细参数数值不同。

异构sql:sql句子彻底不相同。

Statement缺乏:

1. 功率比较低 2. 对字段类型的支撑比较差 3. 语法意义不明晰(结构不清楚)。

因为编译不需要参数,PreparedStatement能够运用“?”来代替sql句子中的某些参数,它先将不带参数的sql句子发送到数据库,进行预编译,然后PreparedStatement会再将设置好的参数发送给数据库。

在运用PreparedStatement设置相应参数时,要指明参数的方位和类型,以及给出参数的详细值,依据不同的参数类型运用不同的setXXX(参数的方位,参数值)来设置参数。

如:String sql=”update student set name=? where id=4;”

//其间的?代表占位符,在这里并没有设置详细值。

PreparedStatement pstm=con.prepareStatement(sql);

// sql句子现已发送到数据库去编译了,即预编译。

pstm.setXXX(参数的方位,参数的值)

//把参数值存放在PreparedStatement目标中。

Pstm.executeUpdate();

// 因为现已预编译过,因而不需要再传入sql句子,就能够直接履行。[/size]


Statement代码如下:
package com.ambow.day19.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
//注:当履行多刺进和多修改时能够运用批量处理addBatch,executeBatch;
public class JDBCStatementTest {
 public static void main(String args[]){
 Connection con = null;
 Statement stm = null;
 ResultSet rs = null;
 try {
 //1.加载JDBC驱动和衔接数据库
 con=JDBCConAndClo.getConnectionBao();
 System.out.println("con="+con);
// //*用Statement向数据库刺进数据:
 // String sql1="insert into student values(12,wang,java,55)";
 // String sql2="insert into student values(13,wang,java,95)";
 // String sql3="insert into student values(14,wadedng,java,45)";
// stm = con.createStatement();
// stm.executeUpdate(sql1);
// stm.executeUpdate(sql2);
// stm.executeUpdate(sql3);
// System.out.println("刺进成功!");
 //*用Statement从数据库中删去数据:
 String sql11="delete from student where id=1";
 String sql12="delete from student where id=2";
 String sql13="delete from student where id=3";
 stm = con.createStatement();
 stm.executeUpdate(sql11);
 stm.executeUpdate(sql12);
 stm.executeUpdate(sql13);
 System.out.println("删去成功!");
 //*用Statement从数据库查询数据:
 //2. 履行sql句子:
 String sql = "select * from student";
 // 创立一个statement(发送sql)
 stm = con.createStatement();
 // 履行查询sql句子
 rs = stm.executeQuery(sql);
 // 3.获取sql成果集:
 while(rs.next()){
 System.out.print(rs.getString("id")+" ");
 System.out.print(rs.getString("name")+" ");
 System.out.print(rs.getString("course")+" ");
 System.out.println(rs.getString("score"));
 } catch (SQLException e) {
 e.printStackTrace();
 } finally {
 //4.封闭数据库,并开释资源:
 JDBCConAndClo.closeResultSet(rs);
 JDBCConAndClo.closeStatement(stm);
 JDBCConAndClo.closeConnection(con);
PreparedStatement代码如下:
package com.ambow.day19.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
//注:当履行多刺进和多修改时能够运用批量处理addBatch,executeBatch;
public class JDBCPreparedStatementTest {
 public static void main(String args[]){
 Connection con=null;
 PreparedStatement pstm=null;
 ResultSet rs=null;
 try {
 con=JDBCConAndClo.getConnectionBao();
 //*用PreparedStatement向数据库中刺进数据;
 //String sql="insert into student values(10,李四,高数,90)";
 String sql="insert into student values(?,?,?,?)";
 //1.先创立PreparedStatement句子(发送slq恳求):
 pstm=con.prepareStatement(sql);
 //2.在设置sql句子:
 pstm.setInt(1,11);
 pstm.setString(2,"wangqinqin");
 pstm.setString(3, "hibernate");
 pstm.setInt(4, 85);
 //3.再履行sql句子:
 pstm.executeUpdate();
 System.out.println("刺进成功!");
 //*用PreparedStatement从数据库中删去数据;
 String sql2="delete from student where id=?";
 pstm=con.prepareStatement(sql2);
 pstm.setInt(1,5);
 pstm.executeUpdate();
 System.out.println("删去成功!");
 //*用PreparedStatement从数据库中查询出数据;
 String sql1="select * from student where id=?";
 pstm=con.prepareStatement(sql1);
 pstm.setInt(1,8);
 rs=pstm.executeQuery();
 System.out.println("查询成果为:");
 //循环获得成果;
 while(rs.next()){
 System.out.print(rs.getString("id")+" ");
 System.out.print(rs.getString("name")+" ");
 System.out.print(rs.getString("course")+" ");
 System.out.println(rs.getString("score"));
 } catch (SQLException e) {
 e.printStackTrace();
 }finally{
 JDBCConAndClo.closeResultSet(rs);
 JDBCConAndClo.closePreparedStatement(pstm);
 JDBCConAndClo.closeConnection(con);
其间衔接和封闭数据库现已封装到另一个包JDBCConAndClo类中:
package com.ambow.day19.jdbc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCConAndClo {
 public static void main(String args[]) {
 JDBCConAndClo jc = new JDBCConAndClo();
 jc.getConnectionBao();
 //加载JDBC驱动程序和衔接数据库;
 public static Connection getConnectionBao() {
 Connection con = null;
 String URL = "jdbc:oracle:thin:@localhost:1521:ambow";
 String user = "system";
 String password = "wqq123";
 try {
 Class.forName("oracle.jdbc.driver.OracleDriver");
 con = DriverManager.getConnection(URL, user, password);
 if (!con.isClosed()) {
 System.out.println("衔接数据库成功!");
 } catch (ClassNotFoundException e) {
 e.printStackTrace();
 } catch (SQLException e) {
 e.printStackTrace();
 System.out.println("con=" + con);
 return con;
 //封闭ResultSet
 public static void closeResultSet(ResultSet rs) {
 if (rs != null) {
 try {
 rs.close();
 rs = null;
 } catch (SQLException e) {
 e.printStackTrace();
 //封闭Statement
 public static void closeStatement(Statement stm) {
 if (stm != null) {
 try {
 stm.close();
 stm = null;
 } catch (SQLException e) {
 e.printStackTrace();
 //封闭PreparedStatement
 public static void closePreparedStatement(PreparedStatement pstm) {
 if (pstm != null) {
 try {
 pstm.close();
 pstm = null;
 } catch (SQLException e) {
 e.printStackTrace();
 //封闭Connection
 public static void closeConnection(Connection con) {
 if (con != null) {
 try {
 con.close();
 con = null;
 } catch (SQLException e) {
 e.printStackTrace();
 con = null;
}
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    按要求写sql句子itjob

    句子,学员,课程
  • 2

    检查数据库的SQL快报

    检查,数据库,检查表
  • 3

    DB2 备份和康复huabian

    康复,备份,数据库
  • 4

    运用MySQL头条

    运用,问题,效劳
  • 5
  • 6

    DATA PUMPfenghuang

    简略,指令,数据
  • 7

    Oracle Dimension 下alibaba

    邮编,区域,月度
  • 8

    Oracle失望锁和达观锁ITeyecsdn

    数据,时分,数据库
  • 9

    start with 用法ITeyeitjob

    子句,末梢,树形
  • 10

    mysql 根本指令ITeye头条

    用户,权限,体系