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、数据库编程的条件

2、Java的数据库编程:JDBC

3、JDBC的使用

(1)环境准备

?(2)JDBC的使用

(3)JDBC使用实例


1、数据库编程的条件

  • 编程语言
  • 数据库
  • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdb

2、Java的数据库编程:JDBC

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

JDBC访问数据库的层次结构

JDBC优势:

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

3、JDBC的使用

(1)环境准备

jdbc开发,需要先准备一个驱动包(提前mysql下载驱动包)及配置(项目配置引入这个驱动包)

1、创建项目,最好将驱动包放在项目的某个目录下。

?2、项目右键

?3、添加依赖包

?最后需要验证是否配置正确。写一段代码,使用jar包中的接口或类:

?(2)JDBC的使用

1、URL

数据库:是一个网络主机上的数据库服务端进程,需要使用URL来连接。

?2、创建数据库连接

获取Connection对象的两种方式:

  • 通过DriverManager(驱动管理器)的静态方法获取
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
  • 通过DataSource(数据源/数据库连接池)对象获取。(实际应用中会使用DataSource对象)
MysqlDataSource ds = new MysqlDataSource();
ds.setUrl("jdbc:mysql://localhost:3306/test");
ds.setUser("root");
ds.setPassword("root");
ds.setUseSSL(false);
//设置编码方式
ds.setCharacterencoding("UTF-8");
Connection connection = ds.getConnection();

DriverManager和DataSource:

  • DriverManager获取·Connection连接,无法进行重复利用。每次使用完之后释放资源,通过connection.close()关闭物理连接。·
  • DataSource提供连接池的支持。连接池在初始化时创建一定数量的数据库连接,这些链接可以复用,每次使用完数据库连接,释放资源调用connection.close()都是将Connection连接对象回收(只是重置连接对象的属性并放回连接池)。

3、创建操作命令对象Statement(用于执行sql语句)

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

  • Statement:不带占位符的简单操作命令对象
  • PrepareStatement:带占位符的预编译操作命令对象(提前预编译,效率更高,防止sql注入,更安全)

  • CallableStatement:执行数据库存储过程的调用

4、执行sql语句

 ResultSet rs = ps.executeQuery();

5、处理结果集

如果是查询操作,调用executeQuery返回结果集;如果是插入、修改、删除操作,调用executeUpdate返回int表示处理成功多少条。

while (rs.next()){//遍历每一行数据
   //获取id字段的值
   int id = rs.getInt("c_id");
   String name = rs.getString("c_name");
   System.out.printf("id: %s, name: %s\n", id, name);
}

6、释放资源

//关闭结果集
    if (resultSet != null) {
        try {
        resultSet.close();
        } catch (SQLException e) {
        e.printStackTrace();
        }
    }
    //关闭命令
    if(statement!=null){
        try{
            statement.close();
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    //关闭连接命令
    if(connection!=null){
        try{
            connection.close();
        }catch(SQLException e){
            e.printStackTrace();
        }
    }

(3)JDBC使用实例

在数据库db_test的表course中插入一条数据

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class CourseInsert {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //使用数据库连接池来获取数据库连接对象
        //一个Java程序,创建多个还是1个连接池对象?一个
        MysqlDataSource ds = new MysqlDataSource();
        //url中的参数,可以使用方法来设置
        ds.setURL("jdbc:mysql://localhost:3306/db_test");
        ds.setUser("root");
        ds.setPassword("123456");
        ds.setUseSSL(false);//不使用安全连接,如果不设置有警告
        //设置编码格式:按某个编码保存数据,也要按一样的编码来使用
        ds.setCharacterEncoding("UTF-8");
        //1. 建立数据库连接
        Connection c = ds.getConnection();


        //2.创建操作命令对象
        //使用预编译的操作命令对象PreparedStatement
        //sql语句中,可能包含一些客户端网页传入的数据
        String inputName = "王者";//模拟客户端用户传入的id
        //? 是占位符,类似格式化打印中%s, %d,可以替换掉
        String sql = "insert into course(name) values(?)";
        PreparedStatement ps = c.prepareStatement(sql);

        /**
         * 替换占位符: setXXX(index, value)
         * XXX: 值的类型
         * index: 是占位符的索引位置(从1开始)
         * value: 要替换的值
         */
        ps.setString(1, inputName);

        //3.执行sql语句: 可以不加分号了(加上也不会报错)
        //插入,修改,删除,都调用executeUpdate,返回int是执行成功多少条
        int n = ps.executeUpdate();//预编译的操作命令对象执行无参的方法

        System.out.println(n);

        //5.释放资源:反向释放(resultSet, Statement, Connection).close()
    }
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:56:15  更:2022-04-28 11:58:09 
 
开发: 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年11日历 -2024/11/24 1:24:48-

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