JDBC
Java DataBase Connectivity:Java数据库连接技术(一个接口),即用Java操作数据库Java DataBase Connectivity:是一个独立于特定数据库的管理系统,通用的SQL数据库存取和操作的公共接口,定义了一组标准,为访问不同数据库提供了统一的途径

JDBC体系结构
JDCB接口包括两个层面
JDBC API:面向应用的API,供程序员调用JDBC Driver Manager:面向数据的API,供厂商开发数据库的驱动程序

JDBC API
- 提供者:Java官方
- 内容:供开发者调用的接口
java.sql和javax.sql
DriverManager类Connection接口Statement接口ResultSet接口
DriverManager
- 提供者:Java官方
- 作用:管理不同的JDBC驱动
JDBC驱动
- 提供者:数据库厂商
- 作用:负责连接不同的数据库
JDBC的使用
- 加载数据库驱动,Java程序和数据库之间的桥梁
- 获取
Connection,Java程序与数据库的一次连接 - 创建
Statement对象,由Connection产生,执行SQL语句 - 如果需要接受返回值,创建
ResultSet对象,保存Statement执行之后所查询到的结果
实际操作
- 在Mysql下载
jar包(或利用maven添加依赖) - 在IDEA中引入
jar包

- 创建一个
lib把jar包复制过来

- 如图

- 可以找到
Driver-导入成功

- 创建一个包
zhi.test

- 创建一个类

- 加载驱动(手动加载):
Driver(获取运行实类)
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
- IDEA连接mysql数据库



- 如果报错时间
set global time_zone = '+8:00';
- 可以通过写sql语句来选表
use text;
select * from t_user

//获取连接
String url = "jdbc:mysql://localhost:3306/+访问数据库";
//?useUnicode=true&characterEncoding=UTF-8可用来处理乱码
//String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
- 验证是否连接成功
System.out.println(connection);
验证sql语句
//获取连接
String url = "jdbc:mysql://localhost:3306/dbtest01?useUniode=true&characterEncoding=UTF-8";
String user = "root";
String password = "yxz10010";
Connection connection = DriverManager.getConnection(url,user,password);
String sql = "insert into students(number,name,sex,age) values('1005','金生',1,30)";//添加字段
System.out.println(sql);
//注意这里添加data类型的字段是特殊的需要用+ new data(until) +
- 具体代码
package zhi.test;
import java.sql.*;
import java.util.Date;
public class Test {
public static void main(String[] args) {
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
String user = "zhijiaxin";
String password = "yxz10010";
Connection connection = DriverManager.getConnection(url,user,password);
/*添加语句
String sql = "insert into student(name,score,birthday) values('张三',78.5,'2019-01-01')";
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
*/
/*更新语句
String sql = "update student set name = '李四';
Statement statement = connection.createStatement();
statement.executeUpdate(sql);*/
/*删除语句
String sql = "delete from student";
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
*/
String sql = "select * from student";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString(2);
Double score = resultSet.getDouble(3);
Date date = resultSet.getDate(4);//注意这里的方法重载可以通过字段也可以通过index
System.out.println(id+"-"+name+"-"+score+"-"+date);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e){
e.printStackTrace();
}
}
}
PreparedStatement
Statement的子类,提供了SQL占位符的功能- 使用
Statement进行开发有两个问题: - 需要频繁拼接
String字符串,出错率较高 - 存在SQL注入的风险
- SQL注入:利用某些系统没有对用户输入的信息进行充分检测,在用户输入的数据中注入非法的SQL语句,从而利用系统的SQL引擎完成恶意行为的做法
本文深入解析了Java数据库连接技术(JDBC),介绍了其体系结构、API接口及驱动管理,演示了如何使用JDBC进行数据库连接、执行SQL语句并处理结果集,同时探讨了PreparedStatement在避免SQL注入风险方面的优势。

4850

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



