当前位置: 首页 > article >正文

mysql-06.JDBC

目录

什么是JDBC:

为啥存在JDBC:

JDBC工作原理:

JDBC的优势:

下载mysql驱动包:

用java程序操作数据库

1.创建dataSource:

2.与服务端建立连接

3.构造sql语句

4.执行sql

5.关闭连接,释放资源

参考代码:

插入操作:

删除操作:

修改操作:

查询操作:

什么是JDBC:

jdbc:java datasource connectivity : java数据库连接

jdbc 是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。

为啥存在JDBC:

当前的数据库有很多种,有mysql,Oracle,SQL server等.

客户端可能使用不同的数据库进行操作,不同的数据库对应不同的编译语言,提供了不同的数据库驱动包,如:MySQL提 供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

这就带来了很多不便,更换数据库时,还要学习新的数据库的api,增加了使用成本。

JDBC就统一了数据库的连接规范,它为java开发人员提供了一套标准的api,可以为多种关系数据库统一访问。

JDBC工作原理:

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

JDBC的优势:

1.java语言访问数据库操作完全是面向抽象接口编程。

2.开发数据库应用提供api不需要针对特定的api.

3.程序的可移植性大大增强。

下载mysql驱动包:

下载可以有多种方式,可以在中央仓库中下载:

https://mvnrepository.com/https://mvnrepository.com/

下载步骤:

1.搜索mysql:

2,选择下载版本

3.选择一个版本,点进去,点jar包下载

下载完成后,创建java项目,新建一个包(lib,名字随意),将下载好的驱动包粘贴到这个包中

将创建的包添加为库

准备工作完成,下面就可以通过java程序操作数据库了

用java程序操作数据库

1.创建dataSource:

创建数据源头,就是数据库所在的位置

DataSource是一个接口,MysqlDataSource是mysql驱动包中的,通过MysqlDataSource来实现。

设置数据库位置:

对dataSource使用,要向下转型: DataSource->MysqlDataSource,通过下载的驱动包来设置,

当然也可以直接使用MysqlDataSource来创建源头数据:

但这种方法会在代码中多次出现MysqlDataSource类,不利于提高代码的耦合性,还是建议使用第一种方法设置。

setUrl():URL:表示网络上资源的位置,也叫“网址”,mysql是一个客户端服务器结构的程序,需要通过网络进行交互。

JDBC:mysql : url是JDBC操作MySQL使用的;

127.0.0.1:IP地址,127.0.0.1是一个特殊的IP地址,“环回地址”,由于我们当前的数据库和java程序是在同一台机器上,因此就是将数据发送给自己,就要用环回地址。

3306:端口号,接收数据端的端口号;

java109:数据库名,在执行java代码时,提前创建好数据库和表;

:问号?后面的是一些访问资源时候用到的参数,设置字符集为utf8,useSSL表示是否要加密,在练习的时候设为false,(设为true很可能连不上数据库)。

setUser():mysql的默认用户 : root;

setPassword(): 在安装数据库的时候手动设置的数据库密码;

2.与服务端建立连接

Connection有很多包,注意要导入 java.sql包

这里有一个受查异常,要手动处理:

3.构造sql语句

执行插入数据操作

可以直接指定内容,也可以通过字符串拼接,通过控制台输入要插入的数据,

还可以通过? ,搭配setXXX,来手动输入要插入的数据,

第一个参数 是?的位置,第二个参数 是要传入的数据。

sql语句是字符串,通过prepareStatement()方法,先将sql语句进行解析检查,得到结构化数据,将结构化数据传送给数据库,数据库就无需再进行对sql语句进行处理了,这样操作能为数据库节省更多的时间,可以处理更多的客户端请求。

虽然sql语句能以字符串的形式传给数据库,但若sql存在语法问题等,传过去的sql就无法执行,影响执行效率;直接传sql语法也存在一定的风险,不安全,因为不确定sql中到底写的什么。

删除操作:

修改操作:

查询操作:

4.执行sql

增删改:

增删改都属于对数据库的写操作,使用的方法是executeUpdate(),返回值是操作影响到的行数,为int类型。

查询:

查询属于读操作,使用executeQuery()方法,返回的是一个结果集,

resultSet相当于在查询到的结果集中,有一个光标,最初指向第0行,当还有数据时,就依次向下遍历,ResultSet有getXXX方法,根据列的类型,可以获取到要查找的数据。

5.关闭连接,释放资源

关闭顺序是:先创建的后释放,后创建的先释放。

参考代码:

插入操作:


public class Deam01 {
    //插入数据
    public static void main(String[] args) throws SQLException {
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入id:");
        int id = scan.nextInt();
        System.out.println("请输入姓名:");
        String name = scan.next();
//
//        MysqlDataSource mysqlDataSource=new MysqlDataSource();
//        mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
//        mysqlDataSource.setUser("root");
//        mysqlDataSource.setPassword("root");

        //1.创建dataSource
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("root");
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.构造sql
        //插入操作
        //法一
//        String sql="insert into student values(1,'zhangsan')";
        //法二
//        String sql="insert into student values("+id+",'"+name+"')";
        //法三
        String sql="insert into student values(?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,id);
        preparedStatement.setString(2,name);
        //4.执行sql
        int n = preparedStatement.executeUpdate();
        System.out.println("n= "+n);
        //5,关闭连接,释放资源
        preparedStatement.close();
        connection.close();

    }
}

删除操作:


public class Deam02 {
    public static void main(String[] args) throws SQLException {
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入姓名:");
        String name = scan.next();
        //数据库删除数据
        //1.创建dataSource
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("root");
        //2.和服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.构造sql
        String sql="delete from student where namr=? ";
        PreparedStatement preparedStatement= connection.prepareStatement(sql);
        preparedStatement.setString(1,name);
        //4.执行sql
        int n = preparedStatement.executeUpdate();
        System.out.println("n= "+n);
        //5.关闭连接,释放资源
        preparedStatement.close();
        connection.close();
    }
}

修改操作:


public class Deam07 {
    public static void main(String[] args) throws SQLException {
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入修改的name:");
        String name = scan.next();
        System.out.println("请输入源id");
        int oldid=scan.nextInt();
        //1.
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("root");
        //2.
        Connection connection = dataSource.getConnection();
        //3.修改sql
        String sql="update student set name=? where id=?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,name);
        preparedStatement.setInt(2,oldid);
        //4
        int n = preparedStatement.executeUpdate();
        System.out.println("n= " +n);
        preparedStatement.close();
        connection.close();
    }
}

查询操作:


public class Deam03 {
    public static void main(String[] args) throws SQLException {
        //数据库 查询操作
        //1.创建源数据
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("root");
        //2.和服务端建立连接
        Connection connection = dataSource.getConnection();
        //3.创建sql
        String sql="select * from student";
        PreparedStatement prepareStatement= connection.prepareStatement(sql);
        //4.执行sql
        ResultSet resultSet = prepareStatement.executeQuery();
        while(resultSet.next()){
            int id=resultSet.getInt("id");
            String name=resultSet.getString("namr");
            System.out.println("id= "+id+" name= "+name);
        }
        //关闭资源
        resultSet.close();
        connection.close();
        prepareStatement.close();
    }
}


http://www.kler.cn/a/517775.html

相关文章:

  • 【第六天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的贪心算法(持续更新)
  • CF 339A.Helpful Maths(Java实现)
  • 基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API
  • 苍穹外卖-day10
  • Redis高阶5-布隆过滤器
  • DELL EDI:需求分析及注意事项
  • 财税资金数据管理一体化大屏 | 智慧金融合集
  • YOLOv11实战天气图像识别
  • openstack单机安装
  • 激光线扫相机无2D图像的标定方案
  • Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250124
  • 朴素贝叶斯(Naive Bayes)详解
  • 寒假刷题Day13
  • UDP協議與代理IP介紹
  • 携程旅行 登录分析
  • windows系统如何检查是否开启了mongodb服务
  • Spring 面试题【每日20道】【其一】
  • C# OpenCV机器视觉:车道检测
  • HarmonyOS Next构建工具 lycium 原理介绍
  • uniapp商城之商品分类
  • 【C++高并发服务器WebServer】-3:进程控制(退出进程、孤儿进程、僵尸进程、进程回收)
  • 大模型GUI系列论文阅读 DAY3续4:《TREE SEARCH FOR LANGUAGE MODEL AGENTS》
  • 【机器学习】自定义数据集使用框架的线性回归方法对其进行拟合
  • Linux挂载samba共享文件夹
  • RubyFPV开源代码之系统简介
  • 【加密算法】简单区分HS、RSA、ES 和 ED,与对应go实现案例