我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java基础之JDBC的数据库连接与基本操作

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java基础之JDBC的数据库连接与基本操作

一、JDBC概述

  • JDBC全称Java Database Connectivity,它是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口,定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源
  • 通俗的来说,JDBC就是让我们通过Java来连接任何提供了JDBC驱动程序的数据库系统,比如我有一个SQLServer数据和一个Mysql数据库,我可以通过Java的JDBC来完成前面学习SQL中的所有操作,而无需在命令行来分别连接它们两个,就像这样

在这里插入图片描述 

二、JDBC操作数据库、操作表步骤

我来总结一下JDBC操作数据库与表的步骤,然后详细来介绍它们

1.注册驱动 (只做一次)

2.建立连接(Connection)

3.创建执行SQL的语句(Statement)

4.执行语句

5.处理执行结果(ResultSet)

6.释放资源

看到这里是不是很熟悉,没错,就跟我们前面学习Mysql一样,首先我来介绍一下JDBC的结构与数据库的连接

三、JDBC体系结构与JDBC API

JDBC体系结构由下面两部分组成:

  • 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
  • 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序使用

JDBC API

  • JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果

在这里插入图片描述 

四、注册与加载驱动

Driver接口

  • java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现
  • 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现
  • Oracle的驱动:oracle.jdbc.driver.OracleDriver
  • mySql的驱动: com.mysql.jdbc.Driver

加载与注册JDBC驱动

前面我们说了,JDBC就是通过一个接口和不同数据库提供了JDBC的驱动来完成数据的操作,因此,我们将驱动加载到JDBC中,加载驱动有两种方式:

方式一:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名


Class.forName(“com.mysql.jdbc.Driver”);

方式二:DriverManager 类是驱动程序管理器类,负责管理驱动程序


DriverManager.registerDriver(com.mysql.jdbc.Driver);

通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例

五、建立连接(Connection)

  • 当我们注册并加载驱动后,就可以连接数据库了,方法和前面我们学习Mysql一样,首先需要输入账号,密码等信息
  • 在JDBC中,我们需要调用DriverManager 类的 getConnection() 方法建立到数据库的连接
  • user,password可以用“属性名=属性值”方式告诉数据库;
  • 在JDBC中连接数据库需要一个特殊的属性,JDBC URL,它用于连接我们需要操作的数据库
  • JDBC URL的标准由三部分组成,各部分间用冒号分隔。

jdbc:子协议:子名称
协议:JDBC URL中的协议总是jdbc 
子协议:子协议用于标识一个数据库驱动程序
子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号,数据库名

下面我来列举几个常见的JDBC URL,大家使用的时候直接复制就好


// 对于 Oracle 数据库连接,采用如下形式: 
jdbc:oracle:thin:@localhost:1521:DatabaseName
// 对于 SQLServer 数据库连接,采用如下形式:
jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid
// 对于 MYSQL 数据库连接,采用如下形式:   
jdbc:mysql://localhost:3306/DatabaseName
// 插入中文的时候,这个url要写成这个
jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=UTF-8

小伙伴们注意一下,当我们使用Java向数据库中插入一个数据时,如果是中文,首先数据库和表的编码是utf8,其次就是我们要在URL中声明一下编码是UTF-8,不然插入数据是?,如果你们遇到这个问题,那就忽略它

好了,下面是连接数据库的示例代码,这里我操作的是Mysql数据库


package com.company;
// 导入依赖包
import org.junit.Test;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class Demo1 {

    public static void main(String[] args) {
        System.out.println("JDBC Test...");
    }
	
	// 使用Driver来实现数据库连接
    @Test
    public void test1() throws SQLException {
		// 
        Driver driver=new com.mysql.jdbc.Driver();
        Properties p1 = new Properties();
        p1.setProperty("user", "root");
        p1.setProperty("password", "mysql123");
        Connection connect = driver.connect("jdbc:mysql://localhost:3306/myemployees", p1);
        System.out.println("connect = " + connect);

    }
	
	// 使用DriverManager来实现数据库连接
    @Test
    public void test2() throws SQLException {
        com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
        Properties p1 = new Properties();
        p1.setProperty("user", "root");
        p1.setProperty("password", "mysql123");
        DriverManager.registerDriver(driver);
        Connection connection = DriverManager.getConnection
                ("jdbc:mysql://localhost:3306/myemployees", p1);

        System.out.println("connection = " + connection);

    }
	// 将账号密码抽出到配置文件中,并使用IO流读取配置文件的方式连接数据库
    @Test
    public void test3() throws Exception {
        Properties p = new Properties();

        FileInputStream fis = new FileInputStream("p.properties");
        p.load(fis);
        fis.close();
        Class.forName(p.getProperty("driverClass"));
        Connection connection = DriverManager.getConnection(p.getProperty("url"),
                p.getProperty("user"), p.getProperty("password"));
        System.out.println("connection = " + connection);

    }
}

properties文件内容


url=jdbc:mysql://localhost:3306/myemployees
user=root
password=mysql123
driverClass=com.mysql.jdbc.Driver

六、使用PreparedStatement

介绍完注册驱动与数据库的连接,接下来就是操作SQL了,在JDBC中,操作SQL需要使用Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象

PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句

PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数. setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

在操作SQL前还要说明一下数据类型,我们知道SQL与Java的数据类型命名是不一样的,所以我们在编码时要注意

java类型 SQL类型
boolean BIT
byte TINYINT
short SMALLINT
int INTEGER
long BIGINT
String CHAR,VARCHAR,LONGVARCHAR
byte array BINARY , VAR BINARY
java.sql.Date DATE
java.sql.Time TIME
java.sql.Timestamp TIMESTAMP

使用PreparedStatementSQL的操作步骤

1.调用连接对象的prepareStatement方法,创建PreparedStatement对象

2.完成预编译的SQL语句

3.对SQL语句中的占位符进行赋值

4.提交SQL语句

5.释放资源

接下来就是操作SQL增删改查的示例代码(为了方便操作,我将数据库连接抽出到了JDBCUtils类中)


// 使用PreparedStatement来完成数据的增删改查操作
package com.company.jdbc;

import org.junit.Test;

import java.io.FileInputStream;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;


public class CRUDDemo {

    
    @Test
    public void test() throws SQLException {
        //1.获取数据库连接对象
        Connection connection = JDBCUtils.getConnection();
        //2.预编译
        // ? : 占位符(只能是设置数据的地方可以写成占位符)
        String sql = "insert into student(sid,sname,sage) values(?,?,?)";
        PreparedStatement ps = connection.prepareStatement(sql);
        //3.给占位符赋值
        
        ps.setInt(1,100);
        //数据设置成中文可不可以取决于表的编码集
        ps.setString(2,"longge");
        ps.setInt(3,20);
        //4.执行sql
        //返回值 : 有几条数据受到影响
        int result = ps.executeUpdate();//增,删,改的语句使用该方法
        System.out.println("有"+result+"条数据受到影响");
        //5.关资源
        JDBCUtils.close(ps,connection);
    }

    
    @Test
    public void test2() throws SQLException {
        //1.获取数据库连接对象
        Connection connection = JDBCUtils.getConnection();
        //2.预编译
        String sql = "update student set sid=? where sid=?";
        PreparedStatement ps = connection.prepareStatement(sql);
        //3.给占位符赋值
        ps.setInt(1,10);
        ps.setInt(2,100);
        //4.执行sql语句
        int result = ps.executeUpdate();
        System.out.println("有"+result+"条数据受到影响");
        //5.关闭资源
        JDBCUtils.close(ps,connection);
    }

    
    @Test
    public void test3() throws SQLException {
        //1.获取数据库连接对象
        Connection connection = JDBCUtils.getConnection();
        //2.预编译
        String sql = "delete from student where sid=?";
        PreparedStatement ps = connection.prepareStatement(sql);
        //3.给占位符赋值
        ps.setInt(1,10);
        //4.执行sql语句
        int i = ps.executeUpdate();
        System.out.println("有"+i+"条数据受到影响");
        //5.关闭资源
        JDBCUtils.close(ps,connection);
    }

    
    @Test
    public void test4() throws Exception {
        List<Student> students = getStudent();
        for (Student s : students) {
            System.out.println(s);
        }

    }

    public List<Student> getStudent() throws Exception {
        //1.获取数据库连接对象
        Connection connection = JDBCUtils.getConnection();
        //2.预编译
        PreparedStatement ps = connection.prepareStatement("select sid,sname,sage from student");
        //3.执行sql语句
        ResultSet resultSet = ps.executeQuery();//查询语必须执行此方法

        List<Student> list =  new ArrayList<>();
        //4.遍历ResultSet
        while(resultSet.next()){//是否有数据
            
            int sid = resultSet.getInt("sid");
            String sname = resultSet.getString("sname");
            int sage = resultSet.getInt("sage");

            //System.out.println(sid + " " + sname + " " + sage);
            list.add(new Student(sid,sname,sage));
        }
        //5.关闭资源
        JDBCUtils.close(ps,connection,resultSet);

        return list;
    }

}

JDBCUtils连接数据库的工具类


//JDBCUtils类,专门实现数据库的连接与资源释放操作
package com.company.jdbc;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static String driverClass;
    private static String url;
    private static String username;
    private static String password;

    static{
        FileInputStream fis = null;
        try {
            //1.获取数据库连接对象
            //通过Properties读取内容
            //1.创建Properties对象
            Properties p = new Properties();
            //2.加载流
            fis = new FileInputStream("jdbc.properties");
            p.load(fis);
            driverClass = p.getProperty("driverClass");
            url = p.getProperty("url");
            username = p.getProperty("username");
            password = p.getProperty("password");
        }catch (Exception e){
            //终止程序的运行
            e.printStackTrace();
            //将编译时异常转换成运行时异常
            throw new RuntimeException("xxxxxxxx");
        }finally {
            if (fis != null){
                //3.关资源
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    
    public static Connection getConnection(){
        try {
            Class.forName(driverClass);
            //获取数据库连接对象
            Connection connection = DriverManager.getConnection(url, username, password);
            return connection;
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("获取连接失败");
        }
    }

    
    public static void close(PreparedStatement ps, Connection connection) {
        if (ps != null){
            try {
                ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (connection != null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

    public static void close(PreparedStatement ps, Connection connection, ResultSet resultSet) {
        close(ps,connection);
        if (resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

七、关于ResultSet的说明

在前面对数据的增删改查操作中,查询操作比较复杂一些,因为我们要接收数据库返回的结果,因此我们要了解一下ResultSet 接口,它由数据库厂商实现

查询需要调用Prepared Statement 的 executeQuery() 方法,查询结果是一个 ResultSet 对象

ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行,具体方法可以自定百度

ResultSet:代表结果集,其封装了使用 JDBC 进行查询的结果. 调用 PreparedStatement 对象的 executeQuery() 可以得到结果集.ResultSet 返回的实际上就是一张数据表. 有一个指针指向数据表的第一条记录的前面

在这里插入图片描述 

八、总结

本章主要介绍了JDBC以及JDBC如何连接数据库,实现数据的增删改查操作,下一章是JDBC的扩展知识—>我们自己实现的那个连接数据库的工具类毕竟不是那么严谨,下一章就是介绍一个框架,以后连接数据库就不用这么麻烦了.

到此这篇关于Java基础之JDBC的数据库连接与基本操作的文章就介绍到这了,更多相关JDBC的数据库连接与基本操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

Java基础之JDBC的数据库连接与基本操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java基础之JDBC连接数据库与基本操作的示例分析

小编给大家分享一下Java基础之JDBC连接数据库与基本操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java可以用来干什么Java主要应用于:1.
2023-06-14

【Mysql】数据库基础与基本操作

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘。 🛸Mysql专栏:Mys
2023-08-16

ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

1、MySQL存储过程      1.1、什么是存储过程      带有逻辑的sql语句;带有流程控制语句(if  while)等等 的sql语句  1.2、存储过程的特点      1)执行效率非常快,存储过程是数据库的服务器端执行的。      2)移植性
ava基础MySQL存储过程  Java基础 JDBC连接MySQL数据库
2019-07-25

Python连接Postgres/Mysql/Mongo数据库基本操作

这篇文章主要介绍“Python连接Postgres/Mysql/Mongo数据库基本操作”,在日常操作中,相信很多人在Python连接Postgres/Mysql/Mongo数据库基本操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
2023-06-20

Linux---连接mysql数据库以及基本操作

文章目录 一、连接MySQL二、MySQL的基本操作1.查询已有数据库2.创建数据库3.选定数据库4.查询数据库下的表5.查询表结构6.查询当前用户7.查询当前选择数据库8.删除数据库9.创建表10.插入表数据11.查询表数据12.
2023-08-24

Python之Sqlite3数据库基本操作

在一些小的应用中,难免会用到数据库,Sqlite数据库以其小巧轻便,无需安装,移植性好著称,本文主要以一个简单的小例子,简述Python在Sqlite数据库方面的应用,仅供学习分享使用,如有不足之处,还请指正。涉及知识点sqlite3是Python集成的内置类
Python之Sqlite3数据库基本操作
2017-01-09

DBeaver连接本地MySQL并创建数据库/表的基础操作教程

本文详细讲解了使用DBeaver连接本地MySQL数据库以及创建数据库和表的基本操作。具体步骤如下:连接MySQL启动DBeaver创建连接,选择MySQL驱动填写连接信息,测试并保存连接创建数据库右键单击数据库导航器选择“新建”>“数据库”输入数据库名称,选择字符集和排序创建表右键单击数据库选择“新建”>“表”输入表名,添加列设置主键,单击“确定”创建表本文还提供了Java代码示例,演示如何连接MySQL数据库、创建数据库和表。
DBeaver连接本地MySQL并创建数据库/表的基础操作教程
2024-04-02

MYSQL数据库基础之Join操作原理

Join使用的是Nested-Loop Join算法,Nested-Loop Join有三种select * from t1 join t2 on t1.a = t2.a; -- a 100条数据, b 1000条数据Simple Nest
2022-05-27

利用Python连接Oracle数据库的基本操作指南

这里我们采用的是使用Oracle数据库进行相关操作在连接数据库之间,应下载相应的工具包cx_Oracle,在你安装的python文件夹中找到script,在路径栏点击输入cmd回车进入命令行输入pip install cx_Oracle
2022-06-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录