JDBC
Java DataBase Connecticity(Java语言连接数据库)
JDBC的本质
JDBC是SUN公司制定的一套接口(interface)
java.sql.*
接口都有调用者和实现者。
面向接口调用、面向接口写实现类,这都属于面向接口编程。
为什么要面向接口编程?
解耦合:降低程序的耦合性,提高程序的扩展力。
为什么SUN制定一套JDBC接口?
因为每个数据库原理不同,制定接口,让使用者不用关心各种实现原理。
JDBC编程6步
- 注册驱动(作用:告诉JAVA程序,即将连接哪个品牌数据库)
- 获取连接(表示JVM的进程和数据库进程之间的通道打开)
- 获取数据库操作对象(专门执行SQL的对象)
- 执行SQL语句(DQL DML…)
- 处理查询结果集(只有当第四步执行的是select语句的时候,才有这5步的查询结果集。
- 释放资源
IDEA操作流程
导入mysql连接jar包
增加记录
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTest01 {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// 1.注册驱动
/* 第一种写法
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
第二种写法(常用的)
为什么这种方式常用?因为参数是一个字符串,字符串可以写到XXX.properties文件中。
以下方法不需要接收返回值,因为我们只想用它的类加载动作。*/
Class.forName("com.mysql.jdbc.Driver");
// 2.获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");
// 3.获取数据库操作对象
stmt = conn.createStatement();
// 4.执行SQL语句
String sql = "INSERT INTO t_user(username,c_id) VALUES ('小白',102)";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "增加成功" : "删除失败");
} catch (SQLException e) {
e.printStackTrace();
}catch (ClassNotFoundException e){
e.printStackTrace();
}finally {
// 6.释放资源
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
通过配置文件进行数据库更新操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
public class JDBCTest02 {
public static void main(String[] args) {
// 使用资源绑定器绑定属性配置文件
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
Connection conn = null;
Statement stmt = null;
try {
// 1.注册驱动
Class.forName(driver);
// 2.获取连接
conn = DriverManager.getConnection(url ,user, password);
// 3.获取数据库操作对象
stmt = conn.createStatement();
// 4.执行SQL
String sql = "delete from t_user where c_id = 101";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "执行成功" : "执行失败");
}catch (SQLException | ClassNotFoundException e){
e.printStackTrace();
}
}
}
处理查询结果集
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCTest03 {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost/test","root","123");
//3.获取数据库操作对象
stmt = conn.createStatement();
//4.执行sql
String sql = "SELECT * FROM t_user";
//excuteUpdate
rs = stmt.executeQuery(sql); //专门执行DQL语句的方法
//5.处理查询结果
while (rs.next()){
String id = rs.getString("id");
String username = rs.getString("username");
String c_id = rs.getString("c_id");
System.out.println(id + "," + username + "," + c_id);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if (rs != null){
try{
rs.close();
}catch (Exception e){
e.printStackTrace();
}
}
if (stmt != null){
try{
stmt.close();
}catch (Exception e){
e.printStackTrace();
}
}
if (conn != null){
try{
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}
踩过的坑
Can’t find bundle for base name XXXX, locale zh_CN
IDEA中properties文件要放到src中,否则程序会找不到文件。
文件路径应该在c:xx\IdeaProjects\jdbc-test\src
Communications link failure
数据库连接错误,确保配置文件中账户密码和其他信息填写正确。