一、什么是JDBC?

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

JDBC思维导图

二、JDBC应用流程

以下是我们使用JDBC进行数据访问时的常规步骤,如果感觉理解起来有一点云里雾里也没关系,可以看看后面的代码自己实践体会一下。

1. 加载驱动类

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

2. 创建数据库连接

String url = "jdbc:mysql://localhost:3306/databasename";
Connection connection = DriverManager.getConnection(url, "username", "password"); 

3. 创建数据库操作通道

Statement statement = connection.createStatement(); 

4. 执行数据操作,返回结果集

ResultSet resultSet = statement.executeQuery("sql statement"); 

5. 解析并处理结果集

resultSet.getInt(1);//获取结果集的第1列(必须能够以int类型接收)
resultSet.getString(2);//获取结果集的第2列(必须能够以String类型接收)
resultSet.getDate(3);//获取结果集的第3列(必须能够以Date类型接收) 

6. 关闭数据接口(注意关闭顺序)

resultSet.close();
statement.close();
connection.close(); 

三、绑定statement的数据访问示例

假定我们新建了一个数据库名为test,里面有一张表user,里面的结构和数据如下图所示:

1.使用Statement进行数据访问

废话不多说,直接贴代码:

import java.sql.*;public class MysqlTest {private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/";private static final String DATABASE_NAME = "test";private static final String DATABASE_USERNAME = "root";private static final String DATABASE_PASSWORD = "root";public static void main(String[] args) {try {//1.注册数据库驱动DriverManager.registerDriver(new com.mysql.jdbc.Driver());//Class.forName("com.mysql.jdbc.Driver");System.out.println("注册驱动成功!");} catch (Exception e1) {System.out.println("注册驱动失败!");e1.printStackTrace();return;}String url = DATABASE_URL + DATABASE_NAME;Connection conn = null;try {//2.创建并获取数据库连接conn = DriverManager.getConnection(url, DATABASE_USERNAME, DATABASE_PASSWORD);//3.设置statement对象Statement stmt = conn.createStatement();System.out.println("创建Statement成功!");//4.通过statement执行SQL语句并获取结果ResultSet rs = stmt.executeQuery("select id,username from user order by id desc limit 0, 3");while (rs.next()) {//5.对结果集进行解析处理System.out.println(rs.getInt(1) + "," + rs.getString(2));}//6.释放资源。顺序:ResultSet→Statement→Connectionrs.close();stmt.close();} catch (SQLException e) {e.printStackTrace();} finally {try {if (null != conn) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

具体的逻辑在注释中写的比较清楚了,就不多加赘述了。

运行后结果如下:

5,John
4,Peter
3,Jack

这里有一个小tip:使用Statement无法防止SQL注入攻击。对SQL注入攻击如果感兴趣的话可以走传送门:

sql注入_百度百科​baike.baidu.com

2.使用PreparedStatement进行数据访问

PreparedStatement是继承了Statement的接口。它与Statement的最大不同之处是,PreparedStatement会对SQL语句先做预编译,以防止SQL注入

//An object that represents a precompiled SQL statement.
public interface PreparedStatement extends Statement {}

来看看使用PreparedStatement进行数据访问的代码示例,与使用Statement的代码非常相似,小有不同:

import java.sql.*;public class MysqlTest {private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/";private static final String DATABASE_NAME = "test";private static final String DATABASE_USERNAME = "root";private static final String DATABASE_PASSWORD = "root";public static void main(String[] args) {try {//1.注册数据库驱动DriverManager.registerDriver(new com.mysql.jdbc.Driver());//Class.forName("com.mysql.jdbc.Driver");System.out.println("注册驱动成功!");} catch (Exception e1) {System.out.println("注册驱动失败!");e1.printStackTrace();return;}String url = DATABASE_URL + DATABASE_NAME;Connection conn = null;try {//2.创建并获取数据库连接conn = DriverManager.getConnection(url, DATABASE_USERNAME, DATABASE_PASSWORD);//3.设置preparedStatement对象PreparedStatement stmt = conn.prepareStatement("select id,username from user order by id desc limit ?,?");System.out.println("创建PreparedStatement成功!");//4.为preparedStatement绑定参数stmt.setInt(1, 0);stmt.setInt(2, 3);//4.通过preparedStatement执行SQL语句并获取结果ResultSet rs = stmt.executeQuery();while (rs.next()) {//5.对结果集进行解析处理System.out.println(rs.getInt(1) + "," + rs.getString(2));}//6.释放资源。顺序:ResultSet→preparedStatement→Connectionrs.close();stmt.close();} catch (SQLException e) {e.printStackTrace();} finally {try {if (null != conn) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

这里运行结果和使用Statement的相同:

5,John
4,Peter
3,Jack

四、传统JDBC存在的问题

通过我们实际的JDBC代码实践,可以体会到以下几点:

1.频繁创建释放连接,系统开销大

2.SQL语句硬编码在Java代码中,不易维护

3.结果集解析复杂

4.……

所以这才引入了我们的ORM框架:

孑辞:STEP5.1 初识MyBatis​zhuanlan.zhihu.com

mysql jdbc驱动_JDBC认识与实践相关推荐

  1. Ubuntu下eclipse部署mysql jdbc驱动

    1.mysql jdbc驱动包下载地址:http://dev.mysql.com/downloads/connector/j/ 版本:mysql-connector-java-5.1.17.zip 2 ...

  2. 【Jmeter】安装配置:Jmeter 下载 MySQL JDBC 驱动

    目录 一.MySQL JDBC 驱动版本选择 二.MySQL JDBC 驱动下载 (1)新建 Jmeter 插件备份文件夹

  3. MySQL JDBC驱动版本与MySQL数据库版本对应关系

    前言:前段时间发现在家使用和公司一样的mysql jdbc驱动版本发生了异常,原因:家里mysql数据库版本与公司不一致导致.查询了相关资料,发现mysql jdbc驱动版本与mysql数据库版本有一 ...

  4. mysql jdbc驱动 批量更新_jdbc批量插入,删除,更新

    批量处理:一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能. 不确定JDBC驱动程序是否支持此功能.应该使用DatabaseMetaData.supportsBatchUpdates( ...

  5. jdbc驱动_JDBC概述和CRUD

    第八章 JDBC的简介 8.1 简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...

  6. mysql jdbc简介_JDBC简介

    JDBC是什么? 相对于数据库而言,Web应用是数据库的客户端,我们需要为客户端与数据库之间建立连接,双方才能交互. 我们已经学习了SQL,这是操纵数据库的语言.我们现在开发Web应用使用的Java语 ...

  7. mysql数据库驱动_JDBC 加载mysql数据库驱动

    第一步:下载 mysq l驱动 Connector/J 就是为Java 的JDBC准备的 下载完毕后,解压后,会看见如下图的就是mysql驱动的 jar 包: (二)打开Eclipse,新建java工 ...

  8. jdbc和jdbc驱动_JDBC布尔兼容性列表

    jdbc和jdbc驱动 有趣的是,布尔类型只是在SQL标准后期才引入,即SQL:1999 . 即使在今天,并非所有数据库本身都支持BOOLEAN或BIT类型. 最重要的是,我们仍然可以在Oracle中 ...

  9. mysql jdbc驱动 批量更新_jdbc-批量插入、批量删除、批量更新

    一.JDBC的批量插入 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一,使用P ...

最新文章

  1. mybatis源码阅读(五) ---执行器Executor
  2. 创建 SSH Keys
  3. oracle+表的更新日志,测试oracle插入 删除 更新表的日志开销
  4. 新一代 Windows 即将发布、GPT-3 成功商业化,这届微软 Build 大会究竟带来了什么?
  5. Js实现滚动抽奖(作弊版)
  6. linux安装Drcom客户端,Ubuntu 10.10校园网安装宽带认证客户端Drcom联网
  7. EXCEL,如何进行查找,单条件和多条件查询
  8. sre_constants.error: unbalanced parenthesis
  9. (在ObjectARX中使用MFC)
  10. AI语音外呼机器人是如何帮助电销行业获客
  11. android recovery下使用adb出现device offline问题
  12. 华为鸿蒙麒麟玉兔_华为注册了整本《山海经》的商标?“鸿蒙”操作系统成功申请...
  13. 计算机页面优盘页面分开,如何使用老毛桃winpe从电脑分区中拆分出一个空闲分区?...
  14. 【小结】南京大学软件工程专硕2021二战小结
  15. 多级LC滤波器级联问题
  16. 百度流氓驱动bd0001.sys【多测师】
  17. Java练习题-09
  18. Ubuntu下U盘没有不能新建粘贴文件 报错 [sdf] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
  19. xcode9 symbolicatecrash文件位置
  20. 22岁高中学历的我 如何做到CTO年薪50万(1)

热门文章

  1. Spring JDBC最佳实践(2)
  2. MySQL中的information_schema
  3. c++ 测试串口速率_纳米软件案例之电流控制测试系统
  4. import导入模块
  5. JDK源码学习之Arraylist与LinkedList
  6. java实现控件绑定数据源_控件(三)——TreeView控件以XmlDataSource控件为数据源实现简单的绑定...
  7. 人脸识别进水_万维|人脸识别闸机怎么选?
  8. s5pv210——LCD基础理论
  9. jmeter+Fiddler:通过Fiddler抓包生成jmeter脚本
  10. 有趣的反直觉的“三门问题”