JDBC
一、概述
JDBC( 为访问不同的数据库提供了统一的接口 , 为使用者屏蔽了细节问题 。
Java 程序员使用 JDBC, 可以连接任何提供了JDBC( 驱动程序的数据库系统 , 从而完成对数据库的各种操作 。
1.JDBC的基本原理图 [重要]
JDBC接口:
/**
* @Author: XIYAN
* @Date: 2023/2/9 9:27
* @注释:规定的jdbc接口[模拟]
*/
public interface JdbcInterface {
/**
* 连接
*
* @return
*/
Object getConnection();
/**
* 数据的增删改查
*/
void crud();
/**
* 关闭连接
*/
void close();
}
实现类:
/**
* @Author: XIYAN
* @Date: 2023/2/9 9:32
* @注释:Mysql实现jdbc接口
*/
public class MysqlJdbcImpl implements JdbcInterface {
/**
* 连接
*
* @return
*/
@Override
public Object getConnection() {
return "得到Mysql连接";
}
/**
* 数据的增删改查
*/
@Override
public void crud() {
System.out.println("实现数据的增删改查");
}
/**
* 关闭连接
*/
@Override
public void close() {
System.out.println("关闭连接");
}
}
测试:
public class Test {
public static void main(String[] args) {
//创建jdbc对象(通过接口调用实现类,动态绑定[多态])
JdbcInterface jdbcInterface = new MysqlJdbcImpl();
//创建Mysql连接
jdbcInterface.getConnection();
//对数据进行操作
jdbcInterface.crud();
//关闭Mysql连接
jdbcInterface.close();
}
}
2.JDBC带来的好处
JDBC是Java提供一套用于数据库操作的接口 API,Java程序员只需要面向这套接口编程即可。 不同的数据库厂商 , 需要针对这套接口 , 提供不同实现 。
3.JDBC API
二、JDBC快速入门
1.使用步骤
# 注册驱动 - 加载Driver 类
# 获取连接 - 得到 Connection
# 执行增删改查 - 发送SQL给mysql 执行
# 释放资源 - 关闭相关连接
2.模拟 JDBC
完整代码:
/**
* @Author: XIYAN
* @Date: 2023/2/9 10:10
* @注释:第一个Jdbc程序,完成简单的操作
*/
public class Test {
public static void main(String[] args) throws SQLException {
/*
前置操作:
创建一个文件夹(名字随意)
将jar包拷贝到该目录下,右键添加到库
*/
//1.注册驱动(创建Driver对象)
Driver driver = new Driver();
//2.得到连接(本质:socket连接)
//"jdbc连接协议://主机或IP地址:端口号/数据库名"
String url = "jdbc:mysql://localhost:3306/hsp_jdbc";
//3.将用户名和密码放入Properties对象中
Properties properties = new Properties();
/*
说明:
user和password是规定好的不能修改
*/
//设置用户
properties.setProperty("user", "root");
//设置密码
properties.setProperty("password", "123456");
//4.连接数据库
Connection connection = driver.connect(url, properties);
//5.操作数据库
//创建sql语句
String sql = "insert into actor values(null,'张三','男','2000-09-07','110')";
//执行sql语句并返回结果对象
Statement statement = connection.createStatement();
//返回受影响的行数(返回大于0的数字即执行成功,返回0则执行失败)
int rows = statement.executeUpdate(sql);
System.out.println(rows > 0 ? "sql执行成功" : "sql执行失败");
//6.关闭连接
statement.close();
connection.close();
}
}
3.获取数据库连接的 5 种方式
3-1.方式一,使用Driver对象
/**
* @Author: XIYAN
* @Date: 2023/2/9 11:43
* @注释:方式一
*/
public class Manner1 {
public static void main(String[] args) throws SQLException {
//获取Driver实现类对象
Driver driver = new Driver();
//定义jdbc连接地址
String url="jdbc:mysql://localhost:3306/hsp_jdbc";
//创建Properties对象
Properties properties = new Properties();
//设置用户名
properties.setProperty("user","root");
//设置密码
properties.setProperty("password","123456");
//连接数据库
Connection connect = driver.connect(url, properties);
}
}
- 会直接使用com.mysql.jdbc.Driver(),属于静态加载,灵活性差,依赖强
3-2.方式二,减少依赖增强灵活性
/**
* @Author: XIYAN
* @Date: 2023/2/9 11:51
* @注释:方式二
*/
public class Manner2 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//使用反射加载Driver类(动态加载,更加的灵活,减少依赖性)
Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
//定义jdbc连接地址
String url = "jdbc:mysql://localhost:3306/hsp_jdbc";
//创建Properties对象
Properties properties = new Properties();
//设置用户名
properties.setProperty("user", "root");
//设置密码
properties.setProperty("password", "123456");
//连接数据库
Connection connect = driver.connect(url, properties);
}
}
3-3.方式三,使用DriverManager替代Driver进行统一管理
/**
* @Author: XIYAN
* @Date: 2023/2/9 11:51
* @注释:方式三
*/
public class Manner3 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//使用反射加载Driver类(动态加载,更加的灵活,减少依赖性)
Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
//定义jdbc连接地址、用户名和密码
String url = "jdbc:mysql://localhost:3306/hsp_jdbc";
String user = "root";
String password = "123456";
//注册Driver驱动
DriverManager.registerDriver(driver);
//连接数据库
Connection connection = DriverManager.getConnection(url, user, password);
}
}
- 需手动注册Driver驱动
3-4.使用Class.forName自动完成注册驱动,简化代码(推荐使用)
/**
* @Author: XIYAN
* @Date: 2023/2/9 11:51
* @注释:方式四
*/
public class Manner4 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//使用反射加载Driver类并在加载时自动完成Driver驱动的注册
Class.forName("com.mysql.jdbc.Driver");
//定义jdbc连接地址、用户名和密码
String url = "jdbc:mysql://localhost:3306/hsp_jdbc";
String user = "root";
String password = "123456";
//连接数据库
Connection connection = DriverManager.getConnection(url, user, password);
}
}
补充:
- mysqL 驱动5.1.6以后可以无需 CLass.forName("com.mysql.jdbc.Driver");
- 从 jdk1.5以后使用了 jdbc4,不再需要显示调用 class.forName() 注册驱动而是自动调用驱动jar包下 META-INF\services\java.sql.Driver 文本中的类名称去注册
# 建议还是写上 CLass.forName("com.mysql.jdbc.Driver"), 更加明确
3-5.使用配置文件,连接数据库更灵活
jdbc.properties:
url=jdbc:mysql://localhost:3306/hsp_jdbc
user=root
password=123456
driver=com.mysql.jdbc.Driver
Manner5:
/**
* @Author: XIYAN
* @Date: 2023/2/9 14:53
* @注释:方式五
*/
public class Manner5 {
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
//通过Properties对象获取配置文件信息
Properties properties = new Properties();
//读取文件
properties.load(new FileInputStream("src/com/hspedu/myjdbc/demo3/resource/jdbc.properties"));
//获取用户名
String user = properties.getProperty("user");
//获取密码
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
//注册驱动(可省略)
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
Connection connection = DriverManager.getConnection(url, user, password);
}
}
4.创建、插入、修改、删除(练习)
题目:
/**
* @Author: XIYAN
* @Date: 2023/2/9 14:53
* @注释:使用方式五完成数据表的创建、插入、修改、删除
*/
public class Manner5 {
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
//通过Properties对象获取配置文件信息
Properties properties = new Properties();
//读取文件
properties.load(new FileInputStream("src/com/hspedu/myjdbc/demo3/resource/jdbc.properties"));
//获取用户名
String user = properties.getProperty("user");
//获取密码
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
//注册驱动(可省略)
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
Connection connection = DriverManager.getConnection(url, user, password);
//操作数据库
//创建news表
String createSql = "create table news (id int not null primary key auto_increment," +
"content varchar(100)" +
")";
//向news表插入数据
String insertSql = "insert into news values(null,'dyt')," +
"(null,'det')," +
"(null,'dst')," +
"(null,'dsit')," +
"(null,'dwt')";
//更新news表里id为1的信息内容
String updateSql = "update news set content='news' where id=1";
//删除news表里id为3的记录
String deleteSql = "delete from news where id=3";
//创建Statement对象
Statement statement = connection.createStatement();
//执行sql语句
statement.executeUpdate(createSql);
int insert = statement.executeUpdate(insertSql);
System.out.println(insert > 0 ? "sql执行成功" : "sql执行失败");
int update = statement.executeUpdate(updateSql);
System.out.println(update > 0 ? "sql执行成功" : "sql执行失败");
int delete = statement.executeUpdate(deleteSql);
System.out.println(delete > 0 ? "sql执行成功" : "sql执行失败");
//关闭连接
statement.close();
connection.close();
}
}
结果:
id | content |
---|---|
1 | news |
2 | det |
3 | dsit |
4 | dwt |
三、ResultSet[结果集]
1.基本介绍
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
ResultSet 对象保持一个光标指向其当前的数据行 。 最初,光标位于第一行之前
next() 方法将光标移动到下一行 , 并且由于在 ResultSet 对象中没有更多行时返回false ,因此可以在 while 循环中使用循环来遍历结果集
应用实例:
/**
* @Author: XIYAN
* @Date: 2023/2/9 16:06
* @注释:eclect语句返回ResultSet并取出结果集
*/
public class Result {
public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
//1.通过Properties对象获取配置文件信息
Properties properties = new Properties();
//读取文件
properties.load(new FileInputStream("src/com/hspedu/myjdbc/demo3/resource/jdbc.properties"));
//获取用户名
String user = properties.getProperty("user");
//获取密码
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
//2.注册驱动(可省略)
Class.forName("com.mysql.jdbc.Driver");
//3.连接数据库
Connection connection = DriverManager.getConnection(url, user, password);
//4.创建Statement对象
Statement statement = connection.createStatement();
//5.操作数据库
//查询actor表
String selectSql = "select id,name,sex,borndate from actor";
//6.执行sql语句并返回单个ResultSet对象
ResultSet resultSet = statement.executeQuery(selectSql);
//7.使用while循环取出数据 next--让光标下移,当没有数据行时返回false
while (resultSet.next()) {
//获取该行的第一列数据~~~
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
String sex = resultSet.getString(3);
Date borndate = resultSet.getDate(4);
System.out.println(id + "\t" + name + "\t" + sex + "\t" + borndate);
}
//8.关闭连接
resultSet.close();
statement.close();
connection.close();
}
}
所有的笔记来源于:韩顺平 (bilibili.com)
标签:jdbc,String,url,数据库,Driver,public,JDBC,properties,连接池 From: https://www.cnblogs.com/ynxiyan/p/17106242.html