目录

  1/2/3  Statement 和 Preparedstatement 的区别

  4 读取properties配置文件

  5 数据库连接池

  6 利用数据库连接池连接数据库

 

1 使用Statement执行含有动态信息的SQL语句时有几个不足:

  1.1 由于需要将动态数据拼接到SQL语句中,这导致程序复杂度高,容易出错
  1.2 拼接的数据若含有SQL语法内容就会导致拼接后的SQL语法含义改变而出现SQL注入攻击
  1.3 当大批量执行语义相同,但是含有动态数据的SQL时效率很差

 

2 使用Statement执行SQL语句不好的原因

  2.1 当执行一条SQL语句发送到数据库时,数据库先将该SQL解析并生成一个执行计划(这个过程会消耗资源和性能),如果多次执行一样的SQL语句,数据库会重用执行计划,但是若多次执行语义相同但是含有动态数据的SQL时,数据库会生成不同的执行计划,严重影响数据库的开销
  2.2 例如

    执行 SELECT * FROM userifo_fury 生成一个执行计划再次执行SELECT * FROM userifo_fury 就会重用上面的执行计划(因为这是静态的SQL语句 

    但是,执行INSERT INTO userifo VALUES(1, 'JACK','122314','141234@QQ.COM','FURY',15600) ) 生成一个执行计划,再执行执行INSERT INTO userifo VALUES(2, 'rose','122314','141234@QQ.COM','FURY',15600)由于内容不同,会再次生成另外一个执行计划,若执行1000次上述情况的INSERT,数据库会产生1000个执行计划,这样就严重影响了数据库的效率
    因此,Statement只适合执行静态的SQL语句,不适合执行动态的SQL语句

    

3 利用PreparedStatement代替Statement

  编写简单

  没有SQL注入问题

  批量执行语义相同的SQL语句会重用执行计划

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训 user表对应的实体类

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训 使用预编译Statement的实例

 

利用Properties对象读取properties配置文件中的信息

  4.1 Properties继承了Hashtable类,Properties对象也是使用键值对的方式来保存数据,但是Properties对象的键和值都是字符串类型

    class Properties extends Hashtable<Object,Object>

  4.2 Properties 类中的主要方法

    4.2.1 public synchronized void load(InputStream inStream) throws IOException

      将properties属性文件的文件输入流加载到Properties对象

     seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

    4.2.2 public void store(OutputStream out, String comments) throws IOException

       将Properties对象中的属性列表保存到输出流文件中

      seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

      注意:第二个参数表示注释信息(注意:properties文件中不能用中文),在注释信息后面会自动添加一个时间信息

      注意:新创建的文件在项目的根目录下面(问题:为什么在eclipse中没有,但是到文件夹中却能找到???)

    4.2.3 public String getProperty(String key)

      获取属性值,参数是属性的键

     4.2.4 public synchronized Object setProperty(String key, String value)

      修改属性值,参数1是属性的键,参数2是属性的新值

  4.3 案例

    要求:读取properties配置文件总的属性值,将读取到的属性值进行修改后保存到另外一个properties配置文件中

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训 读取属性配置文件信息

    等待读取的properties配置文件的位置如下图所示

      seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

5 数据库连接池

  5.1 什么是数据库连接池

    程序启动时就创建足够多的数据库连接,并将这些连接组成一个连接池,由程序自动地对池中的连接进行申请、使用、释放

  5.2 数据库连接池的运行机制

    》程序初始化时创建连接池

    》需要操作数据库时向数据库连接池申请一个可用的数据库连接

    》使用完毕后就将数据库连接还给数据库连接池(注意:不是关闭连接,而是交给连接池)

    》整个程序退出时,断开所有连接,释放资源(即:管理数据库连接池的那个线程被杀死后才关闭所有的连接)

     seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

  5.3 数据库连接池的编程步骤

    5.3.1 导包

      seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

    5.3.2 声明ThreadLocal、BasicDataSource成员变量(注意:这两个成员变量是静态的)

      seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

    5.3.3 在静态代码块中实例化那两个成员变量,并通过Properties对象读取配置文件信息,利用这些配置文件信息给BasicDataSource对象进行初始化处理

  seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

    5.3.4 编写创建连接静态方法

      利用BasicDataSource对象实例化一个连接对象

      将这个连接对象放到ThreadLocal对象中

      seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

    5.3.5 编写释放连接静态方法

      从ThreadLocal对象中获取连接对象

      清空ThreadLocal对象

      判断连接对象是否释放

      seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

6 利用数据库连接池操作数据库

  项目结构图

    seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

http://www.cnblogs.com/NeverCtrl-C/p/7132006.html

网友评论

更多精彩分享

万码学堂联系方式-Java培训机构,青岛Java培训,青岛计算机培训,软件编程培训,seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训,Java培训万码学堂联系方式