JDBC
Java Database Connectivity Java数据库连接
用于Java程序连接不同的数据库。
实际在Java中定义的相关数据库连接时所需的接口,不同的数据库对其进行了实现。
核心接口
-
Connection:用于设置连接的数据库的地址、账号、密码
-
PreparedStatement:用于预处理、执行sql语句
-
ResultSet:用于接收查询后的数据
以上接口都来自于java.sql包中
加载MySQL驱动
Class.forName("com.mysql.cj.jdbc.Driver");
连接MySQL数据库字符串
String url="jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai";
String username = "root";
String password = "root";
查询的步骤
1、获取连接对象Connection
2、构造sql语句String
3、预处理sql语句pst = conn.preparedStatement(sql)
4、给sql语句中的?赋值pst.serXXX(?顺序,值)
5、调用executeQuery()得到ResultSet结果集
6、遍历结果集rs.next()后rs.getXXX(字段顺序/字段名)
7、释放资源
增删改的步骤
1、获取连接对象Connection
2、构造sql语句String
3、预处理sql语句pst = conn.preparedStatement(sql)
4、给sql语句中的?赋值pst.serXXX(?顺序,值)
5、调用executeUpdate()得到受影响的行数
6、释放资源
数据查询
import com.hqyj.entity.Hero;
import java.sql.*;
import java.util.ArrayList;
public class JDBCTest {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
//连接mysql数据库,实现查询所需的接口
//连接对象
// Connection conn;
//sql预处理对象
// PreparedStatement pst;
//结果集对象
// ResultSet rs;
//查询的流程
//1、加载mysql的驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2、连接指定的mysql
String url = "jdbc:mysql://localhost:3306/gamedb?serverTimezone=Asia/Shanghai";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url,username,password);
//3、构造sql语句
String sql = "select * from hero";
//4、预处理sql语句
PreparedStatement pst = conn.prepareStatement(sql);
//5、执行查询的方法
ResultSet rs = pst.executeQuery();
//6、循环读取数据
ArrayList<Hero> heroes = new ArrayList<>();
while (rs.next()){
// rs.next()方便表示读取且判断是否还有后续数据
//获取读取到的数据 rs.get数据类型(int columnIndex)根据字段索引获取值 rs.get数据类型(int columnString)根据字段名获取值
int id = rs.getInt(1);
String name = rs.getString("name");
String sex = rs.getString("sex");
String position = rs.getString("position");
int price = rs.getInt("price");
String shelf_date = rs.getString(6);
Hero h1 = new Hero(id,name,sex,position,price,shelf_date);
heroes.add(h1);
// System.out.println(id + "--" + name + "--" + sex + "--" + position + "--" + price + "--" + shelf_date);
}
//7、释放与mysql的连接资源
rs.close();
pst.close();
conn.close();
System.out.println(heroes);
}
}
数据增删改
package com.hqyj.dao;
import com.hqyj.entity.Hero;
import java.sql.*;
import java.util.ArrayList;
/*
* dao包称为数据持久层,用于保存操作数据库的类
* 命名通常用“表名+dao”
* */
public class HeroDao {
/*
* 查询方法
* */
Connection conn;
PreparedStatement pst;
ResultSet rs;
public ArrayList<Hero> queryAll(){
ArrayList<Hero> list = new ArrayList<>();
try {
//1、加载驱动
Class