JDBC之PreparedStatement类中预编译的综合应用解析

预编译的优点
1、
PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程。

2、使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。

3、statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理

4、PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。这种转换也带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出它预编译的优越性。

5、PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。

预编译的核心代码


代码如下:

//预编译方式构建SQL查询:
String sql = "select * from student where year(birthday) between ? and ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "1987");
ps.setString(2, "1990");
rs = ps.executeQuery();

预编译的简单范例
以下方法的第一个参数是一个SQL 语句,第二三个参数是需要查询的范围。


代码如下:

/**PreparedStatement 预编译之查询栏目的范围 */
 public ResultSet StartQuery(String sql,String s1, String s2) {
  getConnection();
  try {
   pStatement = connection.prepareStatement(sql);
   pStatement.setString(1, s1);
   pStatement.setString(2, s2);
   rSet = pStatement.executeQuery();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return rSet;
 }

应用


代码如下:

System.out.println("生日范围查询:");
  ResultSet resultSet = jDemo1.StartQuery("select * from t_userr where year(birthdate) between ? and ?","1992","1992");
  jDemo1.AllResult(resultSet);

预编译的拓展范例一(SQL查询)
以下,我们对上面的方法进行拓展,使之能适应更宽泛的情况。
第一个参数是SQL语句,第二个参数是查询的一个参数列表。(一数组形式存放)


代码如下:

/** PreparedStatement 预编译之查询拓展版 */
 public ResultSet StartQueryLook(String sql,Object[] s) {
  getConnection();
  try {
   pStatement = connection.prepareStatement(sql);
   for (int i = 0; i < s.length; i++) {
    pStatement.setObject(i+1, s[i]);
   }
   rSet = pStatement.executeQuery();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return rSet;
 }

应用


代码如下:

//预编译之查询拓展版应用1
  System.out.println("生日范围查询:");
  String[] s1 = {"1992","1992"};
  ResultSet resultSet = jDemo1.StartQueryLook("select * from t_userr where year(birthdate) between ? and ?",s1);
  jDemo1.AllResult(resultSet);
  //预编译之查询拓展版应用2
  System.out.println("ID范围查询:");
  String[] s2 = {"100","200"};
  ResultSet resultSet2 = jDemo1.StartQueryLook("select * from t_userr where id between ? and ?",s2);
  jDemo1.AllResult(resultSet2);

预编译的拓展范例二(SQL增添、删除、修改)


代码如下:

/** PreparedStatement 预编译之增删改拓展版 */
 public int StartQueryAll(String sql,Object[] objArr) {
  int count = 0;
  getConnection();
  try {
   pStatement = connection.prepareStatement(sql);
   if(objArr!=null && objArr.length>0) {
    for (int i = 0; i < objArr.length; i++) {
     pStatement.setObject(i+1, objArr[i]);
    }
   }
   count = pStatement.executeUpdate();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   close();
  }
  return count;
 }

应用


代码如下:

//预编译之增删改拓展版:批量增加
  for (int i = 0; i < 10; i++) {
   Object[] s3 = {10,10};
   jDemo1.StartQueryAll("insert into jdbctest(username,password) values(?,?)",s3);
  }
  //预编译之增删改拓展版:批量删除
  System.out.println("删除多条:");
  jDemo1.StartQueryAll("delete from t_userr where id between ? and ?",new Object[]{"1010","1030"});

(0)

相关推荐

  • 解析jdbc处理oracle的clob字段的详解

    import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.Reader;import java.sql.Clob;import java.sql.Connection;import java.sql.ResultSet;

  • JDBC数据库的使用操作总结

    JDBC是一组能够执行SQL语句的API 由于传统的数据库操作方式需要程序员掌握各个不同的数据库的API,极其不便 因此java定义了JDBC这一标准的接口和类,为程序员操作数据库提供了统一的方式 JDBC的操作方式比较单一,由五个流程组成: 1.通过数据库厂商提供的JDBC类库向DriverManager注册数据库驱动 2.使用DriverManager提供的getConnection()方法连接到数据库 3.通过数据库的连接对象的createStatement方法建立SQL语句对象 4.执行

  • JDBC连接集群数据库的方法

    在连接数据库的url地址有点不一样 复制代码 代码如下: jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IP1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=IP2)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=服务名))) url=jdbc:oracle:thin:@(DESCRIPTIO

  • 基于Java回顾之JDBC的使用详解

    尽管在实际开发过程中,我们一般使用ORM框架来代替传统的JDBC,例如Hibernate或者iBatis,但JDBC是Java用来实现数据访问的基础,掌握它对于我们理解Java的数据操作流程很有帮助. JDBC的全称是Java Database Connectivity. JDBC对数据库进行操作的流程:•连接数据库•发送数据请求,即传统的CRUD指令•返回操作结果集JDBC中常用的对象包括:•ConnectionManager•Connection•Statement•CallableStat

  • jdbc调用mysql存储过程实现代码

    1. 创建存储过程 建立一个MySQL的存储过程 add_pro 复制代码 代码如下: delimiter // drop procedure add_pro // create procedure add_pro(a int , b int , out sum int ) begin set sum = a * b; end; // 2. 调用存储过程 复制代码 代码如下: package com.zhanggaosong; import java.sql.CallableStatement;

  • java使用jdbc链接Oracle示例类分享

    复制代码 代码如下: public class OracleJdbcTest   {       String driverClass = "oracle.jdbc.driver.OracleDriver"; Connection con; public void init(FileInputStream fs) throws ClassNotFoundException, SQLException, FileNotFoundException, IOException       {

  • 常用数据库的驱动程序及JDBC URL分享

    常用数据库的驱动程序及 JDBC URL: Oracle 数据库 : 驱动程序包名: ojdbc14.jar 驱动类的名字: oracle.jdbc.driver.OracleDriver JDBC URL : jdbc:oracle:thin:@ dbip:port:databasename 说明:驱动程序包名有可能会变 JDBC URL 中黑色字体部分必须原封不动的保留,为该驱动识别的 URL 格式.红色字体部分需要根据数据库的安装情况填写.其中各个部分含义如下: dbip – 为数据库服务

  • jdbc操作数据库的基本流程详解

    所有的JDBC应用程序都具有下面的基本流程: 1.加载数据库驱动并建立到数据库的连接. 2.执行SQL语句. 3.处理结果. 4.从数据库断开连接释放资源.下面我们就来仔细看一看每一个步骤:其实按照上面所说每个阶段都可得单独拿出来写成一个独立的类方法文件.共别的应用来调用.1.加载数据库驱动并建立到数据库的连接: 复制代码 代码如下: String driverName="com.mysql.jdbc.Driver";  String connectiionString="j

  • jdbc中class.forname的作用

    使用JDBC时,我们都会很自然得使用下列语句: 复制代码 代码如下: Class.forName("com.mysql.jdbc.Driver");   String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";   String user = "";   String psw = "";   Connectio

  • 基于jdbc处理Clob的使用介绍

    保存clob字段,可以像这样: Clob clob=con.createClob();  clob.setString(1, new String(lineWKT));  pre.setClob(1, clob); 读取clob 可以像这样: while(rs.next()){   Clob c=rs.getClob("WKT");   InputStream is=c.getAsciiStream();   response=IOUtils.toString(is);   is.cl

  • 如何在Eclipse中设置Oracle的JDBC

    第一步:找到jdbc驱动我用的oracle自带的,ORACLE_HOME]\jdbc\lib\ 下面有各种jdbc,一定要注意兼容问题,具体看第二步,分别用哪个文件. 第二步:把驱动的路径加在环境变量classpath内- Add [ORACLE_HOME]\jdbc\lib\classes111.zip and[ORACLE_HOME]\jdbc\lib\nls_charset11.zip to your CLASSPATH.(Add classes12.zip and nls_charset

  • 经常使用的JDBC连接数据库方式

    一.JDBC连接DB2 复制代码 代码如下: Class.forName("Com.ibm.db2.jdbc.net.DB2Driver"); String url="jdbc:db2://dburl:port/DBname" cn = DriverManager.getConnection( url, sUsr, sPwd ); 二.JDBC连接Microsoft SQLServer(microsoft) 复制代码 代码如下: Class.forName( &qu

  • 深入JDBC sqlserver连接写法的详解

    SQL Server 2000 复制代码 代码如下: String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";String dbURL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sample"; SQL Server 2005和SQL Server 2008 复制代码 代码如下: String driverName

  • JDBC连接Access数据库的几种方式介绍

    接下来总结一下常用的几种连接方式. 例如有如下的Access数据库student,表basic,以及6条记录,现在通过几种方式在Jsp中将他们的数据显示出来.如图所示: 对于几种连接Access数据库的方式,基本上都是基于JDBC-ODBC方式的,当然也有纯JDBC驱动的方式.这里我暂时就不说了.对于这几种方式,除了取得连接之处不同外,其他的代码都是一样的.所以这里先写出取得连接的几种方式,然后再用完整的代码进行显示. 方式一:通过JDBC-ODBC方式桥连直接连接: 1.对于这种方式,首先要建

  • 解析使用jdbc,hibernate处理clob/blob字段的详解

    (1)不同数据库中对应clob,blob的类型:mysql中 : clob对应text  blob对应blobdb2/oracle中 clob对应clob blob对应blob (2)domain中对应类型:clob 对应 String   blob 对应 byte[]clob 对庆 java.sql.Clob blob 对应 java.sql.Blob (3)hibernate配置文件中对应类型:clob > clob   blob > binay 也可以直接使用数据库提供类型,例如:ora

  • jdbc连接数据库步骤深刻分析

    创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现. 例如: 复制代码 代码如下: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ Sys

  • 浅析JAVA常用JDBC连接数据库的方法总结

    一.JDBC连接DB2 复制代码 代码如下: Class.forName("Com.ibm.db2.jdbc.net.DB2Driver");   String url="jdbc:db2://dburl:port/DBname"   cn = DriverManager.getConnection( url, sUsr, sPwd );  Class.forName("Com.ibm.db2.jdbc.net.DB2Driver"); Stri

  • Java使用JDBC连接Oracle_MSSQL实例代码

    一.Statement 复制代码 代码如下: import java.sql.*; public class TestJDBC { public static void main(String[] args) {  Connection oracle_conn = null;  Statement oracle_stmt = null;  ResultSet oracle_rs = null; Connection mssql_conn = null;  Statement mssql_stmt

随机推荐