一、JDBC中的类
1.入门流程
//1. 导入驱动jar包
//2.注册驱动
Class.forName(“com.mysql.jdbc.Driver”);
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/db3”, “root”, “root”);
//4.定义sql语句
String sql = “update account set balance = 500 where id = 1”;
//5.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//6.执行sql
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
2.各个类
- DriverManager:驱动管理对象
- Connection:数据库连接对象
- Statement:执行sql的对象
- ResultSet:结果集对象,封装查询结果
- PreparedStatement:执行sql的对象
3.JDBC抽取
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
*/
static{
//读取资源文件,获取值。
try {
//1. 创建Properties集合类。
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
System.out.println(path);///D:/IdeaProjects/itcast/out/production/day04_jdbc/jdbc.properties
//2. 加载文件
// pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04_jdbc\\src\\jdbc.properties"));
pro.load(new FileReader(path));
//3. 获取数据,赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
配置文件
jdbc.properties
url=jdbc:mysql:///db3
user=root
password=root
driver=com.mysql.jdbc.Driver
二、数据库连接池
1.java.sql包中提供了一个接口DataSource,里面有一个getConnection()方法,
改方法由连接池管理者去实现,比如说c3p0
1. C3P0
c3p0的连接对象 ComboPooledDataSource();
//1.获取连接池对象
DataSource ds = new ComboPooledDataSource();
//使用指定配置
//DataSource ds = new ComboPooledDataSource(“otherc3p0”);
//2.获取连接对象
Connection conn = ds.getConnection();
//3.获取数据库操作类
Statement stet = conn.createStatement();
配置文件
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">3000</property>
</default-config>
<!-- 配置指定名称的配置 -->
<named-config name="otherc3p0">
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>
2. druid
druid的连接对象ComboPooledDataSource
//1.使用Properties加载配置文件,把配置文件中的信息存放到Properties中
Properties ps = new Properties();
//通过getClassLoader()来获取jdbc03.class的类加载器,
//类加载器是负责加载类的对象
//getResourceAsStream("druid.properties");
//返回读取指定资源的输入流。
InputStream is = jdbc03.class.getClassLoader().getResourceAsStream("druid.properties");
ps.load(is);
//2.得到Properties后使用DruidDataSourceFactory对象创建数据库链接对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(ps);
//3.获取链接
Connection conn = dataSource.getConnection();
System.out.println(conn);
配置文件
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
3. 工具类
package com.mysql.database01;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtils {
static DataSource ds = null;
static{
try {
//1.加载配置文件
Properties ps = new Properties();
ps.load(JdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//2.获取连接池
ds = DruidDataSourceFactory.createDataSource(ps);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return Connection
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 资源归还
* @param st
* @param conn
*/
public static void close(Statement st,Connection conn){
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 资源归还
* @param rs
* @param st
* @param conn
*/
public static void close(ResultSet rs, Statement st, Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取连接池
* @return 连接池
*/
public static DataSource getDataSource(){
return ds;
}
}
测试
package com.mysql.database01;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class jdbc04 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = JdbcUtils.getConnection();
String sql = "insert into student(id,name,number)values(null,?,?)";
pstat = conn.prepareStatement(sql);
pstat.setString(1,"张三");
pstat.setInt(2,999);
int i = pstat.executeUpdate();
System.out.println(i);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(pstat,conn);
}
}
}
三、JdbcTemplate
JdbcTemplate简单封装类jdbc
1.导包
2.创建JdbcTemplate
JdbcTemplate template = new JdbcTemplate(ds);
3.封装的方法
update();执行DML语句。增删改
queryForMap();查询结果集返回map
queryForList();返回List
query();返回JavaBean
queryForObject();返回对象
JdbcTemplate template = new JdbcTemplate(JdbcUtils.getDataSource());
String sql = "update student set number = '1000' where id = ?";
int update = template.update(sql, 11);
System.out.println(update);