JDBC

所有的数据库操作框架都是用在JDBC的基础上做多次封装的,因为JDBC的操作很复杂

  • 引入Jar包
  • 连接数据库操作
  • 书写sql语句,传参
  • 查询,取值
  • 关闭连接
//1.注册驱动(静态方法)(包名+类名)
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象(导包都导sql里面的,不导jdbc里的;多态!报异常是因为用户输入的串可能写错)后面设置下数据格式
String url="jdbc:mysql://localhost:3306/java0603?useUnicode=true&characterEncoding=UTF-8";
String user="root";
String password="123456";
// 3.连接数据库
Connection conn=DriverManager.getConnection(url,user,password);
// 写sql语句
String sql="select count(*) from user where uname=? and pwd=?";
PreparedStatement pst=conn.prepareStatement(sql);
//给sql语句的?赋值
pst.setString(1,"pdt1997");
pst.setString(2, "xxxx");
ResultSet rs= pst.executeQuery(); //5.处理结果集
int count=0;
while(rs.next()){
count=rs.getInt(1);//因为就一列
System.out.println(count);
}
//6.释放资源
rs.close();
pst.close();
conn.close();

因为每次操作都需要连接一次,结束需要断开一次,所有就需要封装一个永远在连接状态的单例模式工具库

public class JDBCUtils {
//获取连接对象的方法(静态的)
public static Connection getConn(){
Connection conn=null;
try {
//1.注册驱动(静态方法)(包名+类名)
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象(导包都导sql里面的,不导jdbc里的;多态!报异常是因为用户输入的串可能写错)后面设置下数据格式
String url="jdbc:mysql://localhost:3306/java0603?useUnicode=true&characterEncoding=UTF-8";
String user="root";
String password="123456";
conn=DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//释放资源
public static void close(Connection conn,Statement sta){
if(sta!=null){
try {
sta.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//释放资源2
public static void close(Connection conn,Statement sta,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(sta!=null){
try {
sta.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} public static void main(String[] args) {
//1.获得连接对象
Connection conn=JDBCUtils.getConn();
//测试下是地址不System.out.println(conn);
//2.获取语句执行平台
String sql="insert into test (name) values(?)";
PreparedStatement pst=conn.prepareStatement(sql);
//3.执行sql
pst.setString(1, "xxx");
int row=pst.executeUpdate();
System.out.println(row);
//4.释放资源
JDBCUtils.close(conn, pst);
}

连接池

现在常用的开源数据连接池主要有c3p0dbcp两种

  • dbcp没有自动的去回收空闲连接的功能,c3p0有自动回收空闲连接功能
  • 两者主要是对数据连接的处理方式不同!C3P0提供最大空闲时间,DBCP提供最大连接数,C3P0当连接超过最大空闲连接时间时,当前连接就会被断掉;DBCP当连接数超过最大连接数时,所有连接都会被断开
public class DBCPUtil {

    private static DataSource dataSource;

    static{
try{
//1、将properties文件夹在到输入流中
InputStream is = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties");
//2、创建properties对象,用于读取第一步得到的输入流
Properties ps = new Properties();
//3、使用上述的properties对象,加载本地的properties文件
ps.load(is);
//4、使用连接池工厂类,创建连接池对象
DataSource dataSource = BasicDataSourceFactory.createDataSource(ps);
}catch (Exception e){
e.printStackTrace();
}
} //用于从连接池中,获取一个连接对象的操作方法
public static Connection getConnection(){
try{
return dataSource.getConnection();
}catch (Exception e){
e.printStackTrace();
return null;
}
} //用于释放数据库的连接资源
public static void close(Connection conn, Statement state,ResultSet resultSet){
try{
if(conn!=null){
conn.close();
conn = null;
}
if(state!=null){
state.close();
state = null;
}
if (resultSet!=null){
resultSet.close();
resultSet = null;
}
}catch (Exception e){
e.printStackTrace();
}
}
} public static void main(String[] args) {
Connection connection = null;
PreparedStatement ps = null;
try {
connection = DBCPUtil.getConnection();
String sql = "insert into users(username,password) values(?,?)";
ps = connection.prepareStatement(sql);
ps.setString(1, "张三");
ps.setString(2, "123456");
ps.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
DBCPUtils.close(connection, ps);
}
}

配置文件

# 连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password= # 初始化连接
initialSize=10
# 最大连接数量
maxActive=200
# 最大空闲连接
maxIdle=20
# 最小空闲连接
minIdle=5 # 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒
maxWait=60000 # JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
# 注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们
connectionProperties=useUnicode=true;characterEncoding=UTF8 # 指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

了解一下就好,这个不是开发用的,开发现在还是用mybatis

JDBC和连接池的更多相关文章

  1. c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包

    [-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...

  2. jdbc数据连接池dbcp要导入的jar包

    jdbc数据连接池dbcp要导入的jar包 只用导入commons-dbcp-x.y.z.jarcommons-pool-a.b.jar

  3. 关于JDBC和连接池我学到的(转载保存)

    1.JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模 ...

  4. JDBC之 连接池

    JDBC之 连接池 有这样的一种现象: 用java代码操作数据库,需要数据库连接对象,一个用户至少要用到一个连接.现在假设有成千上百万个用户,就要创建十分巨大数量的连接对象,这会使数据库承受极大的压力 ...

  5. JDBC数据源连接池(4)---自定义数据源连接池

    [续上文<JDBC数据源连接池(3)---Tomcat集成DBCP>] 我们已经 了解了DBCP,C3P0,以及Tomcat内置的数据源连接池,那么,这些数据源连接池是如何实现的呢?为了究 ...

  6. JDBC数据源连接池(3)---Tomcat集成DBCP

    此文续<JDBC数据源连接池(2)---C3P0>. Apache Tomcat作为一款JavaWeb服务器,内置了DBCP数据源连接池.在使用中,只要进行相应配置即可. 首先,确保Web ...

  7. JDBC数据源连接池(2)---C3P0

    我们接着<JDBC数据源连接池(1)---DBCP>继续介绍数据源连接池. 首先,在Web项目的WebContent--->WEB-INF--->lib文件夹中添加C3P0的j ...

  8. DBCP,C3P0与Tomcat jdbc pool 连接池的比较

    hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect,告诉连接被重置 ...

  9. JDBC数据源连接池的配置和使用实例

    个人学习参考所用,勿喷! 使用JDBC建立数据库连接的两种方式: 1.在代码中使用DriverManager获得数据库连接.这种方式效率低,并且其性能.可靠性和稳定性随着用户访问量得增加逐渐下降. 2 ...

  10. mysql,jdbc、连接池

    show processlist; select * from information_schema.processlist; Command: The type of command the thr ...

随机推荐

  1. 详解mysql中的Using与On的用法

    多用才可以体会各个关键字的用法啊... 原文来自[http://bbs.php100.com/read-htm-tid-148469.html] 在用Join进行多表联合查询时,我们通常使用On来建立 ...

  2. C:变量的声明与定义

    声明变量不需要建立存储空间,如:extern int a; 定义变量需要建立存储空间,如:int b; #include <stdio.h> int main() { //extern 关 ...

  3. C:编译过程、目标代码文件、 可执行文件和库

    C编程的基本策略是, 用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码). 典型的C实现通过编译和链接两个步骤来完成这一过程. 编译器把源代码转换成中间代码, 链接器把中间代码和其 ...

  4. vmware克隆机无法启动eth0联网问题

    cd /etc/sysconfig/network-scrip vi ifcfg-eth0 把eth0修改成eth1,重启网卡就可以了

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:堆叠的水平

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 「AT4741 [ABC132D] Blue and Red Balls」

    题目大意 给出一个长度为 \(N\) 的01串,其中有 \(K\) 个 \(1\),其他都是 \(0\),需要求出当着 \(K\) 个 \(1\) 分成 \(1\) 到 \(K\) 段每一个的方案数. ...

  7. 陶陶摘苹果(0)<P2005_1>

    陶陶摘苹果 (apple.pas/c/cpp) [问题描述]  陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用 ...

  8. Spring学习(五)

    自动装备 1.定义 自动装配(autowiring): 将某个Bean实例中所引用的其它的Bean自动注入到当前Bean实例中 自动装配就是指由Spring来自动地注入依赖对象,无需人工参与. 自动装 ...

  9. Primecoin服务端更新--操作流程

    Primecoin服务端更新流程:  一.下载更新文件primecoin_x.y.z_xx.zip到/servers目录下:这里是把:版本primecoin0161alpha1更新到:版本primec ...

  10. frp 配置

    前言 对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题. 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy.FRP 是一 ...