文章目录
- 初识 JDBC
- 准备工作
- 第一个 JDBC 程序
- JDBC 中对象解释
- Statement 对象详解
- 提取工具类
初识 JDBC
应用程序不能直接连接数据库,需要通过数据库驱动进行连接,JDBC 就是 sun 公司为了简化开发人员的对数据库统一的操作,提供了一个 Java 操作数据库的规范,也就是 JDBC
准备工作
下载 jdbc 包,版本自己选择
链接: https://mvnrepository.com/artifact/mysql/mysql-connector-java
第一个 JDBC 程序
1、创建测试数据库和Java普通项目
2、导入数据库驱动
- 新建一个 lib 目录
- 将 .jar 拷贝到lib 目录中
- 右击选择 add as library
3、编写测试连接
package jdbc;
import java.sql.*;
/**
* @Title:
* @Package
* @Description: 我的第一个 jdbc 程序
* @author: maze
* @date 2020/11/11上午 10:37
*/
public class test1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver"); // 固定写法
//2. 用户连接信息
/* 请注意:不建议在没有服务器身份验证的情况下建立SSL连接。
根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果不设置显式选项,则必须建立默认的SSL连接。
您需要通过设置useSSL=false显式地禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储
*/
String url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false";
String username = "root";
String password = "123456";
//3,连接成功,数据库对象
Connection connection = DriverManager.getConnection(url, username, password);
//4. 执行 SQL 对象
Statement statement = connection.createStatement();
//5. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果
String sql ="SELECT * FROM t_student";
ResultSet resultSet = statement.executeQuery(sql); //返回的结果集
// 输出结果
while(resultSet.next()){
System.out.print("id="+resultSet.getObject("stuId")+" ");
System.out.print("name="+resultSet.getObject("stuName")+" ");
System.out.print("password="+resultSet.getObject("passWord")+" ");
System.out.print("gender="+resultSet.getObject("gender")+" ");
System.out.println();
}
//6. 释放连接
resultSet.close();
statement.close();
connection.close();
}
}
步骤总结
- 加载驱动
- 连接数据库 DiverMarager
- 获取执行 SQL 的对象 Stame
- 获得返回的结果集
- 释放连接
JDBC 中对象解释
DriverManager
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, username, password);
// connection 代表的是数据库
connection.commit(); // 提交
connection.rollback(); // 回滚
connection.setAutoCommit(); // 自动提交
URL
String url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false";
statement 执行 SQL 对象
//4. 执行 SQL 对象
Statement statement = connection.createStatement();
//5. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果
String sql ="SELECT * FROM t_student";
ResultSet resultSet = statement.executeQuery(sql); //返回的结果集
statement.executeQuery(); //查询操作返回集
statement.executeUpdate(); //更新、插入、删除、都是用这个,返回受影响的行数
statement.execute(); // 执行任何 SQL 语句
ResultSet : 查询的结果集,封装了所有的查询结果
获得指定的数据类型
resultSet.getObject(); // 在不知道类型的情况下使用
resultSet.getString(); //
resultSet.getInt(); //
resultSet.getFloat(); //
resultSet.getDate(); //
遍历、指针
resultSet.beforeFirst();//移动到最前面
resultSet.afterLast();//移动到最后面
resultSet.next();//移动到下一个数据
resultSet.previous();//移动到前一行
resultSet.absoulte(row);//移动到指定行
Statement 对象详解
封装了增删查改接口,对数据库进行操作
package jdbc;
import JavaSE.oop.Test;
import java.sql.*;
/**
* @Title:
* @Package
* @Description: 我的第一个 jdbc 程序
* @author: maze
* @date 2020/11/11上午 10:37
*/
public class test1 {
private String url;
private String username;
private String password;
private Connection connection; // 连接对象
private Statement statement; // 执行对象
// 构造方法
public test1() throws Exception {
Class.forName("com.mysql.jdbc.Driver"); // 固定写法
url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false";
username = "root";
password = "123456";
//3,连接成功,数据库对象
connection = DriverManager.getConnection(url, username, password);
//4. 执行 SQL 对象
statement = connection.createStatement();
}
public static void main(String[] args) throws Exception {
// 1.查询 new test1().select();
// 2. 插入信息 new test1().insert("安琪拉","121415hfs","女");
//3. 删除信息, 指定 stuId 号 new test1().delete(14);
//4. 修改信息, 指定 stuId 号,进行修改
//new test1().update(7,"叶剑","12896d","男");
}
public void update(int id,String name,String password,String gender) throws SQLException {
// 1.拼装修改语句
String sql = "UPDATE t_student SET stuName='"+name+"',`password`='"+password+"',gender='"+gender+"' WHERE stuId="+id+";";
//2.发送 sql
int num = statement.executeUpdate(sql);
//3、处理返回结果
if(num > 0) {
System.out.println("修改成功");
}
//4、关闭连接资源
statement.close();
connection.close();
}
public void delete(int id) throws Exception {
// 1.拼装语句
String sql = "DELETE FROM t_student WHERE stuId="+id+";";
//2.发送sql
int num = statement.executeUpdate(sql);
//3、处理返回结果
if(num > 0) {
System.out.println("删除成功");
}
//5、关闭连接资源
statement.close();
connection.close();
}
// 增加学生信息
public void insert(String name,String password,String gender) throws Exception {
// 1.拼装语句
String sql = "INSERT INTO t_student (stuName,`passWord`,gender) VALUES"+
"('"+name+"','"+password+"','"+gender+"');";
//2.操作 sql
int num = statement.executeUpdate(sql);
//4、处理返回结果
if(num > 0) {
System.out.println("添加成功");
}
//5、关闭连接资源
statement.close();
connection.close();
}
// 查询所有学生信息
public void select() throws Exception{
//1. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果
String sql ="SELECT * FROM t_student";
ResultSet resultSet = statement.executeQuery(sql); //返回的结果集
//2.输出结果
while(resultSet.next()){
System.out.print("id="+resultSet.getObject("stuId")+" ");
System.out.print("name="+resultSet.getObject("stuName")+" ");
System.out.print("password="+resultSet.getObject("passWord")+" ");
System.out.print("gender="+resultSet.getObject("gender")+" ");
System.out.println();
}
//3. 释放连接
resultSet.close();
statement.close();
connection.close();
}
}
提取工具类
提取工具类其实和封装差不多,封装是把经常写的代码封装到一个类或者方法中,提取工具类是把用户信息写到文件中,然后利用 IO 流去读取信息
步骤1:配置文件 db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=123456
步骤2:封装工具类
package jdbc.utils;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* @Title:
* @Package
* @Description: 读取配置文件 db.properties
* @author: maze
* @date 2020/11/12上午 9:12
*/
public class Jdbcutils {
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
static{
try{
InputStream inputStream = Jdbcutils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(inputStream);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
// 加载驱动
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取链接
public static Connection getConnect() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
// 释放资源
public static void release(Connection co, Statement st, ResultSet rs) throws Exception {
if(rs != null) {
rs.close();
}
if(st != null){
st.close();
}
if(co != null){
co.close();
}
}
}
步骤3:测试案例
插入数据
package jdbc.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @Title:
* @Package
* @Description: 插入测试
* @author: maze
* @date 2020/11/12上午 9:44
*/
public class TestInsert {
public static void main(String[] args) throws Exception {
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
try{
// 建立连接,获取 sql 执行对象
connection = Jdbcutils.getConnect();
statement = connection.createStatement();
String sql="INSERT INTO t_student(stuName,`passWord`,gender) VALUES ('马泽','312421798','男');";
int num = statement.executeUpdate(sql);
if(num > 0){
System.out.println("插入成功");
}
else{
System.out.println("插入失败");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
Jdbcutils.release(connection,statement,resultset);
}
}
}
删除数据
package jdbc.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @Title:
* @Package
* @Description:
* @author: maze
* @date 2020/11/12上午 11:06
*/
public class TestDelete {
public static void main(String[] args) throws Exception {
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
try{
// 建立连接,获取 sql 执行对象
connection = Jdbcutils.getConnect();
statement = connection.createStatement();
String sql="DELETE FROM t_student WHERE stuId=10";
int num = statement.executeUpdate(sql);
if(num > 0){
System.out.println("删除成功");
}
else{
System.out.println("删除失败");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
Jdbcutils.release(connection,statement,resultset);
}
}
}
查询数据
package jdbc.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @Title:
* @Package
* @Description: 查询数据库的数据
* @author: maze
* @date 2020/11/12上午 11:12
*/
public class TestSelect {
public static void main(String[] args) throws Exception {
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
try{
// 建立连接,获取 sql 执行对象
connection = Jdbcutils.getConnect();
statement = connection.createStatement();
// 查询语句
String sql ="SELECT * FROM t_student";
ResultSet resultSet = statement.executeQuery(sql); //返回的结果集
// 输出结果
while(resultSet.next()){
System.out.print("id="+resultSet.getObject("stuId")+" ");
System.out.print("name="+resultSet.getObject("stuName")+" ");
System.out.print("password="+resultSet.getObject("passWord")+" ");
System.out.print("gender="+resultSet.getObject("gender")+" ");
System.out.println();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
Jdbcutils.release(connection,statement,resultset);
}
}
}
修改数据
package jdbc.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @Title:
* @Package
* @Description: 修改数据库的数据
* @author: maze
* @date 2020/11/12下午 14:09
*/
public class TestUpdate {
public static void main(String[] args) throws Exception {
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
try{
// 建立连接,获取 sql 执行对象
connection = Jdbcutils.getConnect();
statement = connection.createStatement();
String sql = "UPDATE t_student SET stuName='马泽',`password`='fjslk214i',gender='男' WHERE stuId=1";
int num = statement.executeUpdate(sql);
if(num > 0){
System.out.println("修改成功");
}
else{
System.out.println("修改失败");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
Jdbcutils.release(connection,statement,resultset);
}
}
}