Java(10)MySQL连接
1.什么是JDBC
全称Java Database Connectivity,是Java语言中用于执行SQL语句的API。
它为多种关系数据库提供统一访问接口,允许Java程序连接数据库,执行SQL语句等。
功能特点
- 创建管理数据源(数据库中的数据)的连接
- 发送SQL命令到数据库中执行
- 提取并处理返回的数据集
常用工具
- DriverManager类,管理数据库的驱动服务
- Connection接口:创建连接项,建立和数据库传输数据的流
- Statement接口:执行SQL语言,并返回结果集
- ResultSet接口:用于接收结果集,通常用于查询操作
- sqlException类:处理有关数据库操作的异常
2. 连接数据库
2.1 main方法
package org.example;
import java.sql.*;
public class Test1 {
public static void main(String[] args) {....}
}
2.2 加载驱动
利用反射方式进行加载,所谓反射就是不用new关键字创建对象
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("驱动类加载失败");
throw new RuntimeException(e);
}
2.3 准备连接地址
准备连接数据库的数据:IP地址、端口号、用户名密码、库名
在根目录src/main/resources/init.properties下书写基本的数据库信息,如
ip = 127.0.0.1
port = 3306
username = root
password = 888888
dbname = mybatis
dbtype = mysql
而后在 Test1 的 main 方法下建立连接
String url = "jdbc:mysql://127.0.0.1:3306/mybatis";
2.4 创建连接项
Connection conn = null;
try {
conn= DriverManager.getConnection(url,"root","888888");
} catch (SQLException e) {
System.out.println("创建连接项失败");
}
System.out.println(conn);
2.5 对数据库操作
String sql = "select * from user ";
try {
//预编译对象
PreparedStatement ps = conn.prepareStatement(sql);
//执行查询sql
ResultSet rs = ps.executeQuery();
//获取结果集对象中的值
while (rs.next()) {
System.out.println(rs.getInt("id") + rs.getString("username"));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
SQL语句条件:
- 使用变量拼接的方式(不推荐,存在SQL注入风险)
- 使用占位符的方式
何为SQL注入:
如果
selectUsername
或selectSex
来自用户输入,恶意用户可以注入 SQL 代码,导致安全问题。例如,如果用户输入OR 1=1 --
,SQL语句将变为:SELECT * FROM user WHERE username = '' OR 1=1 --' AND sex = 2
String selectUsername = "张三";
int selectSex = 2;
String sql = "select * from user where username = ? and sex = ? ";
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,"张三");
ps.setInt(2,2);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + rs.getString("username"));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
3.封装测试
与标题2的区别是,下段代码将查询结果封装成User
对象的列表。
3.1 User
类
它是一个典型的Java实体类,用于封装用户的基本信息。
并提供了标准的getter和setter方法,以及一个toString
方法用于返回对象的字符串表示。
这样的类在Java应用中非常常见,尤其是在与数据库交互时,用于映射数据库表中的记录。
文件地址:org/example/pojo/User.java
package org.example.pojo;
import java.util.Date;
public class User {
private Integer id;
private String username;
private Date birthday;
private Integer sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex=" + sex +
", address='" + address + '\'' +
'}';
}
}
3.2 测试函数
package org.example;
import org.example.pojo.User;
import java.sql.*;
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args) {
// 1. 加载MySQL驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("驱动类加载失败");
throw new RuntimeException(e);
}
// 2. 准备连接数据库的数据
String url = "jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String password = "888888";
// 3. 创建连接
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// 4. 对数据库操作
String selectUsername = "张三";
int selectSex = 2;
String sql = "SELECT * FROM user WHERE username = ? AND sex = ?";
// 预编译对象
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, selectUsername);
ps.setInt(2, selectSex);
// 执行查询
try (ResultSet rs = ps.executeQuery()) {
// 获取结果集对象中的值
ArrayList<User> userList = new ArrayList<>();
while (rs.next()) {
User u = new User();
u.setId(rs.getInt("id"));
u.setUsername(rs.getString("username"));
u.setBirthday(rs.getDate("birthday"));
u.setSex(rs.getInt("sex"));
u.setAddress(rs.getString("address"));
userList.add(u);
}
// 输出用户列表
for (User u : userList) {
System.out.println(u);
}
}
}
} catch (SQLException e) {
System.out.println("数据库操作失败");
throw new RuntimeException(e);
}
}
}
原文地址:https://blog.csdn.net/Tttian622/article/details/145200637
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!