使用mysql作为开发数据库,创建user表。创表语句如下:

create database learn;
use learn;
CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(32), age INT);
INSERT INTO user(NAME, age) VALUES('coshaho', 29);
INSERT INTO user(NAME, age) VALUES('cauchy', 29);

一、使用Java直接连接mysql

1、添加mysql驱动

      <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>

2、连接代码如下

package com.coshaho.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; /**
* Java连接数据库
* @author coshaho
*/
public class MysqlConnector
{
public static void main(String[] args)
{
Connection con = null;
Statement statement = null;
ResultSet rs = null;
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://132.232.35.119:3306/learn";
String user = "root";
String password = "root";
try
{
Class.forName(driver);
// 使用DriverManager获取连接
con = DriverManager.getConnection(url,user,password);
// 创建statement类对象,用来执行SQL语句!!
statement = con.createStatement();
String sql = "select * from user";
rs = statement.executeQuery(sql);
System.out.println("name" + "\t" + "age"); int age = 0;
String name = null;
while(rs.next())
{
// ResultSet获取返回值时,列名不区分大小写
name = rs.getString("nAme");
age = rs.getInt("age");
System.out.println(name + "\t" + age);
}
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
catch(SQLException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
// 从内向外释放连接
try
{
if(null != rs)
{
rs.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
try
{
if(null != statement)
{
statement.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
try
{
if(null != con)
{
con.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}

3、执行效果

二、使用连接池连接数据库

这里以C3p0连接池作为样例,连接池里的连接使用完后,需要主动释放。

1、maven配置如下。

    <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>

2、C3p0配置文件名字必须为c3p0-config.xml,并且放到classpath下。

<?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>
<!-- 默认C3p0配置 -->
<default-config>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://132.232.35.119:3306/learn</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config> <!--以name为标识的数据源 -->
<named-config name="mysql">
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://132.232.35.119:3306/learn</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>

3、测试代码

package com.coshaho.datasource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource; /**
* C3p0连接池
* @author coshaho
*/
public class C3p0DataSource
{
private static ComboPooledDataSource ds = new ComboPooledDataSource("MySQL"); public static Connection getConnection() throws SQLException
{
return ds.getConnection();
} /**
* 需要主动释放连接,这里调用的close方法并非关闭连接,而是归还到连接池
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn,Statement st,ResultSet rs)
{
if(null != rs)
{
try
{
rs.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
if(null != st)
{
try
{
st.close();
}
catch (Exception e)
{
e.printStackTrace();
}
} if(null != conn)
{
try
{
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
} public static void main(String[] args)
{
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try
{
conn = C3p0DataSource.getConnection();
String sql = "insert into user(name, age) values(?, ?)";
st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
st.setString(1, "hkx");
st.setInt(2, 30);
st.executeUpdate();
// 获取数据库自动生成的主键
rs = st.getGeneratedKeys();
if(rs.next()){
System.out.println(rs.getInt(1));
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
C3p0DataSource.release(conn, st, rs);
}
}
}

三、Spring与C3p0整合

spring集成c3p0,实际上,就是让spring初始化c3p0实例,并用jdbcTemplate管理。这里需要注意的是,使用jdbcTemplate直接执行sql,不需要手动释放连接,jdbcTemplate已经帮你自动释放连接了。

1、spring maven配置

      <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.4.RELEASE</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.4.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>

2、spring文件配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 使用spring初始化DataSource -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!-- 使用JdbcTemplate封装DataSource -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://132.232.35.119:3306/learn
jdbc.user=root
jdbc.password=root

3、测试代码

package com.coshaho.datasource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate; public class SpringJdbcTest
{
private static ApplicationContext context;
public static void main(String[] args)
{
String xmlpath = "spring.xml";
context = new ClassPathXmlApplicationContext(xmlpath);
JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
jdbcTemplate.update("insert into user(name, age) values (?, ?)",
"Jack", 20);
}
}

最新文章

  1. 【转】Python实现不同格式打印九九乘法表
  2. [Idea] 在idea中使用jetty debug
  3. sql存储过程中加引号
  4. android中所有颜色大全
  5. java代码抓取网页邮箱
  6. C# 泛型List用法
  7. 使用JS制作一个鼠标可拖的DIV(一)——鼠标拖动
  8. 删除cookie固定格式
  9. NodeJS会是昙花一现吗?
  10. 201521123086《JAVA程序设计》第一周学习总结
  11. HBase表预分区与压缩
  12. jdbc 报错解决办法
  13. c语言第二次作业2
  14. JAVA Web实时消息后台服务器推送技术---GoEasy
  15. 简单介绍一下在CentOS上安装Docker。
  16. SSH框架的搭建和测试(Spring + Struts2 + Hibernate)
  17. 【python小练】0005
  18. C# Enum,Int,String的互相转换 [转]
  19. 一些方便系统诊断的bash函数
  20. TestLink测试管理工具的使用举例—第二篇

热门文章

  1. Qt OpenGL 鼠标拾取实现
  2. Qt中关于QMouseEventbuttons()和QMouseEventbutton()的使用注意
  3. 安装Conda并在Conda下安装jupyter notebook
  4. Linux 依据关键字查找正在运行的进程
  5. 企业SaaS模式的优缺点
  6. vue 使用font-awesome
  7. Linux网络设备驱动 _驱动模型
  8. ux.form.field.Year 只能选年的时间扩展
  9. Win10上使用VS2015编译Caffe2
  10. 1 主机WiFi连接下与虚拟机通信问题