IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Java的JDBC编程 -> 正文阅读

[大数据]Java的JDBC编程

目录

1.JDBC工作原理

2. JDBC使用

2.1 JDBC 配置

3.代码编程

?3.1 代码优化

?4.?JDBC常用接口和类

4.1?JDBC API

4.2?数据库连接Connection

4.3 Statement对象

4.4?ResultSet对象

?5. 应用案例

5.1 删除操作

?5.2 修改操作

5.3 查询操作


1.JDBC工作原理

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

2)JDBC 优势:

Java 语言访问数据库操作完全面向抽象接口编程
开发数据库应用不用限定在特定数据库厂商的 API
程序的可移植性大大增强

2. JDBC使用

2.1 JDBC 配置

1)准备数据库驱动包

2)在项目中创建文件夹 lib ,并将依赖包 mysql-connector-java-5.1.49.jar 复制到 lib 中。

?

?3)右键 lib目录,点击 add as library

点击这个选项,才能把jar包引入到项目中,此时项目才会从jar里面读取内部的 .class文件,否则代码就找不到jar中的一些类。

再配置该 jar包到本项目的依赖中:右键点击项目Open Module Settings ,在 Modules 中,点击项目,配置 Dependencies,点击 + JARS or Directories ,将该 lib 文件夹配置进依赖中,表示该文件夹下的jar包都引入作为依赖。

3.代码编程

1)创建好数据源

创建DataSource 对象,这个对象描述了数据库服务器在什么地方

        ///1.创建好数据源
        DataSource dataSource = new MysqlDataSource();
        //设置数据库所在地址
        ((MysqlDataSource) dataSource).setUrl();
        //设置数据库的而用户名
        ((MysqlDataSource) dataSource).setUser();
        //设置数据库的额密码
        ((MysqlDataSource) dataSource).setPassword();

2)与数据库服务器建立连接

Connection connection = dataSource.getConnection();

3)操作数据库?

关键在于构造一个 SQL语句
在JDBC中构造SQL,不必带上;
;只是在命令中用来区分不同的语句,现在是直接在代码中操作
String sql = "insert into student values (?, ?)";
// 此处光是一个 String 类型的 sql 还不行, 需要把这个 String 包装成一个 "语句对象"
 PreparedStatement statement = connection.prepareStatement(sql);

4)执行SQL

SQL 里面如果是 insert, update, delete, 都使用 executeUpdate 方法。
SQL 里面如果是 select, 则使用 executeQuery 方法。
返回值就表示这个操作, 影响到了 几行. 就相当于在控制台里输入 sql 之后, 得到的数字
int ret = statement.executeUpdate();
System.out.println(ret);

5)释放资源

SQL 已经执行完毕. 然后还需要释放资源
statement.close();
connection.close();

6)在MySQL中键student 表

如果不建表的话,会执行失败

?7)验证

idea 控制台执行增入一个

?来看MySQL表中的数据

?3.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 TestJDBC {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);

        // 1. 创建好数据源
        DataSource dataSource = new MysqlDataSource();
        // 设置数据库所在的地址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");
        // 设置登录数据库的用户名
        ((MysqlDataSource) dataSource).setUser("root");
        // 这个是设置登录数据库的密码
        ((MysqlDataSource) dataSource).setPassword("");

        // 2. 让代码和数据库服务器建立连接~~ 相当于到达了菜鸟驿站
        Connection connection = dataSource.getConnection();

        // 2.5 让用户通过控制台输入一下待插入的数据.
       System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name = scanner.next();

        // 3. 操作数据库. 以插入数据为例.
        //    关键所在就是构造一个 SQL 语句~
        //    在 JDBC 中构造的 SQL, 不必带上 ;
        //    ; 只是在命令行中用来区分不同的语句. 现在是直接在代码中操作
        String sql = "insert into student values(?, ?)";
        // 此处一个 String 类型的 sql 还不行, 需要把这个 String 包装成一个 "语句对象"
        PreparedStatement statement = connection.prepareStatement(sql);
        // 进行替换操作.
        statement.setInt(1, id);
        statement.setString(2, name);
        System.out.println("statement: " + statement);

        // 4. 执行 SQL , 相当于扫码取件
        //    SQL 里面如果是 insert, update, delete, 都使用 executeUpdate 方法.
        //    SQL 里面如果是 select, 则使用 executeQuery 方法.
        //    返回值就表示这个操作, 影响到了 几行. 就相当于在控制台里输入 sql 之后, 得到的数字~
        int ret = statement.executeUpdate();
        System.out.println(ret);

        // 5. 此时 SQL 已经执行完毕. 然后还需要释放资源.
        statement.close();
        connection.close();
    }
}

?运行结果

?数据库保存的数据

?4.?JDBC常用接口和类

4.1?JDBC API

Java JDBC 编程中对数据库的操作均使用 JDK 自带的 API 统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握Java JDBC API (位于 java.sql 包下)即可掌握 Java 数据库编程。

4.2?数据库连接Connection

Connection 接口实现类由数据库提供,获取 Connection 对象通常有两种方式:
1)一种是通过 DriverManager (驱动管理类)的静态方法获取:
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connectionconnection = DriverManager.getConnection(url);

2)?一种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象

DataSourceds=newMysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("root");
Connectionconnection = ds.getConnection();
以上两种方式的区别是:
1. DriverManager 类来获取的 Connection连接,是无法重复利用的,每次使用完以后释放资源时,通过 connection.close() 都是关闭物理连接。
2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接 是可以复用的,每次使用完数据库连接,释放资源调用 connection.close() 都是将
Conncetion 连接对象回收。

4.3 Statement对象

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。

?主要掌握两种执行SQL的方法:

executeQuery() 方法执行后返回单个结果集的,通常用于 select 语句
executeUpdate() 方法返回值是一个整数,指示受影响的行数,通常用于 update insert delete语句

4.4?ResultSet对象

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

?5. 应用案例

5.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 JDBCDelete {
    public static void main(String[] args) throws SQLException {
        //删除数据库中的记录
        //让用户输入一个 ID, 根据ID 来删除
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2.建立连接
        Connection connection = dataSource.getConnection();

        //3.用户输入 id
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个要删除的 id: ");
        int id = scanner.nextInt();

        //4.拼接sql语句
        String sql = "delete from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);

        //5.执行sql
        int ret = statement.executeUpdate();
        System.out.println("ret= " + ret);

        //6.回收释放资源
        statement.close();
        connection.close();

    }
}

?在数据库中也显示成功了

?

?5.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 JDBCUpdate {
    public static void main(String[] args) throws SQLException {
        // 根据 id 来修改学生姓名. 让用户输入 要修改的 id, 以及对应的修改后的名字.

        //1.创建数据库源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        //3.输入信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要修改的学生id:");
        int id = scanner.nextInt();
        System.out.println("将名字修改成:");
        String name = scanner.next();

        //4.拼装SQL
        String sql = "update student set name = ? where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2, id);
        System.out.println("statement" + statement);

        //5.执行sql
        int ret = statement.executeUpdate();
        System.out.println("ret= " + ret);

        //回收资源
        statement.close();
        connection.close();
    }
}

?运行结果

5.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;

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/java102?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2.建立数据库连接
        Connection connection = dataSource.getConnection();

        //3.拼装SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.执行sql, 查询需要使用 executeQuery
        ResultSet resultSet = statement.executeQuery();

        //5.遍历结果集合(返回临时表),先获取每一行,在获取每一行的若干类
        while (resultSet.next()) {
            //当前行获取当前列
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id= " + id + "name= " +name);
        }

        //6.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
查询结果

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:34:26  更:2022-07-05 23:34:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/29 7:59:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码