文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL的JDBC 编程

2023-09-02 11:47

关注

目录

1.数据库编程:JDBC

2. JDBC工作原理

3. JDBC使用

3.1 驱动包的下载与导入

3.2 JDBC使用步骤(插入)

4.JDBC修改删除查询


1. 将数据库驱动包,添加到项目依赖中

创建目录,拷贝jar包,然后add as library

2. 创建数据源

DataSourse:数据源,描述了数据库服务器在哪里

3. 和数据库建立连接

使用JDBC里的Connection将代码和数据库服务器进行连接

一个程序中,通常有一个数据源对象,可以有多个Connection对象

4. 构造sql语句

PreparedStatement:表示一个预处理过的SQL语句对象

5. 执行sql语句

(1)executeUpdate 对应插入到删除修改语句,返回值表示这次SQL操作影响到的行数

(2)executeQuery 对应查询语句,返回值则是返回的临时表数据,用ResultSet接收

6. 释放资源

colse释放资源 先创建的后释放,后创建的先释放

1.数据库编程:JDBC

各种数据库,都会提供API,方便编程语言来控制 API:就是应用程序编程接口,提供了一组类/方法,让程序员直接调用 Oracle、SQL Server、MySQL、SQLite... 不同种类的数据库提供的API不一样
API不一样就会有很多问题 ( 提高程序员学习成本; 如果项目要把数据库替换成另一种,改动会非常大 Java中为了解决这个问题,就提供了一组统一风格的数据库操作API 然后让这些数据库厂商来适配java的API 所以程序员只要掌握这一套 java的API,就可以操作各种数据库,java把这个API叫JDBC

 

2. JDBC工作原理

 

3. JDBC使用

3.1 驱动包的下载与导入

下载方法:

(1)去Oracle官网下载(麻烦需要去官网登录注册才可以下载)

(2)去中央仓库下载(https://mvnrepository.com/ 

1.下载mysql驱动包 

1)打开中央仓库—搜索mysql驱动包

 2)找到和自己的mysql大版本对应的驱动包

 3)找到对应大版本,然后点击进行下载

 下载的是一个驱动包,驱动包在代码中才能看出来

 2.把刚刚下载的jar包导入到项目中,使用

1)先创建一个目录,比如名字叫lib,和src同级

 2)把刚才的jar包拷贝进lib中

 3)右键刚才的目录lib,找到add as library ,是idea可以识别到jar包

 


 

3.2 JDBC使用步骤(插入)

通过JDBC来操作数据库,往数据库java01中的student1表中插入一条记录

 

1. 将数据库驱动包,添加到项目依赖中

右键项目创建目录(点Directory,和src同级)——>拷贝驱动包到目录——>右键目录点击add as library(让idea识别jar包)

2. 建立数据库连接

创建数据源对象,数据源对象就描述了要访问的数据库是什么和数据库位置在哪里

        DataSource dataSource = new MysqlDataSource();//向下转型        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");        ((MysqlDataSource)dataSource).setUser("root");        ((MysqlDataSource)dataSource).setPassword("111111");

 每种数据库都会提供对应的类来实现DataSourse接口

调用的这个方法不是DataSource中的,而是MysqlDataSource转成子类引用,才可以调用这个方法(向下转型)

DataSource是服务于各种数据库的,
MysqlDataSource只服务于MySQL

MySQL中,是一个客户端服务器的程序,描述服务器的位置
会使用URL(去唯一资源定位符)这个概念来表示
但是有点的数据库,比如SQLite,就不是客户端服务器结构的
也就不使用URL

DataSource考虑到通用性,就不能使用setURL这样的方法

 也可以这样写,但不建议

这种写法是不使用多态的写法

这样写可能会让MysqlDataSource这个类型出现在代码的很多地方

导致MySQL和项目的耦合性就提高了

(如果以后要更换成其他数据库,就需要把很多出现MysqlDataSoucre这个类型的地方,都要进行修改,非常麻烦) 

3. 创建操作命令

让代码和数据库服务器建立连接

 Connection connection = dataSource.getConnection();

4. 构造和执行SQL语句

构造要执行的SQL语句

(1)直接插入的 

        //1.构造请求        String sql = "insert into student1 values(1, '张三')";        PreparedStatement statement = connection.prepareStatement(sql);        //2.发送请求 & 读取响应        //返回影响到的行数        int n = statement.executeUpdate();        System.out.println("n = " + n);

 SQL语句发给数据库,然后数据库对这个SQL进行解析

解析过程是比较消耗资源、消耗时间的,所以就将一部分解析的工作,放在客户端完成,

客户端完成后,1将解析结果发给数据库,这样就节省了资源开销,提高效率

 

 执行SQL,执行方法有两个

(1)executeUpdate 对应插入到删除修改语句,返回值表示这次SQL操作影响到的行数

(2)executeQuery 对应查询语句,返回值则是返回的临时表数据,用ResultSet接收

(2)用户输入,确定插入的值

这样做的好处是 代码可读性好,并且SQL注入问题得到改善

  //用户输入,通过用户输入的数据,来确定插入的值        Scanner scanner = new Scanner(System.in);        System.out.println("请输入要插入的学号:");        int id = scanner.nextInt();        System.out.println("请输入要插入的名字:");        String name = scanner.next();        //构造sql语句        String sql = "insert into student1 values(?,?)";        PreparedStatement statement = connection.prepareStatement(sql);        statement.setInt(1,id);        statement.setString(2,name);        System.out.println("statement: " + statement);        //执行sql语句        int n = statement.executeUpdate();        System.out.println("n = " + n);

5. 释放资源

完成之后,就需要关闭释放相关资源

释放资源的顺序和申请资源的顺序正好相反

(先创建的后释放,后创建的先释放)

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

执行代码

影响了一行

打开MySQL查询一下,看插入成功了没有 


 

4.JDBC修改删除查询

(1)修改 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Scanner;public class JDBCUpdate {    public static void main(String[] args) throws SQLException {        //1.创建数据源        DataSource dataSource = new MysqlDataSource();        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");        ((MysqlDataSource)dataSource).setUser("root");        ((MysqlDataSource)dataSource).setPassword("111111");        //2.和数据库建立连接        Connection connection = dataSource.getConnection();        //3.构造sql语句        Scanner scanner = new Scanner(System.in);        System.out.println("请输入要修改的同学学号:");        int id = scanner.nextInt();        System.out.println("请输入要修改的同学姓名:");        String name = scanner.next();        String sql = "update student1 set name = ? where id = ?";        PreparedStatement statement = connection.prepareStatement(sql);        statement.setString(1,name);        statement.setInt(2,id);        //4.执行sql语句        int n = statement.executeUpdate();        System.out.println("n = " + n);        //5.关闭释放资源        statement.close();        statement.close();    }}

运行代码后,在MySQL中查看是否修改成功 

 (2)删除

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Scanner;public class JDBCDelete {    public static void main(String[] args) throws SQLException {        //1.创建数据源        DataSource dataSource = new MysqlDataSource();        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");        ((MysqlDataSource)dataSource).setUser("root");        ((MysqlDataSource)dataSource).setPassword("111111");        //2.和数据库建立连接        Connection connection = dataSource.getConnection();        //3.构造sql语句        Scanner scanner = new Scanner(System.in);        System.out.println("请输入要删除的同学学号:");        int id = scanner.nextInt();        String sql = "delete from student1 where id = ?";        PreparedStatement statement = connection.prepareStatement(sql);        statement.setInt(1,id);        //4.执行sql语句        int n = statement.executeUpdate();        System.out.println("n = " + n);        //5.关闭释放资源        statement.close();        connection.close();    }}

执行代码,查看是否删除成功 

 (3)查询

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Scanner;public class JDBCSelect {    public static void main(String[] args) throws SQLException {        //1.创建数据源        DataSource dataSource = new MysqlDataSource();        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");        ((MysqlDataSource)dataSource).setUser("root");        ((MysqlDataSource)dataSource).setPassword("111111");        //2.和数据库建立连接        Connection connection = dataSource.getConnection();        //3.构造sql语句        String sql = "select * from student1";        PreparedStatement statement = connection.prepareStatement(sql);        //4.执行sql语句        //查询语句要使用executeQuery来完成        //返回结果是ResultSet,结果集,里面是一个“表”这样的数据结构        ResultSet resultSet = statement.executeQuery();        //5.遍历结果集合        while (resultSet.next()) {            //每次循环,都可以获取resultSet中的一行,进一步的就可以拿到每一列            int id = resultSet.getInt("id");            String name = resultSet.getString("name");            System.out.println("id = " + id + ", name = " + name);        }        //6.释放资源        resultSet.close();        statement.close();        connection.close();    }}

 也可以加上条件查询


 

来源地址:https://blog.csdn.net/m0_58761900/article/details/126197863

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯