JDBC简介和用JDBC连接数据库

什么是JDBC?Java数据库连接性简介 JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批组件之一。 本文提供了JDBC的概述,然后是使用JDBC API将Java客户端与轻量级关系数据库SQLite连接的动手入门。 JDBC如何工作 JDBC作为基于C的ODBC(开放数据库连接)API的... 阅读详情

大家好,我是一个爱举铁的程序员Shr。

 

本篇文章介绍JDBC,还有用JDBC连接数据库添加数据,查询数据。

 

源码地址:https://github.com/ShrMus/Dao/tree/master/dao_20180603/src/main/java/com/shrmus/jdbc01

 

一、什么是JDBC

JDBC的全称是Java DataBase Connectivity,Java数据库连接,它一套用来连接数据库的规范。我个人的理解JDBC是Java程序和数据库之间的桥梁。

 

二、为什么要使用JDBC

它可以和数据库建立连接,发送操作数据库的SQL语句,接收SQL语句的执行结果。

 

三、JDBC中的重要元素

3.1 驱动包

项目中导入驱动包才能使用JDBC,连接不同的数据库需要对应的Jar包。

SQL Server导入sqljdbc.jar

MySQL导入mysql-connector-java-5.0.4-bin.jar(5.0.4是版本号)

Oracle导入ojdbc6.jar

 

3.2 连接地址

连接数据库系统的URL是不一样的。

SQL Server :jdbc:sqlserver://localhost:1433;DatabaseName=数据库名

MySQL :jdbc:mysql://127.0.0.1:3306/数据库名

Oracle :jdbc:oracle:thin:@localhost:1521:orcl(orcl是Oracle数据库实例)

 

3.3 用户名和密码

登录数据库系统的用户名和密码

 

3.4 DriverManager类

管理数据库中所有驱动程序。

 

 

3.5 Connection接口

与数据库的连接,通过DriverManager类获取。

Connection connection = riverManager.getConnection();

 

3.6 Statement接口

在建立连接的基础上向数据库发送SQL语句,用于执行静态的SQL语句。通过连接对象获取。

Statement statement = connection .createStatement();

 

 

3.7 PreparedStatement接口

该接口继承Statement接口,用于执行动态的SQL语句。通过连接对象获取。

PreparedStatement prepareStatement = connection .prepareStatement(sql);

 

 

3.8 ResultSet接口

类似一张数据表,用来暂时存放数据库查询操作所获得的结果集。

ResultSet resultSet = statement.executeQuery(sql);

 

四、JDBC操作数据

4.1 创建数据库,新建表

创建数据库dao_20180603,新建表jdbc01_student。

CREATE TABLE `jdbc01_student` (
  `stu_id` int(11) NOT NULL,
  `stu_name` varchar(20) default NULL,
  `stu_age` int(11) default NULL,
  `stu_gender` int(11) default NULL,
  PRIMARY KEY  (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

4.2 连接数据库

public class DBUtil {
    /*  数据库驱动,其实就是对应的jar中的驱动类的全路径
        MySQL:      com.mysql.jdbc.Driver
           SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver
           Oracle 11g: oracle.jdbc.driver.OracleDriver
     */
    private static final String DRIVE_STRING = "com.mysql.jdbc.Driver";
    /*  数据库连接URL,数据库名为dao_20180603
        MySQL:      jdbc:mysql://localhost:3306/dao_20180603
         SQL Server: jdbc:sqlserver://localhost:1433;databaseName=dao_20180603
         Oracle 11g: jdbc:oracle:thin:@localhost:1521:orcl
     */
    private static final String URL_STRING = "jdbc:mysql://localhost:3306/dao_20180603?characterEncoding=utf8";
    // 数据库用户名
    private static final String USER_STRING = "root";
    // 数据库密码
    private static final String PASSWORD_STRING = "shrmus";
    // 数据库连接对象
    public static Connection connection;
    // SQL执行对象
    public static Statement statement;
    // 结果集对象
    public static ResultSet resultSet;
    // 加载驱动
    static {
        try {
            Class.forName(DRIVE_STRING);
        } catch (ClassNotFoundException e) {
            System.err.println("加载数据库驱动失败!");
        }
    }
    /**
     * 获取数据库连接对象
     * @return
     */
    public static Connection getConnection() {
        try {
            connection = DriverManager.getConnection(URL_STRING, USER_STRING, PASSWORD_STRING);
        } catch (SQLException e) {
            System.err.println("获取数据库连接对象失败!");
        }
        return connection;
    }
    /**
     * 关闭数据库连接对象
     * @param connection
     */
    public static void close(Connection connection) {
        if(null != connection) {
            try {
                connection.close();
            } catch (SQLException e) {
                System.err.println("关闭数据库连接对象失败!");
            }
        }
    }
    /**
     * 关闭SQL执行对象
     * @param statement
     */
    public static void close(Statement statement) {
        if(null != statement) {
            try {
                statement.close();
            } catch (SQLException e) {
                System.err.println("关闭SQL执行对象失败!");
            }
        }
    }
    /**
     * 关闭结果集对象
     * @param resultSet
     */
    public static void close(ResultSet resultSet) {
        if(null != resultSet) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                System.err.println("关闭结果集对象失败!");
            }
        }
    }
    /**
     * 关闭数据库连接对象,SQL执行对象,结果集对象
     * @param resultSet
     * @param statement
     * @param connection
     */
    public static void close(ResultSet resultSet, Statement statement, Connection connection){
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                System.err.println("关闭结果集对象失败!");
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                System.err.println("关闭SQL执行对象失败!");
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                System.err.println("关闭数据库连接对象失败!");
            }
        }
    }
}

 

4.3 添加一条记录到数据库

 

4.3.1 新建一个实体类

public class Student {
    private int id;
    private String name;
    private int age;
    private int gender;
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + "]";
    }
    public Student() {
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getGender() {
        return gender;
    }
    public void setGender(int gender) {
        this.gender = gender;
    }
}

 

4.3.2 新建一个Dao类

public class StudentDao {
    /**
     * 添加一条记录
     * @param student
     * @return
     */
    public int addStudent(Student student) {
        // 受影响的行数
        int acceptRow = 0;
        // 获取数据库连接对象
        Connection connection = DBUtil.getConnection();
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            // 获取SQL执行对象
            statement = connection.createStatement();
            // sql语句
            String sql = "insert into jdbc01_student(stu_id,stu_name,stu_age,stu_gender) "
            + "values("+student.getId()+",'"+student.getName()+"',"+student.getAge()+","+student.getGender()+")";
            System.out.println(sql);
            acceptRow = statement.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接
            DBUtil.close(resultSet, statement, connection);
        }
        return acceptRow;
    }
}

 

4.3.3 新建一个Service类

public class StudentService {
    /**
     * 添加一个学生的信息
     * @param student
     * @return
     */
    public int addStudent(Student student) {
        StudentDao studentDao = new StudentDao();
        int accpetRow = studentDao.addStudent(student);
        return accpetRow;
    }
}

 

4.3.4 新建一个测试类

public class StudentTest {
    @Test
    public void addStudent() throws Exception{
        StudentService studentService = new StudentService();
        Student student = new Student();
        student.setId(1);
        student.setName("张三");
        student.setAge(20);
        student.setGender(1);
        studentService.addStudent(student);
    }
}

 

执行测试类中的addStudent()方法就往数据库中添加了一条记录。

数据库中能查找到这条记录,那怎么在程序中查找到这条记录呢。接下来要讲的就是查找数据库中的记录。

 

4.4 查询数据库中的记录

4.4.1 在Dao类中添加查询方法

    /**
     * 查找所有学生
     * @return
     */
    public List<Student> getStudentList(){
        List<Student> studentList = new ArrayList<>();
        // 获取数据库连接对象
        Connection connection = DBUtil.getConnection();
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            // 获取SQL执行对象
            statement = connection.createStatement();
            // sql语句
            String sql = "select stu_id,stu_name,stu_age,stu_gender from jdbc01_student";
            // 获取结果集
            resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                Student student = new Student();
                // 根据列名获取值
                String idString = resultSet.getString("stu_id");
                String nameString = resultSet.getString("stu_name");
                String ageString = resultSet.getString("stu_age");
                String genderString = resultSet.getString("stu_gender");
                int id = Integer.parseInt(idString);
                int age = Integer.parseInt(ageString);
                int gender = Integer.parseInt(genderString);
                // 封装学生的信息
                student.setId(id);
                student.setName(nameString);
                student.setAge(age);
                student.setGender(gender);
                // 添加到集合中
                studentList.add(student);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接
            DBUtil.close(resultSet, statement, connection);
        }
        return studentList;
    }

 

4.4.2 在Service类中添加查询方法

    /**
     * 查找所有学生
     * @return
     */
    public List<Student> getStudentList(){
        StudentDao studentDao = new StudentDao();
        List<Student> studentList = studentDao.getStudentList();
        return studentList;
    }

 

4.4.3 在测试类中添加查询方法

    @Test
    public void getStudentList() throws Exception{
        StudentService studentService = new StudentService();
        List<Student> studentList = studentService.getStudentList();
        for(Student student : studentList) {
            System.out.println(student);
        }
    }

 

执行测试类中的查询方法就可以看到控制台打印的信息了。

Student [id=1, name=张三, age=20, gender=1]

 

修改和删除的代码我就不写了,读者可以自己根据查询和添加自己练习。

 

源码地址:https://github.com/ShrMus/Dao/tree/master/dao_20180603/src/main/java/com/shrmus/jdbc01

 

(20)JDBC简介、使用JDBC连接MySQL数据库详细步骤、连接数据库的代码 JDBC基本操作一、JDBC简介二级目录三级目录 一、JDBC简介 1.为什么会出现JDBC: SUN公司提供的一种数据库访问规则、规范,由于数据库种类较多,并且Java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。我们的Java程序只要使用SUN公司的JDBC驱动即可。 二级目录 三级目录 ... 阅读详情

相关推荐

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

qq_38120851的博客 4046

JDBC详解系列(三)之建立连接

在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤。 在此文章中,我大体分析了一下JDBC建立连接的过程。

Homejim的博客 822

前端零代码丨UIOTOS + NodeRed:无代码搭建工控上位机的绝配组合!

用户类型价值硬件产品商软硬一体方案,无代码GUI上位机成新卖点软件服务商售前原型演示利器,交付成本降低至1/3平台开发商融合无代码技术,同质化竞争中脱颖而出🚀 总结UIOTOS的前端零代码设计(页面嵌套、属性继承、节点连线)与NodeRed的后端流程自动化,堪称工控与IoT开发的黄金组合。无论是串口通信、SCADA监控还是业务管理,均能实现“无代码交付”,真正让前端不求人,硬件交互触手可及!探索更多案例:UIOTOS官网在线体验。

2502_91192798的博客 757

DriverManager.getConnection()方法涉及到的源码详解

DriverManager.getConnection一共有四个重载方法,前三个由public修饰,用来获取不同类型的参数,这三个getConnection实际相当于一个入口,他们最终都会return第四个私有化的getConnection方法,最终向第四个私有化方法的传入参数都是url,java.util.Properties,以及Reflection.getCallerClass(),这个方法...

HOXJUN的博客 4万+

GIS应用技巧之三招搞定重叠区域数据提取

在很多分析过程中,常常需要分析判断哪些图形发生了重叠,该重叠情况的发生在对应分析环境下具有特定意义。例如在缓冲区分析中,若两个受灾点周边的受灾面积(即缓冲区)有所重叠,分析重叠区域的受灾影响时,就需要考虑相互影响的因素。本例中先用【要素转面】工具提取出发生重叠的区域,其次用【空间连接】工具将原始图层信息连接到重叠数据的图层,分析重叠数据的属性表,即可得到发生重叠的原始图层数据。 Step1 提取重叠区属数据。打开【数据管理工具】|【要素】|【要素转面】工具,输入要素设置为“circles”,输出要素类设置为

端木宛白的博客家园 6万+

SAP Parallel Accounting(平行分类账业务)配置及操作手册(超详细的说明和测试)

非常详细的介绍了SAP 的平行分类账配置以及测试效果哦

nopicture的博客 4345

JDBC编程---JDBC基础以及连接MySql数据库

一:JDBC基础 JDBC全称为 Java Database Connectivity。即为java数据库连接,它是一种可执行SQL语句的API。程序可通过JDBC连接到关系型数据库,并且使用结构化查询语言(SQL数据库标准的查询语言)来完成对数据库的查询和更新。 与其他数据库编程环境相比,JDBC为数据库提供了标准的API。所以使用JDBC的数据库可以跨平台开发,如果全部使用标准的SQL语句,也可以说夸数据库开发。也就是说,如果使用一个JDBC开发一个数据库应用,那么该应用既可以在windows..

全栈工程师 537

分数间隔均衡器的基本原理及应用(使用Matlab)

通过对接收信号进行加权求和,分数间隔均衡器可以抵消信号在传输过程中受到的频率响应失真。Matlab提供了丰富的工具和函数,可以方便地实现分数间隔均衡器,并进行性能评估。分数间隔均衡器(Fractional Interval Equalizer)是一种数字信号处理技术,用于均衡带通信道中的信号失真。分数间隔均衡器的基本原理是通过对接收信号进行加权求和,以抵消信号在传输过程中受到的频率响应失真。分数间隔均衡器在通信系统中具有广泛的应用。最后,我们通过比较均衡后的信号和发送数据的阈值来进行解调,并计算误码率。

2301_79325657的博客 681

JDBC连接Mysql用户名和密码

username:root (mysql数据库的用户名)password:root (mysql数据库的密码)

@GitIDEA 459

GEE:计算非水体概率影像(水体淹没次数)

本文记录了在GEE平台上使用哨兵数据计算沿海地区非水体概率图像的计算方法和代码。基于像素,概率范围0-100。首先使用哨兵数据(s2)和大津算法(OTSU)计算的水体指数阈值来提取水体,然后计算研究区非水体像素在时间段内出现的概率。

养乐多的博客 2140

小程序真机调试蓝牙可以使用,线上发布版本蓝牙无法使用

小程序提示请打开蓝牙,微信小程序蓝牙无法连接,小程序真机调试蓝牙可以使用,线上版本蓝牙无法使用,测试环境蓝牙正常,开发环境蓝牙正常,发布后蓝牙无法使用

renkai721的专栏 826

JDBC使用

一、导入Maven依赖 MySql驱动 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> 二、测试连接 import j

努力的大学生 279

从 SAP GUI 走向 SAP Fiori:一套面向 SAP S/4HANA 的用户迁移实战方法论

SAP S/4HANA转型中,用户从SAP GUI迁移到Fiori的难点在于业务价值的重构而非简单的界面替换。Fiori的核心价值在于角色化、实时洞察和智能决策,而非完全替代GUI。成功迁移需分阶段推进:先展示关键角色的价值,建立统一入口,再逐步提高Fiori占比。让用户参与设计比后期培训更重要,需通过具体场景(如采购优先级管理)展示效率提升。迁移策略应平衡新旧界面优势,让Fiori成为业务价值触达的主要方式,而非强制替换。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 236

4.Java数据库连接_1.JDBC (Java DB Connection)简介

//============================================================================     Mysql安装参考:    http://blog.sina.com.cn/s/blog_13f29f4c30102xrsz.html  Navicat for MySql远程连接linux服务器上数据库     https://...

EminentBoy的博客 1415

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JDBC 数据库连接技术简介

介绍数据库连接技术 JDBC。

Jacks丶的博客 3429

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JDBC的方式连接数据库简介

连接数据库两种常用的驱动方式使用JDBC-ODBC桥连接方式连接数据库使用步骤三级目录 两种常用的驱动方式 jdbc驱动是数据库厂商提供。有两种比较常用的方式。第一种是JDBC-ODBC桥的方式,适用于个人开发与测试,它通过ODBC与纯数据库进行链接。另一种是纯java驱动方式,它直接同数据库进行链接,在生产开发中,推荐使用纯Java驱动方式。这两种连接方式的示意图如图。 使用JDBC-ODBC桥连接方式连接数据库 JDBC-ODBC桥连接就是将对JDBC API的调用转换为对另一组数据库连接(即ODBC

雪落无痕的博客 1164

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java连接数据库jdbc_什么是JDBC? Java数据库连接性简介

java连接数据库jdbc JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。 JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批组件之一。 JDBC最初被认为是客户端API,它使Java客户端能够与数据源进行交互。 JDCB 2.0改变了这一点,JDCB 2.0包括一个支持服务器端JDBC连...

cxu0262的博客 1026

JDBC简介、JDBC-API、数据库连接池

JDBC简介、JDBC-API、数据库连接池

LJL1999的博客 376

jdbc访问数据库详解

一.jdbc简介 jdbc,java database Connectivity即java数据库连接,是一组定义了如何连接和操作数据库的java api。下面结合一个简单示例说明下具体步骤:public class Main { private static Logger LOG = LoggerFactory.getLogger(Main.class); public sta

荒野孤鹰 1001

JDBC简介及连接MySQL数据库

JDBC简介 JDBC(Java DataBase Connectivity)可以让我们用相同的方式访问不同的数据库,它定义了一套标准的接口,即访问数据库的通用API。它是sun公司开发的一套数据库访问编程接口,由java语言编写完成。不同的数据库厂商根据自己数据库的特性去实现JDBC提供的这套接口。 JDBC具有很好的跨平台特性,使用JDBC编写...

qq_41433519的博客 281

java jdbc连接_什么是JDBC?Java数据库连接性简介

JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批组件之一。本文提供了JDBC的概述,然后是使用JDBC API将Java客户端与轻量级关系数据库SQLite连接的动手入门。JDBC如何工作JDBC作为基于C的ODBC(开放数据库连接)API的替代产...

weixin_39977136的博客 163

JDBC简介及连接MySQL数据库Code

JDBC简介JDBC在Java中,数据库存取技术分类:JDBC基础JDBC接口(API)包括两个层次:面向应用的API面向数据库的APIJDBC连接MySQL数据库的连接测试。代码配置文件(db.properties) JDBC 在Java中,数据库存取技术分类: JDBC直接访问数据库 JDO技术 第三方O/R工具,如Hibernate, mybatis 等 JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC JDBC基础 JDBC(Jav

ysyut的博客 222

JDBC简介,实现数据库连接

JDBC理解 JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)。可理解为:JDBC,是SUN提供的一套 API,使用这套API可以实现对具体数据库的操作(获取连接、关闭连接、DML、DDL、DCL)。 JDBC实现数据库连接 使用JBDC连接数据库需要导入mysql-connector-java-bin.jar。 官网下载链接:https://dev.mysql.com/downloads/conne

zxcyblbq的博客 178

16. JDBC连接池 — 数据库连接池简介

JDBC连接池   —— 数据库连接池简介(connection pool) 1. JDBC直接连接操作数据库的弊端 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet、bean)中建立数据库连接 进行sql操作 断开数据库连接 这种模式开发,存在的问题: 普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向

散场前的温柔的博客 407
上一篇: 如何注册小程序账号和下载小程序开发工具
下一篇: 反射简介和反射测试
ShrMuscles
博客等级 码龄10年 49粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值