什么是JDBC
JDBC:规范定义接口
作用: 通过java操作数据库
好处:代码不依赖任何的数据库,只要少量的修改就可以访问其他的数据库
DriverManager(驱动管理器,Driver驱动,Manager管理者)
作用:告诉JDBC真正的JDBC规范实现类是谁
1) 管理和注册数据库驱动
2) 得到数据库连接对象
(ip,端口 ,用户名和密码)
Connetion(接口)
connection:一个连接对象
作用:可用于创建 Statement 和 PreparedStatement 对象
Statement:( 接口)
一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。
PreparedStatemen :(接口 )
一个 SQL 语句对象,是 Statement 的子接口
ResultSet :(接口)
用于封装数据库查询的结果集,返回给客户端 Java 程序
JDBC HelloWorld对象创建过程 DriverManager -> Connetction -> Statement -> ResultSet
1.导包
2.注册驱动
3.建立连接
4.获取语句执行对象
5.获取ResultSet
6.解析结果
7.关闭资源
JDBC入门
// 1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 获取链接
Connetction con = DriverManager.getConnection(url, username, pwd);
// 3. 获取Statement
Statement sta = con.createStatement();
// 4. 执行sql语句
ResultSet rs = sta.executeQuery("select * from student");
// 5. 通过ResultSet解析结果集(List<Map<String, Object>>)
while(rs.next()) {
sout(rs.getString("name"));
}
// 6. 释放资源
rs.close();
sta.close();
con.close();
增删改查:
1. 查: 和hello 一致
2. 改: executeUpdate() : int
3. 增:executeUpdate() : int
4. 删: executeUpdate() : int
工具类
1.
去掉重复代码,就是简化咱们获取链接以及关闭资源的代码
2. 实现步骤
1. 编写配置文件
2. 加载配置文件,赋值
3. 编写方法获取链接
4. 释放资源方法
配置文件:
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db1
username=root
password=ROOT
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
//JDBC工具类
public class JDBCUtils {
//1.私有构造方法
private JDBCUtils(){}
//2.声明所需要的配置变量
private static String driverClass;
private static String url;
private static String username;
private static String password;
private static Connection con;
//3.提供静态代码块。读取配置文件的信息为变量赋值,注册驱动
static{
try {
//读取配置文件的信息为变量赋值
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("config.properties");
Properties prop = new Properties();
prop.load(is);
driverClass = prop.getProperty("driverClass");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
//注册驱动
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
//4.提供获取数据库连接方法
public static Connection getConnection() {
try {
con = DriverManager.getConnection(url,username,password);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
//5.提供释放资源的方法
public static void close(Connection con, Statement stat, ResultSet rs) {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection con, Statement stat) {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
prepareStatement
作用: 预编译SQL语句,以防止SQL注入问题
PrepareStatement ps = connection.prepareStatement("select * from student where id = ?");
ps.setInt(1, 22);
查询:ps.executeQuery()
修改:ps.executeUpdate()
事务管理
* 使用对象:Connection对象
* 事务方法:
* 开启事务:setAutoCommit(false)
* 如何提交:commit()
* 回滚:rollback()
数据库连接池
* 作用: 避免重复创建链接, 提升程序的执行效率
C3P0数据库链接池
- 使用步骤:
- 导包
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.12.jar- 配置信息(c3p0-config.xml)
- 导包
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://192.168.59.129:3306/db14</property>
<property name="user">root</property>
<property name="password">itheima</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/db15</property>
<property name="user">root</property>
<property name="password">itheima</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>
* 直接创建CombopooledDataSource
public class C3P0Test1 {
public static void main(String[] args) throws Exception{
//1.创建c3p0的数据库连接池对象
DataSource dataSource = new ComboPooledDataSource();
//2.通过连接池对象获取数据库连接
Connection con = dataSource.getConnection();
//3.执行操作
String sql = "SELECT * FROM student";
PreparedStatement pst = con.prepareStatement(sql);
//4.执行sql语句,接收结果集
ResultSet rs = pst.executeQuery();
//5.处理结果集
while(rs.next()) {
System.out.println(rs.getInt("sid") + "\t" + rs.getString("name") + "\t" + rs.getInt("age") + "\t" + rs.getDate("birthday"));
}
//6.释放资源
rs.close();
pst.close();
con.close();
}
}
Druid
使用步骤:
* 导包(druid包 + MySQL驱动)
* 配置文件编写
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.200.129:3307/db14
username=root
password=123456
**初始化池子数量**
initialSize=5
**最大连接池数量**
maxActive=10
**超时等待时间**
maxWait=3000
- 代码编写:
* 加载配置文件
//获取配置文件的流对象
InputStream is = DruidTest1.class.getClassLoader().getResourceAsStream("druid.properties");
//1.通过Properties集合,加载配置文件
Properties prop = new Properties();
prop.load(is);
* 通过DruidDataSourceFactory获取DataSource
//2.通过Druid连接池工厂类获取数据库连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//3.通过连接池对象获取数据库连接进行使用
Connection con = dataSource.getConnection();
数据库连接池工具类
目的:
* 简化(封装)DataSource的创建步骤
* 一个程序中只需要维护一个DataSource
步骤
- 私有工具类的构造方法
//1.私有构造方法
private DataSourceUtils(){}
- 静态代码块中实现Datasource的初始化
* 加载配置文件
* 创建DataSource
//3.提供静态代码块,完成配置文件的加载和获取数据库连接池对象
static{
try{
//完成配置文件的加载
InputStream is = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties");
Properties prop = new Properties();
prop.load(is);
//获取数据库连接池对象
dataSource = DruidDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
e.printStackTrace();
}
}
提供获取Connection的方法
//4.提供一个获取数据库连接的方法
public static Connection getConnection() {
Connection con = null;
try {
con = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
1344

被折叠的 条评论
为什么被折叠?



