1.概述

这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置.

2.mysql的处理

这里的JDBC使用Mysql作为DBMS,请先安装Mysql,未安装的请点击这里下载,安装教程在这里,作者使用的Mysql的8.0.17版本.

(1)新建用户

随便新建一个用户,比如这里作者新建的是aa,密码是aa123bb.

create user 'aa'@'localhost' identified by 'aa123bb'

(2)建立数据表

建立测试用的数据表与数据库.

create database db;

use db;

create table db

(

id int PRIMARY key,

name char(20)

);

(3)用户权限

对刚才新建的用户授权:

grant select,update,delete,insert on db.* to 'aa'@'localhost';

2.JDBC

(1)jar包

(2)连接

首先注册驱动,驱动需要一个url,用户名和密码,用户名和密码是上一步创建好的,url包含ip地址,端口和数据库的名字.

private static final boolean mysqlVersionGreaterThen8 = true;

private static final String driver = "com.mysql" + (mysqlVersionGreaterThen8 ? ".cj" : "") + ".jdbc.Driver";

private static final String ip = "127.0.0.1";

private static final String port = "3306";

private static String databaseName = "db";

private static String url;

private static String username = "aa";

private static String password = "k041400r";

private static Connection connection = null;

public static Connection getConnection() {

try {

url = "jdbc:mysql://" + ip + ":" + port + "/" + databaseName;

Class.forName(driver);

return connection = DriverManager.getConnection(url, username, password);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

这里要注意以下旧版本的mysql的驱动叫com.mysql.jdbc.Driver,新版本的叫com.mysql.cj.jdbc.Driver.还有就是url的格式:

jdbc:mysql://ip:port/database

(3)Statement

获取数据库连接后,使用createStatement方法创建Statement对于select,使用Statement的executeQuery(sql),返回ResultSet

对于update,delete,insert,使用Statement的executeUpdate(sql)

其中sql是要执行的sql语句,一个String.

public void useStatement() {

try {

useStatementInsert();

useStatementSelect();

useStatementUpdate();

useStatementSelect();

useStatementDelete();

} catch (SQLException e) {

e.printStackTrace();

}

}

public void useStatementInsert() throws SQLException {

String sql = "insert into db(id,name) values(1,'23')";

Statement statement = connection.createStatement();

statement.executeUpdate(sql);

}

public void useStatementDelete() throws SQLException {

String sql = "delete from db";

Statement statement = connection.createStatement();

statement.executeUpdate(sql);

}

public void useStatementSelect() throws SQLException {

String sql = "select * from db";

Statement statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery(sql);

ResultSetMetaData resultSetMetaData = resultSet.getMetaData();

int count = resultSetMetaData.getColumnCount();

while (resultSet.next()) {

for (int i = 1; i <= count; ++i) {

System.out.println(resultSet.getObject(i));

}

}

}

public void useStatementUpdate() throws SQLException {

Statement statement = connection.createStatement();

String sql = "update db set id = 3,name = '555' where id = 1";

statement.executeUpdate(sql);

}

这里对ResultSet使用的getMetaData,可以获取结果集的各种类型信息,包括字段的类型,个数,等等.

(4)PreparedStatement

PreparedStatement与Statement使用基本一样.调用的时候先使用Connection的prepareStatement(sql)创建,然后 - 对于select,使用executeQuery(),返回一个ResultSet - 对于update,delete,insert使用executeUpdate().

public void usePrepareStatement() {

try {

usePrepareStatementInsert();

usePrepareStatementSelect();

usePrepareStatementUpdate();

usePrepareStatementSelect();

usePrepareStatementDelete();

} catch (SQLException e) {

e.printStackTrace();

}

}

public void usePrepareStatementInsert() throws SQLException {

String sql = "insert into db(id,name) values(1,'23')";

PreparedStatement preparedStatement = connection.prepareStatement(sql);

preparedStatement.executeUpdate();

}

public void usePrepareStatementDelete() throws SQLException {

String sql = "delete from db";

PreparedStatement preparedStatement = connection.prepareStatement(sql);

preparedStatement.executeUpdate();

}

public void usePrepareStatementSelect() throws SQLException {

String sql = "select * from db";

PreparedStatement preparedStatement = connection.prepareStatement(sql);

ResultSet resultSet = preparedStatement.executeQuery();

ResultSetMetaData resultSetMetaData = resultSet.getMetaData();

int count = resultSetMetaData.getColumnCount();

while (resultSet.next()) {

for (int i = 1; i <= count; ++i)

System.out.println(resultSet.getObject(i));

}

}

public void usePrepareStatementUpdate() throws SQLException {

String sql = "update db set id = 3,name = '555' where id = 1";

PreparedStatement preparedStatement = connection.prepareStatement(sql);

preparedStatement.executeUpdate();

}

(5)事务

Connection有一个setAutoCommit()方法,把它设置成false即可关闭自动提交,所有语句准备好后,一次性使用commit()提交即可. 实现回滚可以配合SavePoint使用.

3.C3P0

(1)jar包

两个:

(2)配置文件

src下创建一个叫c3p0.properties的文件:

c3p0.driverClass=com.mysql.cj.jdbc.Driver

c3p0.jdbcUrl=jdbc:mysql://127.0.0.1:3306/dbc3p0.user=aa

c3p0.password=aa123bb

这里按自己需要更改即可.

(3)工具类

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;

public class DbUtil

{

private static ComboPooledDataSource C3P0dataSource = new ComboPooledDataSource("c3p0.properties");

public static void releaseConnection(Connection connection)

{

try

{

if(connection != null)

connection.close();

}

catch (Exception e)

{

e.printStackTrace();

}

}

public static Connection getC3P0Connection()

{

try

{

return C3P0dataSource.getConnection();

}

catch (Exception e)

{

e.printStackTrace();

}

return null;

}

}

4.DBCP

(1)jar包

三个:

(2)配置文件

src下新建dbcp.properties:

driver=com.mysql.cj.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/dbusername=aa

password=k041400r

initialSize=10

maxActive=50

maxIdle=15

minIdle=10

maxWait=60000

connectionProperties=useUnicode=true;characterEncoding=utf8

defaultAutoCommit=true

分别是驱动,url,用户名,密码,初始化连接数,最大连接数,最大空闲连接数,最小空闲连接数,最大等待实际,连接属性(这里设置了编码),自动提交.

(3)工具类

import org.apache.commons.dbcp2.BasicDataSourceFactory;

import java.io.InputStream;

import java.sql.Connection;

import java.util.Properties;

import javax.sql.DataSource;

public class DbUtil {

private static DataSource DBCPdataSource;

static {

try {

InputStream inputStream = DbUtil.class.getClassLoader().getResourceAsStream("dbcp.properties");

Properties properties = new Properties();

properties.load(inputStream);

DBCPdataSource = BasicDataSourceFactory.createDataSource(properties);

} catch (Exception e) {

e.printStackTrace();

}

}

public static Connection getDBCPConnection() {

try {

return DBCPdataSource.getConnection();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static void releaseConnection(Connection connection) {

try {

if (connection != null)

connection.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

首先加载属性文件,再使用Properties的load方法将其加载到一个Properties对象中,最后交给BasicDataSourceFactory处理.

5.源码

包含了jar包,配置文件,sql文件与测试代码.

jdbc c3p0 mysql_JDBC+C3P0+DBCP 基本使用相关推荐

  1. JDBC秒变C3P0连接池——再加连接解耦

    从JDBC连接到C3P0数据库连接池 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)    ...

  2. java c3p0 配置文件_【c3p0】 C3P0的三种配置方式以及基本配置项详解

    数据库连接池C3P0框架是个非常优异的开源jar,高性能的管理着数据源,这里只讨论程序本身负责数据源,不讨论容器管理. ---------------------------------------- ...

  3. jdbc c3p0 mysql_JDBC + MySQL使用c3p0连接池

    public class DBUtils { private static String url = null; private static String username = null; priv ...

  4. 【oracle】oracle jdbc驱动与c3p0的一个兼容问题

    环境 oracle 12c 12.1.0.1 oracle jdbc7 12.1.0.1 c3p0 0.9.1.1 tomcat 7.0.55 jdk 1.7 问题 java.lang.Runtime ...

  5. JDBC连接池C3P0,druid

    数据库连接池 什么是数据库连接池: 将多个连接对象放在一个类似于list的集合中,做到需要用到连接的时候就去池子中获取Connection连接对象,不用就放回池子中,不用频繁的获取连接池,关闭连接池. ...

  6. JDBC连接池c3p0连接异常和日志处理

    1.c3p0连接数据库由于时区没限制报出的错误 代码: package C3P0;import com.mchange.v2.c3p0.ComboPooledDataSource; import co ...

  7. 【JDBC】使用c3p0数据库连接池的各种报错警告

    使用c3p0数据库连接池的各种报错警告 使用c3p0数据库连接池的时候,先导入了三个jar包在lib 文件夹中, c3p0-0.9.5.2.jar mchange-commons-java-0.2.3 ...

  8. oracle c3p0 死锁,C3P0老是莫名其妙就线程死锁,但不影响程序

    代码如下: 2016-06-30 22:40:38 [WARN]-[Thread: C3P0PooledConnectionPoolManager[identityToken-> 1hge15w ...

  9. jdbc postgresql mysql_jdbc无法连接postgresql数据库

    使用jdbc连接postgresql数据库时报错如下: org.mybatis.spring.MyBatisSystemException: nested exception is org.apach ...

  10. jdbc 变量 mysql_JDBC读写mysql总结

    一.下载驱动(主要是jar包) mysql-connection-java-5.1.31-bin.jar 二.添加jar包,配置环境变量 把驱动jar包添加到以下两个目录,并设置classpath环境 ...

最新文章

  1. SAP RETAIL 为物料组指派Merchandise Hierarchy Level Code
  2. 集合框架Map、List、Set
  3. php为什么都不想去二次开发,php学习误区:不要盲目的去读程序
  4. ASP.NET Core 中文文档 第三章 原理(5)错误处理
  5. PWN-COMPETITION-GeekChallenge2021
  6. Mysql数据库——数据表的优化、外键与三范式
  7. 7-55 求整数序列中出现次数最多的数 (15 分)
  8. 文末送书 | 数据分析简单入门
  9. 第三章 Python丰富的数据类型
  10. python下载付费文档教程-用Python批量爬取付费vip数据,竟然如此简单
  11. imx6ull ccm时钟体系
  12. 中国邮递员问题+代码实现(cpp)
  13. 恒生电子2020校招郑州大学站经历
  14. 利用快速傅里叶计算多项式相乘
  15. python解析sql字段血缘_数据仓库内表格的血缘关系追溯的方法和装置与流程
  16. root用户修改root密码提示The password fails the dictionary check
  17. 1.GraphPad Prism 8软件安装
  18. Android Jni 调用
  19. JavaGUI编程 -- Swing之Icon、ImageIcon标签获取当前类同一级文件路径的资源
  20. 七巧板复原算法之四——边沿贴合和空腔查找

热门文章

  1. javaEE解决eclipse中不能设置tomcat8.5
  2. servlet的请求和重定向详解
  3. cass读取dat文件_南方CASS方格网土方计算心得
  4. 计算机机房维护与管理,计算机机房的管理与维护.doc
  5. VC++动态链接库(DLL)编程深入浅出(四)(转)
  6. 编写可靠 shell 脚本的 8 个建议
  7. iOS开发之 WebView
  8. ACdream 1728 SJY's First Task
  9. 一眼把人看穿之社交方式 如何辨别朋友的信任度
  10. Masm(1):资源文件定义