文章目录

  • 1、对JDBC本质的理解
  • 2、代码模拟JDBC的本质
  • 3、JDBC编程的六步
  • 4、通过类加载的方式注册驱动
  • 5、属性配置文件与JDBC
  • 6、处理查询结果集

1、对JDBC本质的理解

Java DataBase Connectivity(Java语言连接数据库),其本质是SUN公司指定的一套接口(interface),这套接口在 java.sql.* 下

既然是一套接口,接口都有调用者和实现者,面向接口调用,面向接口写实现类,都属于面向接口编程。面向接口编程的优势是解耦合,降低程序的耦合度,提高程序的扩展力。


驱动:

数据库的驱动大多以jar包的形式存在,解压后得到很多class文件,这些class文件就是对JDBC接口的实现,驱动由各大数据库厂家提供。

2、代码模拟JDBC的本质

SUN公司提供接口规范:

/*** SUN公司提供*/
public interface JDBC {//连接数据库的方法void getConnection();
}

各数据库厂商面向接口写各自的实现类,称驱动:

/*** 数据库厂商角色,如MySql* 编写JDBC接口的实现类,称为驱动*/
public class MySQL implements JDBC{@Overridepublic void getConnection() {//这里写MySQL底层的一些具体实现System.out.println("连接MySQL成功");}
}

用户面向接口编程:

/*** Programmer面向接口编程*/
public class JavaProgrammer {public static void main(String[] args) {JDBC jdbc = new MySQL();jdbc.getConnection();}
}

运行效果:

3、JDBC编程的六步

  • 注册驱动:告诉Java程序,即将要连接的是哪个品牌的数据库
  • 获取连接:表示JVM进程和数据库进程之间的通道打开,属于进程之间的通信
  • 获取数据库操作对象:即专门执行SQL语句的对象
  • 执行SQL语句:DQL、DML…
  • 处理查询结果集:只有上一步是SELECT查询语句的时候,才有这一步
  • 释放资源:资源使用完成后,关闭资源

IDEA配置JDBC驱动—方式一

MySQL驱动下载地址:http://dev.mysql.com/downloads/connector/j/


解压完成后,将驱动(jar包)复制到对应工程的lib目录下,右键Add as a library

IDEA配置JDBC驱动—方式二

在对应模块上右键,选择open Moudle Setting

选择Libraries后点击加号

选择对应的jar驱动包,点击OK

选择对应需要添加的模块后点击OK

代码实现:

import java.sql.*;public class JdbcTest {public static void main(String[] args) {Connection conn = null;Statement statement = null;try {/*** 注册驱动*/Driver driver = new com.mysql.cj.jdbc.Driver(); //多态,左边的是Driver接口java.sql.Driver,右边的是MySQL的实现类DriverDriverManager.registerDriver(driver);/*** 获取连接*/String url = "jdbc:mysql://127.0.0.1:3306/testDB";String user = "root";String password = "code9527";conn = DriverManager.getConnection(url, user, password);System.out.println("数据库连接对象:" + conn);/*** 获取数据库操作对象*/statement = conn.createStatement();/*** 执行SQL语句*/String sql = "insert into dept(deptno,dname,loc) VALUES (001,'研发','天津')";int count = statement.executeUpdate(sql);System.out.println(count == 1 ? "保存成功" : "保存失败");/*** 处理查询结果集* 上面不是SELECT,暂时不管*/} catch (SQLException e) {e.printStackTrace();} finally {/*** 在finally中释放资源,确保被一定关闭* 从小到大依次关闭,分别try..catch*/try {if (statement != null) {statement.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

☀ 代码格式化调整快捷键Alt+Ctrl+L

  • 注意区分两个Driver:
java.sql.Driver 是Java提供的Driver接口com.mysql.jdbc.Driver 是MySQL厂商写的MySQL驱动类,实现了上面的Driver接口
  • int executeUpdate(String sql)方法是用来执行INSERT、UPDATE、DELETE语句的,返回值是“影响数据库中记录的条数”,如上面程序中插入了一条数据,则返回1

运行结果:

4、通过类加载的方式注册驱动

分析com.mysql.jdbc.Driver的源代码,发现其在静态代码块中进行了注册驱动的操作:

而类加载的时候会执行静态代码块:(小复习)


所以可以通过调用forName方法让类加载进而来注册驱动,这时也不用接收返回值,因为我们要的仅仅是类加载这个动作:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JdbcTest1 {public static void main(String[] args) {Connection conn= null;Statement statement = null;try{//注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//获取连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root","95279527");//获取数据库操作对象statement = conn.createStatement();//执行SQL语句String sql = "UPDATE dept SET dname='智能研发' WHERE deptno=1";int count = statement.executeUpdate(sql);System.out.println(count == 1 ? "更新成功" : "更新失败");}catch(ClassNotFoundException e){e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally{//关闭资源}}
}

牢记:通过类加载注册驱动 Class.forName(“com.mysql.cj.jdbc.Driver”);

运行后:

5、属性配置文件与JDBC

将驱动信息与数据库连接信息全部写入properties配置文件:

实际开发中,不要把数据库的信息写死在Java程序中。引入配置文件后:

6、处理查询结果集

返回的结果集对象是如下的一个东西:

  • 光标(resourceSet.next())返回true,说明这一行有数据。调用getString()方法取出数据即可。

  • getString()方法:不管数据库中的数据类型是什么,都以String类型取出

  • getString方法可以传入列的下标(JDBC中下标从1开始),也可以传入列名,但后者更加健壮

  • getString方法传入列名的时候,传入的是查询结果集的列名。如下:此时,传入getString的应该是no,而不是deptno

Sting sql = "select deptno as no ,dname,loc from dept";
  • 和getString类比,想以int类型取出数据,则用getInt(),依此有getDouble()等。这样拿出来以后就可以直接做数学运算了
  • close的时候,根据关系,应该是先resultSet再statement,最后是conn

完整代码:

import java.sql.*;
import java.util.ResourceBundle;public class JdbcTest3 {public static void main(String[] args) {ResourceBundle bundle = ResourceBundle.getBundle("jdbc");String driver = bundle.getString("driver");String url = bundle.getString("url");String user = bundle.getString("user");String password = bundle.getString("password");Connection conn = null;Statement statement = null;ResultSet resultSet = null;try {Class.forName(driver);conn = DriverManager.getConnection(url, user, password);statement = conn.createStatement();String sql = "SELECT deptno as no,dname,loc FROM dept";/*** executeQuery方法是专门执行查询语句的(DQL),返回时ResultSet类型* executeUpdate是专门执行增删改语句的,返回时int*/resultSet = statement.executeQuery(sql);while (resultSet.next()) {int deptno = resultSet.getInt("no");String dname = resultSet.getString("dname");String loc = resultSet.getString("loc");System.out.println(deptno + " " + dname + " " + loc);}} catch (Exception e) {e.printStackTrace();} finally {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(statement != null){try{statement.close();}catch(SQLException e){e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

运行结果:

【JDBC上篇】什么是JDBC相关推荐

  1. db2 jdbc 连接池_db2 jdbc连接数据库

    DB2的JDBC连接驱动与URL总结 依照 JDBC 规范,有四种类型的 JDBC 驱动程序体系结构: Type 1:这类驱动程序将 JDBC API 作为到另一个数据访问 API 的映射来实现,如开 ...

  2. 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果

    一直很纠结,Oracle的快速返回机制,虽然结果集很多,可是它能很快的显示第一个结果,虽然通过MYSQl的客户端可以做到,但是通过JDBC却不行. 今天用了1个多小时,终于搞定此问题,希望对广大Jav ...

  3. DBUtils开源JDBC类库,对JDBC简单封装(作用是:简化编码工作量,同时不会影响程序的性能)...

    DBUtils:提高了程序的性能,编程更加简便 架包 mysql-connector-java-jar commons-dbcp-1.4jar commons-pool-1.5.5jar common ...

  4. java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作

    什么是JDBC? 概念:JAVA Database Connectivity Javas数据库连接,Java语言操作数据库接口,然后由各个数据库厂商去实现这个接口,提供数据库驱动java包,我们可以使 ...

  5. 【JDBC】实现对JDBC 连接的简单封装

    package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...

  6. 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口

    JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...

  7. JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  8. hibernate.jdbc.fetch_size 和 hibernate.jdbc.batch_size

    这点我也疑惑过,最初应用hibernate的项目,我也感觉速度很慢,知道后来才知道问题的所在.        其实hibernate的速度性能并不差,比起jdbc来说,又是性能能高2倍.        ...

  9. java jdbc连接derby,通过JDBC连接到Derby数据库失败

    我正在尝试构建一个简单的spring应用程序,它需要具备与数据库通信的能力.按照教程我已经完成了我的应用程序的整个代码,但是当我运行我的应用程序时,我得到了这个: Exception in threa ...

  10. JDBC学习笔记之JDBC简介

    1. 引言 JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据. JDBC可以帮助我们编写下列三种编程活动的java应用程序: 1.连接到数据源,如数据 ...

最新文章

  1. 重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
  2. Asp.net MVC 学习之路-003(增删改查,后端手工,前端生成)
  3. 数据仓库与联机分析处理技术
  4. python设计模式(五):适配器模式——各种类接口的合并
  5. leetcode 142. 环形链表 II(set/快慢指针)
  6. macosx php环境,MacOSX环境下MAMP安装配置PHP的开发环境
  7. 【Elasticsearch】Elasticsearch analyzer 分词器
  8. 连接Python 3和Electron/Node.JS:构建现代桌面应用程序
  9. js插值法的使用_js 实现排序算法 -- 插入排序(Insertion Sort)
  10. JS变量中你不知道的小埋伏
  11. python复制包到其他环境_Python虚拟环境导出包安装到另一台电脑的方法
  12. mysql单表历史记录_Mysql之单表记录查询
  13. 上项线体表位置_人体体表定位标志
  14. 基于数据挖掘的客户流失分析案例
  15. X86架构与Arm架构区别
  16. 智云通CRM:当客户上来就问价格,销售该怎么回答?
  17. 速卖通html自定义属性,速卖通自定义属性怎么填?有哪些需要注意的地方?
  18. 网站内容更新的操作方法有哪些
  19. 中传影视王鑫:大数据在传媒领域的应用
  20. el-form-item 正则验证

热门文章

  1. 区块链共享数据架构设计
  2. 【转载】损失函数 - 交叉熵损失函数
  3. [JavaSE基础笔记]Day10 石头迷阵实现
  4. 微软Ribbon界面
  5. 视图、创建视图的语法、视图的作用
  6. UDT长度的含义是什么?
  7. buildroot学习(十)——at91sam9g45软件平台更新
  8. [玩转UE4/UE5动画系统>Control Rig篇] 之 Control Rig + Fullbody IK版的足部IK实现(附项目代码)
  9. Vue key的作用
  10. js中的内存溢出和内存泄漏