JDBC

WHAT IS JDBC

Java Database Connectivity:Java访问数据库的解决方案。
JDBC是Java应用程序访问数据库的里程碑式解决方案。Java研发者希望用相同的方式访问不同的数据库,以实现与具体数据库无关的Java操作界面。
JDBC定义了一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自数据库的特点去实现这些接口。

JDBC接口及数据库厂商实现

JDBC中定义了一些接口:
1、驱动管理:
DriverManager
2、连接接口
Connection
DatabasemetaData
3、语句对象接口
Statement
PreparedStatement
CallableStatement
4、结果集接口
ResultSet
ResultSetMetaData

JDBC工作原理

JDBC只定义接口,具体实现由各个数据库厂商负责。
程序员使用时只需要调用接口,实际调用的是底层数据库厂商的实现部分。

JDBC访问数据库的工作过程:
加载驱动,建立连接
创建语句对象
执行SQL语句
处理结果集
关闭连接

Driver接口及驱动类加载

要使用JDBC接口,需要先将对应数据库的实现部分(驱动)加载进来。
驱动类加载方式(Oracle):

Class.forName("oracle.jdbc.driver.OracleDriver");

这条语句的含义是:装载驱动类,驱动类通过static块实现在DriverManager中的“自动注册”。

Connection接口

Connection接口负责应用程序对数据库的连接,在加载驱动之后,使用url、username、password三个参数,创建到具体数据库的连接。

Class.forName("oracle.jdbc.OracleDriver")
//根据url连接参数,找到与之匹配的Driver对象,调用其方法获取连接
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.0.26:1521:tarena",
"openlab","open123");

需要注意的是:Connection只是接口,真正的实现是由数据库厂商提供的驱动包完成的。

Statement接口

Statement接口用来处理发送到数据库的SQL语句对象,通过Connection对象创建。主要有三个常用方法:

Statement stmt=conn.createStatement();
//1.execute方法,如果执行的sql是查询语句且有结果集则返回true,如果是非查询语句或者没有结果集,返回false
boolean flag = stmt.execute(sql);
//2.执行查询语句,返回结果集
ResultSetrs = stmt.executeQuery(sql);
//3.执行DML语句,返回影响的记录数
int flag = stmt.executeUpdate(sql);

ResultSet接口

执行查询SQL语句后返回的结果集,由ResultSet接口接收。
常用处理方式:遍历 / 判断是否有结果(登录)。

String sql = "select * from emp";
ResultSetrs = stmt.executeQuery(sql);
while (rs.next()) {System.out.println(rs.getInt("empno")+",“+rs.getString("ename") );
}

查询的结果存放在ResultSet对象的一系列行中,指针的最初位置在行首,使用next()方法用来在行间移动,getXXX()方法用来取得字段的内容。

处理结果集ResultSet

ResultSet代表DQL查询结果,是2维结果. 其内部维护了一个读取数据的游标,默认情况在,游标在第一行数据之前, 当调用next() 方法时候, 游标会向下移动,并将返回结果集中是否包含数据, 如果包含数据就返回true. 结果集还提供了很好getXXX方法用于获取结果集游标指向当前行数据.

原理:

案例:

/*** 执行DQL 语句 */
public class Demo03 {public static void main(String[] args) throws Exception{//注册驱动String driver="oracle.jdbc.OracleDriver";;Class.forName(driver);//连接数据库String url="jdbc:oracle:thin:@192.168.201.227:1521:orcl";String user="openlab";String pwd="open123";Connection conn=DriverManager.getConnection(url, user, pwd);//创建StatementStatement st=conn.createStatement();//执行SQL(dql)String sql="select id, name "+ "from robin_demo ";ResultSet rs=st.executeQuery(sql);//处理结果 ...//rs结果集中包含一个游标,游标默认在结果集//的第一行之前//rs.next():移动结果集游标到下一行//检查是否有数据, 如果有返回true, 否则falsewhile(rs.next()){//getXXX(列名): 返回结果集当前行中// 指定列名的数据.int id = rs.getInt("id");String name=rs.getString("name");//输出查询结果System.out.println(id+","+name);}//关闭连接conn.close();}
}

使用Properties 读取配置文件

Properties 是Java中专门用于读取配置文件的API.

  1. 其底层就是文本文件IO
  2. Properties 本身 实现 Map接口, 内部是散列表
  3. Properties限定了key和Value都是String 类型.

Properties 常用API方法:

  • load(流) 读取一个配置文件
  • String getProperty(key) 读取一个属性值

使用步骤:

  1. 创建Properties对象
  2. 利用load方法读取配置文件
  3. 利用getProperty查询属性文件的内容

案例, 读取配置文件:

在resource 文件夹中添加配置文件 db.properties:

# db.properties
jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@192.168.201.227:1521:orcl
jdbc.username=openlab
jdbc.password=open123

使用Properties读取配置文件内容:

public class Demo05 {public static void main(String[] args)throws IOException{// Properties 就是为了读取// *.properties 文件而设计的API// 其底层就是文本文件IO// Properties 本身 实现 Map接口// 内部是散列表, 限定了key和Value都是// String 类型.//方法: load(流) 将文件就读取为散列表//String getProperty(key) 查询value//使用步骤//1 创建 Properties 对象Properties cfg = new Properties();System.out.println(cfg);System.out.println(cfg.size());System.out.println(cfg.isEmpty());//2. 利用load方法读取文件InputStream in=Demo05.class.getClassLoader().getResourceAsStream("db.properties");//执行以后,将文件内容读取到散列表中了cfg.load(in); System.out.println(cfg);System.out.println(cfg.size());//3. 查找文件内容, 就是读取文件内容String s=cfg.getProperty("jdbc.driver");System.out.println(s); }
}

利用配置文件可以将程序中的参数保存到配置文件中, 修改程序参数只需要修改配置文件即可.

管理数据库连接

在软件中数据库连接使用非常频繁, 如果每次都创建连接, 就会造成代码的大量冗余, 常规的做法是建立数据库连接工具类, 封装数据库连接过程, 统一数据库连接过程, 使用时候就可以简化代码.

实现步骤:

  1. 创建数据库连接参数文件 db.properties
  2. 创建DbUtils.java 封装数据库连接方法
    • 利用Properties读取配置文件夹中的数据库连接参数
    • 创建方法 getConnection 封装数据库连接过程
  3. 使用 getConnection 方法

创建配置文件 db.properties

# db.properties
jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@192.168.201.227:1521:orcl
jdbc.username=openlab
jdbc.password=open123

创建DbUtils.java

public class DbUtils {static String driver;static String url;static String username;static String password;//读取文件中的数据库连接参数static{//初始化静态属性//1. 利用Properties 读取配置文件//2. 从配置文件中查找 相应参数值try{Properties cfg=new Properties();InputStream in=DbUtils.class.getClassLoader().getResourceAsStream("db.properties");cfg.load(in);System.out.println(cfg); //初始化 连接参数 driver=cfg.getProperty("jdbc.driver");url=cfg.getProperty("jdbc.url");username=cfg.getProperty("jdbc.username");password=cfg.getProperty("jdbc.password");in.close();}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}}/*** 封装创建数据库连接的过程* 简化数据库连接*/public static Connection getConnection(){try{Class.forName(driver);Connection conn=DriverManager.getConnection(url, username, password);return conn;}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}}//DbUtils.java/** 关闭数据库的连接方法, 封装复杂的关闭过程*/public static void close(Connection conn){if(conn!=null){try {conn.close();} catch (Exception e) {e.printStackTrace(); }}}
}

说明:

  1. driver url username password 是4个数据库连接参数, 因为只需要一份,则定义为静态变量.
  2. 静态代码块的目的是从配置文件中读取4个数据库连接参数的值.
  3. getConnection方法封装了数据库连接过程
  4. close方法封装了数据库连接关闭的过程

DbUtils 的使用:

public class Demo06 {public static void main(String[] args) {Connection conn=null;try{conn=DbUtils.getConnection();Statement st=conn.createStatement();String sql="select * from robin_demo";ResultSet rs=st.executeQuery(sql);while(rs.next()){int id=rs.getInt("id");String name=rs.getString("name");System.out.println(id+","+name);}rs.close();//释放查询结果st.close();//释放语句对象}catch(Exception e){e.printStackTrace();}finally {DbUtils.close(conn);}}
}

显然: 使用DbUtils可以简化JDBC代码的书写.
这个代码中在finally中关闭数据库连接, 其好处是可靠关闭连接.

JDBC原理,JDBC基础编程相关推荐

  1. Spark累加器实现原理及基础编程

    Spark累加器实现原理及基础编程 实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端.在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这 ...

  2. Spark广播变量实现原理及基础编程

    Spark广播变量实现原理及基础编程 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的 ...

  3. (超详细)MapReduce工作原理及基础编程

    MapReduce工作原理及基础编程(代码见文章后半部分) JunLeon--go big or go home 目录 MapReduce工作原理及基础编程(代码见文章后半部分) 一.MapReduc ...

  4. 数据库连接JDBC原理

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 数据库连 ...

  5. JDBC 简介 JDBC 原理

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

  6. Java数据库持久层框架基础:jdbc原理和使用综述

    Java数据库持久层框架基础:jdbc原理和使用综述 前言 jdbc基础架构 jbdc的使用 jdbc的主要接口 驱动 连接 连接池 会话Statement 结果集ResultSet 前言 目前jav ...

  7. JDBC原理实现详解

    看目录 JDBC 一.JDBC是什么? 二.JDBC的本质是什么? 三.JDBC的意义 四.JDBC编程六步 五.JDBC注册驱动常用方式 六.从属性资源文件中读取连接数据库资源 七.处理查询结果集 ...

  8. JDBC原理及应用模板

    JDBC 原理及其使用方法 说明:以下内容来源于B站颜群老师的课堂笔记,我只是对其进行了摘抄和整理. JDBC:Java DataBase Connectivity (java数据库连接对象) 可以为 ...

  9. 【JDBC】jdbc原理总结

    1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库 ...

最新文章

  1. OKR与Scrum如何强强联手
  2. 【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
  3. VTK:可视化之AlphaFrequency
  4. SparkSQL发展历史,DataFrame,SparkSQL的数据源,运行框架,tree和rule,Rule,Context运行过程,hiveContext运行过程,SparkSQL CLI等
  5. 一、HTML和CSS基础--HTML+CSS基础课程--第1部分
  6. [导入]SQL 分页存贮过程
  7. 有人说“如今聪明的年轻人上班,愚蠢的年轻人创业!”对此大家怎么看?
  8. 谷歌云TPU上可以用Julia啦!0.23秒跑100张图片,Jeff Dean点赞推荐
  9. pku2777 Count Color
  10. 20191202_2_识别偷税漏税人
  11. Java程序员必读——领悟Java编程思想
  12. 基于GEE平台实现湖泊水位与水体面积关系分析
  13. 【集成电路 - -芯片】
  14. 苹果iPA游戏软件资源下载网站
  15. 滴滴云GPU服务器做深度学习之tensorflow object detect 对象检测 实践
  16. hr2000 光谱Matlab,HR2000+高分辨率光谱仪
  17. 客快物流大数据项目(七十二):Impala sql 语法
  18. 【LeetCode解题报告】《算法基础006_日期算法》- Java
  19. Halcon入门(一)shape-based matching
  20. 2022年G3锅炉水处理考试及G3锅炉水处理考试资料

热门文章

  1. Android炫酷的UI界面
  2. VCL (三) 属性编辑器
  3. openpyxl库操作excel表格
  4. java object save_Java之Object类和常用的API
  5. usb复合设备 linux,使用STM32CubeMX编写USB复合设备
  6. MySQL(InnoDB剖析):42---事务之(事务控制语句:begin、commit、rollback、savepoint、transaction)
  7. 价格战退潮后中通快递迎来强势期,不改长期向好趋势
  8. 数据采集系统网关采集工厂效率
  9. Http Server的工作原理
  10. 【PCB专题】如何在嘉立创8月1日起的新规则下免费打样