MYSQL-JDBC编程(程序操作数据库)

?一,什么是JDBC

JDBC,即 Java Database Connectivity,Java 数据库连接。是⼀种用于执行 SQL 语句的 Java API,它是 Java 中的数据库连接规范。这个 API 由 java.sql.,javax.sql. 包中的⼀些类和接口组成,它为Java 开发⼈员操作数据库提供了⼀个标准的 API,可以为多种关系数据库提供统⼀访问

简单来说,使用了 JDBC 之后,不管是什么数据库与什么数据库驱动,我们只需要使用⼀套标准代码就可以实现对不同数据库进行统⼀操作(添加、修改、删除、查询),也就解决了我们上面说的那些问题了。

? 二,JDBC的工作原理

JDBC 为多种关系数据库提供了统⼀访问方式,作为特定厂商数据库访问 API 的⼀种高级抽象,它主要包含⼀些通用的接口类。

1,JDBC 访问数据库层次结构

在这里插入图片描述

2,JDBC的优势

(1)是Java语言访问数据库操作的编程,JDBC可以在MYSQL,SQL Server中使用
(2)开发数据库应用不用限定在特定的数据厂商的API
(3)程序的可移植性大大增强

?三,JDBC的使用

? 1,使用步骤

1.1创建项目并添加MYSQL驱动

(1)创建⼀个 Java 项⽬,并添加 MySQL 驱动(mysql-connector-java-5.1.47.jar),需要注意不同数据库版本要对应相应的驱动包
(2)双击scr,点击Modules,再点Dependencies,点击+号,选择驱动包,最后点OK
在这里插入图片描述
然后点击External libraries,看是否添加好驱动包
在这里插入图片描述

1.2使用代码操作数据库

操作数据库 MySQL 提供了两种操作 API:
⭐DriverManager
⭐DataSource(推荐使用)

接下来咱们使用DataSource 来实现操作数据库

1.首先获得数据源(MySQL 服务器地址,用户名、密码)

// 1.创建数据源
MysqlDataSource dataSource = new MysqlDataSource();
// 1.1 设置连接的 MySQL服务器地址
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?
characterEncoding=utf8&useSSL=true");
// 1.2 设置⽤户名
dataSource.setUser("root");
// 1.3 设置密码
dataSource.setPassword("******");

其中设置连接的MYSQL服务器地址具体如下:
在这里插入图片描述

2.得到一个连接 Connection

连接对象是 Connection,注意此步骤操作容易出错,⼀定是 com.mysql.jdbc 包下的 Connection 对象

//2,得到连接 
Connection Connection connection = (Connection) dataSource.getConnection();

在这里插入图片描述

3.获取执行器(连接到服务器并切换到数据库)

?执行器是来执行SQL 命令的,执行器有三种:
Statement
PreparedStatement 是最常用的
CallableStatement

String insertSQL = "insert into book(id,name) values(?,?)";
PreparedStatement statement = connection.prepareStatement(insertSQL);

4.处理结果集(输入命令,并得到结果)

PreparedStatement 有主要两种重要的⽅法:
⭐executeQuery():方法执行后返回单个结果集的,通常用于 select 语句。
⭐executeUpdate():方法返回值是⼀个整数,指示受影响的行数,通常用于 update、insert、delete 语句。

//添加,删除,更新操作
int num = statement.executeUpdate();//返回受影响的行数
//查询操作
ResultSet resultSet = statement.executeQuery();//得到结果集

5.释放资源

关闭数据库连接是为了不浪费 MySQL 服务器端的资源

statement.close();
connection.close();

?2,示例分析

在数据库libary下操作图书book表

(1)添加书籍"三体"操作

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class AddBook {
    public static void main(String[] args)throws SQLException {
        //1,得到数据源 DataSource
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/libary?characterEncoding=utf8&useSSL=false");
        dataSource.setUser("root");
        dataSource.setPassword("******");//密码
        //2,得到连接 Connection
        Connection connection = (Connection) dataSource.getConnection();

        //3,得到执行器,组装SQL
        String insertSQL = "insert into book(id,name) values(?,?)";
        PreparedStatement statement = connection.prepareStatement(insertSQL);
        //填充占位符
        statement.setInt(1,4);
        statement.setString(2,"三体");
        //4,执行SQL
        int num = statement.executeUpdate();//返回受影响的行数
        System.out.println("受影响的行数" + num);
        //5,关闭资源
        statement.close();
        connection.close();
    }
}

在这里插入图片描述

(2)修改书籍"论语"为"追风筝的人"

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UpBook {
    public static void main(String[] args)throws SQLException {
        //1,得到数据源
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/libary?characterEncoding=utf8&useSSL=false");
        dataSource.setUser("root");
        dataSource.setPassword("******");
        //2,得到连接
        Connection connection = (Connection) dataSource.getConnection();
        //3,得到执行器,组装SQL
        String updateSQL = "update book set name=? where name=?";
        PreparedStatement statement = connection.prepareStatement(updateSQL);
        statement.setString(1,"追风筝的人");//填充占位符
        statement.setString(2,"论语");
        //4,执行SQL
        int num = statement.executeUpdate();
        System.out.println("受影响行数:" + num);
        //5,关闭资源
        statement.close();
        connection.close();
    }
}

在这里插入图片描述

(3)删除id =3 的书籍

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeBook {
    public static void main(String[] args)throws SQLException {
        //得到数据源
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/libary?characterEncoding=utf8&useSSL=false");
        dataSource.setUser("root");
        dataSource.setPassword("******");
        //得到连接
        Connection connection = (Connection) dataSource.getConnection();
        //组装SQL
        String delSQL = "delete from book where id=?";
        PreparedStatement statement = connection.prepareStatement(delSQL);
        statement.setInt(1,3);
        //执行SQL
        int result = statement.executeUpdate();
        System.out.println("结果" + result);
        //关闭资源
        statement.close();
        connection.close();
    }
}

(4)查看id=4的书籍

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SeBook {
    public static void main(String[] args)throws SQLException {
        //得到数据源
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/libary?characterEncoding=utf8&useSSL=false");
        dataSource.setUser("root");
        dataSource.setPassword("zh020621");
        //得到连接Connection
        Connection connection = (Connection) dataSource.getConnection();
        //组装SQL
        String seSQL = "select * from book where id<?";
        PreparedStatement statement = connection.prepareStatement(seSQL);
        statement.setInt(1,3);
        //执行SQL,打印查询的结果【特殊】
        ResultSet resultSet = statement.executeQuery();//得到结果集
        while(resultSet.next()){//结果集有下一行的话
            // 每次循环可以得到一行数据
            Book book = new Book();
            // resultSet.getInt("id") 查询当前行中列名为“id”的值
            book.setId(resultSet.getInt("id"));
            book.setName(resultSet.getString("name"));
            System.out.println(book);
        }
        //关闭资源【特殊】
        resultSet.close();
        statement.close();
        connection.close();
    }
}

在这里插入图片描述

? 四,常用的接口和类

1,数据库连接Connection

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
(1)通过DataSource(数据源)对象获取,实际应用使用DataSource多

DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("root");
Connection connection = ds.getConnection();

(2)通过DriverManager(驱动管理类)的静态方法获取

// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);

注意:DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Conncetion连接对象回收

2,Statement对象

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象
Statement接口提供了执行语句和获取结果的基本方法;
(1)支持普通的不带参的查询SQL;
(2)支持批量更新,批量删除;
(3)默认情况下,同一时间每个Statement对象只能打开一个Resultset对象
在这里插入图片描述

3,ResultSet对象

ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环

例如:查询操作时就会用到ResultSet

 ResultSet resultSet = statement.executeQuery();//得到结果集
        while(resultSet.next()){
            // 每次循环可以得到一行数据
            Book book = new Book();
            book.setId(resultSet.getInt("id"));
            book.setName(resultSet.getString("name"));
            System.out.println(book);
        }

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>