1. JDBC 概述 820
1.1 基本介绍
1. JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。
2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。
3. JDBC的基本原理图[重要!]
4. 模拟JDBC
2. 模拟 JDBC 821
代码在com.stulzl.jdbc.myjdbc.
接口JdbcInterface
package com.stulzl.jdbc.myjdbc;
//我们规定的Jabc接口方法 821
public interface JdbcInterface {
//连接
public Object getConnection();
//crud增删改查
public void crud();
//关闭连接
public void close();
}
MysqlJdbcImpl类
package com.stulzl.jdbc.myjdbc;
//mysql数据库实现了我们模拟的jdbc接口 821
public class MysqlJdbcImpl implements JdbcInterface{
@Override
public Object getConnection() {
System.out.println("得到mysql的连接");
return null;
}
@Override
public void crud() {
System.out.println("完成mysql的增删改查");
}
@Override
public void close() {
System.out.println("关闭mysql的增删改查");
}
}
OracleJdbcImpl类
package com.stulzl.jdbc.myjdbc;
//模拟实现oracle数据库实现Jdbc 821
public class OracleJdbcImpl implements JdbcInterface{
@Override
public Object getConnection() {
System.out.println("得到oracle的连接");
return null;
}
@Override
public void crud() {
System.out.println("完成对oracle的增删改查");
}
@Override
public void close() {
System.out.println("关闭oracle的增删改查");
}
}
TestJdbc测试类
package com.stulzl.jdbc.myjdbc;
//模拟完成Mysql数据库实现Jdbc 821
public class TestJdbc {
public static void main(String[] args) {
//完成对mysql的操作 821
JdbcInterface jdbcInterface = new MysqlJdbcImpl();
jdbcInterface.getConnection();//通过接口来调用方法,涉及动态绑定
jdbcInterface.crud();
jdbcInterface.close();
System.out.println("===================");
//完成对oracle的操作 821
JdbcInterface jdbcInterface2 = new OracleJdbcImpl();
jdbcInterface2.getConnection();//通过接口来调用方法,涉及动态绑定
jdbcInterface2.crud();
jdbcInterface2.close();
}
}
2. JDBC 带来的好处 821
2. JDBC带来的好处(示意图)
3.说明:JDBC是Java提供一套用于数据库操作的接口API, Java程序员只需要面向这套接口编程即可。不同的数据库厂商,需要针对这套接口,提供不同实现。
3. JDBC API 822
JDBC API是一 系列的接口,它统一和规范了应用程序与数据库的连接、执行SQL语句,并到得到返回结果等各类操作,相关类和接口在java.sql与javax.sql包中
4. JDBC 快速入门 822
4.1 JDBC 程序编写步骤
1.注册驱动---加载Driver类
2.获取连接---得到Connection
3.执行增删改查---发送SQL给mysq|执行
4.释放资源---关闭相关连接
4.2 JDBC 第一个程序 822
通过jdbc对表actor进行添加,删除和修改操作
代码在com.stulzl.jdbc_.
Jdbc01
package com.stulzl.jdbc_;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
//这是第一个第一个Jdbc程序,完成简单的操作 822
public class Jdbc01 {
public static void main(String[] args) throws SQLException {
//前置工作: 在项目下创建一个文件夹比如 libs
// 将 mysql.jar 拷贝到该目录下,点击 add to project ..加入到项目中
//得到驱动
Driver driver = new Driver();//创建driver对象
//得到连接
//(1) jdbc:mysql:// 规定好表示协议,通过 jdbc 的方式连接 mysql
//(2) localhost 主机,可以是 ip 地址
//(3) 3306 表示 mysql 监听的端口
//(4) hsp_db02 连接到 mysql dbms 的哪个数据库
//(5) mysql 的连接本质就是前面学过的 socket 连接
String url = "jdbc:mysql://localhost:3306/hsp_db02";
//将用户和密码放到Properties对象
Properties properties = new Properties();
properties.setProperty("user","root");//用户
properties.setProperty("password","lzl");//密码
//获取连接
Connection connect = driver.connect(url, properties);
//执行sql
//添加一条sql语句
//解释这里的null是自增长,因为数据库那边是这样设计的
//String sql = "insert into actor values(null,'刘德华','男','1970-11-11','110')";
//修改
//String sql = "update actor set name='周星驰' where id = 1";
//删除
String sql = "delete from actor where id = 1";
//statement 用于执行静态 SQL 语句并返回其生成的结果的对象
Statement statement = connect.createStatement();
int rows = statement.executeUpdate(sql);// 如果是 dml 语句,返回的就是影响行数
System.out.println(rows>0?"成功":"失败");
//关闭连接资源
statement.close();
connect.close();
}
}
数据库E:\java学习\初级\course168\db_
actor_
-- 创建测试表 演员表 822
CREATE TABLE actor ( -- 演员表
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL DEFAULT '',
sex CHAR(1) NOT NULL DEFAULT '女',
borndate DATETIME,
phone VARCHAR(12));
SELECT * FROM actor
5. 获取数据库连接 5 种方式 823
5.1 方式1 823
5.2 方式2 823
5.3 方式3 824
5.4 方式4 825
提示:
1. mysqL驱动5.1.6可以无需CLass . forName("com.mysql.jdbc.Driver");
2.从jdk1.5以后 使用了jdbc4,不再需要显示调用class.forName()注册驱动而是自动调用驱动
jar包下META-INF\services\java sql.Driver 文本中的类名称去注册
3.建议还是写上CLass . forName("com.mysq.jdbc.Driver"),更加明确
5.5 方式5 826
代码在com.stulzl.jdbc_conn.
JdbcConn
package com.stulzl.jdbc_conn;
import com.mysql.jdbc.Driver;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
//java连接Mysql的5种方式 823
public class JdbcConn {
@Test
//方式1 823
public void connect01() throws SQLException {
Driver driver = new Driver();//创建driver对象
String url = "jdbc:mysql://localhost:3306/hsp_db02";
//将用户和密码放到Properties对象
Properties properties = new Properties();
properties.setProperty("user","root");//用户
properties.setProperty("password","lzl");//密码
//获取连接
Connection connect = driver.connect(url, properties);
System.out.println("方式1="+connect);
}
//方式2 823
@Test
public void connect02() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
//使用反射加载 Driver 类 , 动态加载,更加的灵活,减少依赖性
Class aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver)aClass.newInstance();
String url = "jdbc:mysql://localhost:3306/hsp_db02";
//将用户和密码放到Properties对象
Properties properties = new Properties();
properties.setProperty("user","root");//用户
properties.setProperty("password","lzl");//密码
//获取连接
Connection connect = driver.connect(url, properties);
System.out.println("方式2="+connect);
}
//方式 3 使用 DriverManager 替代 driver 进行统一管理 824
@Test
public void connect03() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
//使用反射加载Driver类
Class aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver)aClass.newInstance();
//创建url、user和password
String url = "jdbc:mysql://localhost:3306/hsp_db02";
String user = "root";
String password = "lzl";
DriverManager.registerDriver(driver);//注册Driver驱动
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("方式3="+connection);
}
//方式4 使用 Class.forName 自动完成注册驱动,简化代码 825
//这种方式获取连接是使用的最多,推荐使用
@Test
public void connect04() throws ClassNotFoundException, SQLException {
//使用反射加载Driver类
//在加载 Driver 类时,完成注册
/*
源码: 1. 静态代码块,在类加载时,会执行一次.
2. DriverManager.registerDriver(new Driver());
3. 因此注册 driver 的工作已经完成
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
*/
Class.forName("com.mysql.jdbc.Driver");
//创建url、user和password
String url = "jdbc:mysql://localhost:3306/hsp_db02";
String user = "root";
String password = "lzl";
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("方式4="+connection);
}
//方式5在方式 4 的基础上改进,增加配置文件,让连接 mysql 更加灵活 826
@Test
public void connect05() throws IOException, ClassNotFoundException, SQLException {
//通过 Properties 对象获取配置文件的信息
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properties"));
//获取相关值
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
Class.forName(driver);//建议写上
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("方式5="+connection);
}
}
配置文件再src下面 mysql.properties
user=root
password=lzl
url=jdbc:mysql://localhost:3306/hsp_db02
driver=com.mysql.jdbc.Driver