JDBC连接池以及动态SQL处理

时间:2022-01-22 22:41:20

复习一下:

1.先创建一个properties配置文件

ClasssName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@服务器IP:端口号:名称
user=设置的用户名
password=设置的密码
maxActive=最大连接数量
maxWait=最大等待时间

2.加载读取配置文件

package day02;

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/** * 该类用于管理数据库连接 * @author adminitartor * */ public class DBUtil { //数据库连接池 private static BasicDataSource ds;

static{

    Properties prop = new Properties();
try {
prop.load(new FileInputStream("config.properties"));
String className = prop.getProperty("classname");
String url = prop.getProperty("url");
String username = prop.getProperty("username");
String password = prop.getProperty("password");
int maxActive = Integer.parseInt(prop.getProperty("maxactive"));
int maxWait = Integer.parseInt(prop.getProperty("maxwait"));
//初始化连接池
ds = new BasicDataSource();
//将JDBC建立连接所需要的信息设置到连接池中 //Class.forName(...)
ds.setDriverClassName(className); //DriverManager.getConnection(...)
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password); //设置连接池最大连接数
ds.setMaxActive(maxActive);
//设置最大等待时间
ds.setMaxWait(maxWait); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
/**
* 获取数据库连接
* @return
*/
public static Connection getConnection()
throws Exception{ return ds.getConnection();
}
/**
* 关闭给定的连接
* @param conn
*/
public static void closeConnection(Connection conn){
try { conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}

3.处理动态的SQL

java.sql.PreparedStatement  该接口是Statement的子接口。设计目的是为了执行动态SQL语句。这样的SQL称为预编译SQL,这种SQL语句会将动态信息以"?"代替,先进行占位。然后将该SQL发送给数据库生成执行计划。然后当需要执行该SQL时,只需要将?需要的实际数据再次传递给数据库即可。
* 1:由于先将SQL语句发送给数据库,并生成了执行计划(语义已经确定),就不存在拼接SQL导致改变SQL语义(SQL注入攻击)的问题了。
* 2:由于执行计划已经生成,当大批量执行SQL时每次只需要将?表示的实际值传入,那么数据库会重用执行计划,这就减少了服务器的压力。

    Connection conn = null;
try {
conn = DBUtil.getConnection();

  //使用PreparedStatement
  String sql = "INSERT INTO userinfo "
  + "(id,username,password,email,nickname,account) "
  + "VALUES "
  + "(seq_userinfo_id.NEXTVAL,?,?,?,?,?)";
  PreparedStatement ps
  = conn.prepareStatement(sql);

  ps.setString(1, "liucan");
  ps.setString(2, "123456");

  ps.setString(3, "liu@qq.com");
  ps.setString(4, "hello");
  ps.setDouble(5, 5000.0);

  int d = ps.executeUpdate();
  if(d>0){
  System.out.println("插入成功!");
  }

    } catch (Exception e) {
e.printStackTrace();
} finally{
if(conn != null){
DBUtil.closeConnection(conn);
}
}
}`

JDBC连接池以及动态SQL处理的更多相关文章

  1. JDBC连接池。。。转载

    1. 引言  近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机  应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架 ...

  2. Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介

    日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...

  3. Tomcat 的 JDBC 连接池

    JDBC 连接池 org.apache.tomcat.jdbc.pool 是 Apache Commons DBCP 连接池的一种替换或备选方案. 那究竟为何需要一个新的连接池? 原因如下: Comm ...

  4. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采取连接池技术,来共享连接Conne ...

  5. JDBC连接池&DBUtils使用

    使用连接池改造JDBC的工具类: 1.1.1          需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...

  6. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

  7. JDBC连接池-C池3P0连接

    JDBC连接池-C3P0连接 c3p0连接池的学习英语好的看英文原版      c3p0 - JDBC3 Connection and Statement Pooling 使用c3p0连接池  三种方 ...

  8. JDBC连接池(三)DBCP连接池

    JDBC连接池(三)DBCP连接池 在前面的随笔中提到 了  1.JDBC自定义连接池  2. C3P0连接池 今天将介绍DBCP连接池 第一步要导入jar包   (注意:mysql和mysql 驱动 ...

  9. JDBC连接池-自定义连接池

    JDBC连接池 java JDBC连接中用到Connection   在每次对数据进行增删查改 都要 开启  .关闭  ,在实例开发项目中 ,浪费了很大的资源 ,以下是之前连接JDBC的案例 pack ...

随机推荐

  1. SQL2008 提示评估期已过的解决方法

    提示窗口: 解决步骤: 第一步:进入SQL2008配置工具中的安装中心 第二步:再进入维护界面,选择版本升级 第三步:进入产品密钥,输入密钥 第四步:一直点下一步,直到升级完毕. SQL Server ...

  2. windows 创建SSH Key

    1. 安装git,从程序目录打开 "Git Bash" (百度或用这个连接http://pan.baidu.com/s/1dDJCx9n 下载) 2. 键入命令:ssh-keyge ...

  3. Bootstrap迁移系列 - Navbar

    在V2.3.2版本中一个标准的导航栏模版如下: <div class="navbar"> <div class="navbar-inner"& ...

  4. 查看Mysql执行计划

    使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show processlist; 选择 ...

  5. android启动activity文本框不获得焦点

    在开发中,常常会碰到这种情况,打开一个activity后,第一个文本框自动获得焦点,同时会弹出软键盘输入框,这样很影响用户体验,现在来看解决方法. 我们先来看看为什么会出现上述情况,原因很简单,文本框 ...

  6. Google揭开Mesa的神秘面纱——一个具备跨地域复制和近实时特性的可伸缩数据仓库

    http://www.infoq.com/cn/news/2014/08/google-data-warehouse-mesa Google发表了一篇新的论文,该论文描述了他们内部所使用的一个被称为M ...

  7. s&ast;s&ast;r备用

    遇见的问题 突然打不开 ip被墙 能ping 但是不能ssh 参考https://www.vultrcn.com/6.html

  8. 关于函数getline()(简单注意事项,不懂你怼我!!!)

    关于getline()函数好使但是有毒: 有两种操作需要进行特殊处理: First: #include <iostream>#include <cstring>#include ...

  9. 在项目中redis做缓存的一些思路

    首先,缓存的对象有三种: 1:数据库中单条的的数据(以表名跟id作为key永久保存到redis),在有更新的地方都要更新缓存(不适用于需要经常更新的数据): 2:对于一些不分页,不需要实时(需要多表查 ...

  10. Python——requests的安装及入门-贴吧爬虫

    一.windows平台下requests的安装 1.win+R,输入cmd,打开命令行窗口,输入命令:pip install requests ,即可自动安装库成功 2.输入命令:pip list,即 ...