Java数据库连接技术
使用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数据库连接技术的更多相关文章
- Java数据库连接技术——JDBC
大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...
- 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)
一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称.它可以把数据持久保存,是一种持久化机制. 1.持久化 持久化就是将程序中的数据在瞬时状态和 ...
- JDBC数据库连接技术
[学习笔记]JDBC数据库连接技术(Java Database Connectivity) 一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称 ...
- Java数据库连接池
转载过来的,最近在做一个小网站,准备使用这种方法. Java jdbc数据库连接池总结! 1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及, ...
- Java分布式应用技术架构介绍
分布式架构的演进 系统架构演化历程-初始阶段架构
- 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写
基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...
- Java数据库连接--JDBC调用存储过程,事务管理和高级应用
相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...
- Java分布式应用技术架构
分布式架构的演进 系统架构演化历程-初始阶段架构初始阶段 的小型系统 应用程序.数据库.文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序.数据库.文件等所有的资源都在一台服务器上.描述: ...
- Java数据库连接池详解
http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource P ...
随机推荐
- 用xstart远程连接linux图形用户界面
转载:https://blog.csdn.net/yabingshi_tech/article/details/51839379 双击xstart 输入:/usr/bin/xterm -ls -dis ...
- layui动态数据表格-分页
数据结构 $list = [ [,'], [,] ]; $json[; $json['; $json[; $json['data'] = $list; return json($json); 代码: ...
- mysql可以远程连接的配置
由于配置好几次了,老是会忘记命令,所以记录下来 1.修改配置文件 我的配置文件是/etc/mysql/mysql.conf.d/mysqld.cnf 找到 bind-address = 127.0.0 ...
- ABBYY PDF Transformer+安装教程
ABBYY PDF Transformer+是一个新的全功能PDF文档工具,涵盖整个文档生命周期所涉及的各项功能,包括创建.讨论.批准.保护.转换成可编辑格式的PDF文件.文件合并.文本和图像的提取等 ...
- Java开发中的23种设计模式
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 使用Newtonsoft将DataTable转Json
Newtonsoft提供的将DataTable转成Json: /// <summary> /// DataTable转Json /// </summary> /// <p ...
- winrar压缩过滤文件及文件夹
代码: .git .git\* .svn .svn\* .git~\* .git~ build\* build vsout\* vsout *.obj *.sdf *.opensdf game目录: ...
- ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录
首先介绍下短信注册登录流程: 注册页面点击获取手机号验证码按钮,用jquery的click事件POST或GET方法把手机号发送到后台控制器: 后台控制器创建函数,收到手机号后生成随机码,例如:6位的随 ...
- Windows下安装配置Yaf框架的方法及创建典型合理的Demo目录结构
Yaf是一个C语言编写的PHP框架,由鸟哥Laruence开发的高性能框架: Yaf官方文档:http://www.laruence.com/manual/index.html 第一步:安装PHP扩展 ...
- postgresql免密码登录
https://www.postgresql.org/docs/8.3/static/libpq-pgpass.html vi ~/.pgpass 输入以下内容 hostname:port:datab ...