使用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);
}
}

Java数据库连接技术的更多相关文章

  1. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  2. 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)

    一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称.它可以把数据持久保存,是一种持久化机制. 1.持久化 持久化就是将程序中的数据在瞬时状态和 ...

  3. JDBC数据库连接技术

    [学习笔记]JDBC数据库连接技术(Java Database Connectivity) 一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称 ...

  4. Java数据库连接池

    转载过来的,最近在做一个小网站,准备使用这种方法.     Java jdbc数据库连接池总结! 1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及, ...

  5. Java分布式应用技术架构介绍

    分布式架构的演进 系统架构演化历程-初始阶段架构

  6. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

  7. Java数据库连接--JDBC调用存储过程,事务管理和高级应用

    相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...

  8. Java分布式应用技术架构

    分布式架构的演进 系统架构演化历程-初始阶段架构初始阶段 的小型系统 应用程序.数据库.文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序.数据库.文件等所有的资源都在一台服务器上.描述: ...

  9. Java数据库连接池详解

    http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource P ...

随机推荐

  1. SpringBoot------自动装配Mapper报错

    如图: 解决方法: 转载: https://blog.csdn.net/j754379117/article/details/71639043

  2. 【Excel】输出CSV文本

    '******************************************************************************* ' CSV形式テキストファイル書き出す ...

  3. shell脚本学习笔记(符号)

    shell脚本的学习: 1.Shell的作用是解释运行用户的命令,用户输入一条命令,Shell就解释运行一条,这样的方式称为交互式(Interactive),Shell还有 一种运行命令的方式称为批处 ...

  4. git和github新手快速操作流程

    git和github新手快速操作流程 本文主要介绍利用git版本控制将项目托管到远程仓库github上的一般性操作流程,为了给正在学习git的同学们一个小小的参考,以便更轻松的去深入学习git,本文所 ...

  5. Mac Eclipse安装lombok

    Lombok是一个可以通过注解的形式可以帮助消除一些必须但是显得很臃肿的Java代码的工具,通过使用对应的注解,可以在进行编译源码的时候生成对应的方法,比如类属性的get/set/toString() ...

  6. 半深入理解CSS3 object-position/object-fit属性

    半深入理解CSS3 object-position/object-fit属性 转载:https://www.zhangxinxu.com/wordpress/2015/03/css3-object-p ...

  7. 关于 Java 中关于 数组的声明

    第一种方式:直接声明(只能在定义处使用!) int[] arr = {2, 3, 4, 5} 第二种方式:显式声明(用于各种情况) 比如方法返回值: public static int[] getAr ...

  8. 最新版的Chrome不能设置网页编码怎么解?

    添加一个Google插件https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlm ...

  9. Python学习之旅(九)

    Python基础知识(8):集合 集合:由不同元素组成,无序的,不重复的序列 补充知识:可变类型:列表.字典:不可变类型:数字.字符串.元组 使用大括号{}或set()方法定义集合 se=set(&q ...

  10. JavaScript基础知识(数据类型)

    数据类型 布尔:true/fasle console.log(typeof true);// "boolean" Number : true -->1 false --> ...