【JDBC上篇】什么是JDBC
文章目录
- 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相关推荐
- db2 jdbc 连接池_db2 jdbc连接数据库
DB2的JDBC连接驱动与URL总结 依照 JDBC 规范,有四种类型的 JDBC 驱动程序体系结构: Type 1:这类驱动程序将 JDBC API 作为到另一个数据访问 API 的映射来实现,如开 ...
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果
一直很纠结,Oracle的快速返回机制,虽然结果集很多,可是它能很快的显示第一个结果,虽然通过MYSQl的客户端可以做到,但是通过JDBC却不行. 今天用了1个多小时,终于搞定此问题,希望对广大Jav ...
- DBUtils开源JDBC类库,对JDBC简单封装(作用是:简化编码工作量,同时不会影响程序的性能)...
DBUtils:提高了程序的性能,编程更加简便 架包 mysql-connector-java-jar commons-dbcp-1.4jar commons-pool-1.5.5jar common ...
- java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作
什么是JDBC? 概念:JAVA Database Connectivity Javas数据库连接,Java语言操作数据库接口,然后由各个数据库厂商去实现这个接口,提供数据库驱动java包,我们可以使 ...
- 【JDBC】实现对JDBC 连接的简单封装
package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...
- 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口
JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...
- JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】
黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...
- hibernate.jdbc.fetch_size 和 hibernate.jdbc.batch_size
这点我也疑惑过,最初应用hibernate的项目,我也感觉速度很慢,知道后来才知道问题的所在. 其实hibernate的速度性能并不差,比起jdbc来说,又是性能能高2倍. ...
- java jdbc连接derby,通过JDBC连接到Derby数据库失败
我正在尝试构建一个简单的spring应用程序,它需要具备与数据库通信的能力.按照教程我已经完成了我的应用程序的整个代码,但是当我运行我的应用程序时,我得到了这个: Exception in threa ...
- JDBC学习笔记之JDBC简介
1. 引言 JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据. JDBC可以帮助我们编写下列三种编程活动的java应用程序: 1.连接到数据源,如数据 ...
最新文章
- 重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
- Asp.net MVC 学习之路-003(增删改查,后端手工,前端生成)
- 数据仓库与联机分析处理技术
- python设计模式(五):适配器模式——各种类接口的合并
- leetcode 142. 环形链表 II(set/快慢指针)
- macosx php环境,MacOSX环境下MAMP安装配置PHP的开发环境
- 【Elasticsearch】Elasticsearch analyzer 分词器
- 连接Python 3和Electron/Node.JS:构建现代桌面应用程序
- js插值法的使用_js 实现排序算法 -- 插入排序(Insertion Sort)
- JS变量中你不知道的小埋伏
- python复制包到其他环境_Python虚拟环境导出包安装到另一台电脑的方法
- mysql单表历史记录_Mysql之单表记录查询
- 上项线体表位置_人体体表定位标志
- 基于数据挖掘的客户流失分析案例
- X86架构与Arm架构区别
- 智云通CRM:当客户上来就问价格,销售该怎么回答?
- 速卖通html自定义属性,速卖通自定义属性怎么填?有哪些需要注意的地方?
- 网站内容更新的操作方法有哪些
- 中传影视王鑫:大数据在传媒领域的应用
- el-form-item 正则验证