JDBC原理,JDBC基础编程
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.
- 其底层就是文本文件IO
- Properties 本身 实现 Map接口, 内部是散列表
- Properties限定了key和Value都是String 类型.
Properties 常用API方法:
- load(流) 读取一个配置文件
- String getProperty(key) 读取一个属性值
使用步骤:
- 创建Properties对象
- 利用load方法读取配置文件
- 利用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); }
}
利用配置文件可以将程序中的参数保存到配置文件中, 修改程序参数只需要修改配置文件即可.
管理数据库连接
在软件中数据库连接使用非常频繁, 如果每次都创建连接, 就会造成代码的大量冗余, 常规的做法是建立数据库连接工具类, 封装数据库连接过程, 统一数据库连接过程, 使用时候就可以简化代码.
实现步骤:
- 创建数据库连接参数文件 db.properties
- 创建DbUtils.java 封装数据库连接方法
- 利用Properties读取配置文件夹中的数据库连接参数
- 创建方法 getConnection 封装数据库连接过程
- 使用 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(); }}}
}
说明:
- driver url username password 是4个数据库连接参数, 因为只需要一份,则定义为静态变量.
- 静态代码块的目的是从配置文件中读取4个数据库连接参数的值.
- getConnection方法封装了数据库连接过程
- 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基础编程相关推荐
- Spark累加器实现原理及基础编程
Spark累加器实现原理及基础编程 实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端.在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这 ...
- Spark广播变量实现原理及基础编程
Spark广播变量实现原理及基础编程 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的 ...
- (超详细)MapReduce工作原理及基础编程
MapReduce工作原理及基础编程(代码见文章后半部分) JunLeon--go big or go home 目录 MapReduce工作原理及基础编程(代码见文章后半部分) 一.MapReduc ...
- 数据库连接JDBC原理
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 数据库连 ...
- JDBC 简介 JDBC 原理
JDBC 简介 JDBC(Java Data Base Connectivity,java 数据库连接)是一种用于执行 SQL 语句的 JavaAPI,可以为多种关系 数据库提供统一访问,它由一组用 ...
- Java数据库持久层框架基础:jdbc原理和使用综述
Java数据库持久层框架基础:jdbc原理和使用综述 前言 jdbc基础架构 jbdc的使用 jdbc的主要接口 驱动 连接 连接池 会话Statement 结果集ResultSet 前言 目前jav ...
- JDBC原理实现详解
看目录 JDBC 一.JDBC是什么? 二.JDBC的本质是什么? 三.JDBC的意义 四.JDBC编程六步 五.JDBC注册驱动常用方式 六.从属性资源文件中读取连接数据库资源 七.处理查询结果集 ...
- JDBC原理及应用模板
JDBC 原理及其使用方法 说明:以下内容来源于B站颜群老师的课堂笔记,我只是对其进行了摘抄和整理. JDBC:Java DataBase Connectivity (java数据库连接对象) 可以为 ...
- 【JDBC】jdbc原理总结
1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库 ...
最新文章
- OKR与Scrum如何强强联手
- 【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
- VTK:可视化之AlphaFrequency
- SparkSQL发展历史,DataFrame,SparkSQL的数据源,运行框架,tree和rule,Rule,Context运行过程,hiveContext运行过程,SparkSQL CLI等
- 一、HTML和CSS基础--HTML+CSS基础课程--第1部分
- [导入]SQL 分页存贮过程
- 有人说“如今聪明的年轻人上班,愚蠢的年轻人创业!”对此大家怎么看?
- 谷歌云TPU上可以用Julia啦!0.23秒跑100张图片,Jeff Dean点赞推荐
- pku2777 Count Color
- 20191202_2_识别偷税漏税人
- Java程序员必读——领悟Java编程思想
- 基于GEE平台实现湖泊水位与水体面积关系分析
- 【集成电路 - -芯片】
- 苹果iPA游戏软件资源下载网站
- 滴滴云GPU服务器做深度学习之tensorflow object detect 对象检测 实践
- hr2000 光谱Matlab,HR2000+高分辨率光谱仪
- 客快物流大数据项目(七十二):Impala sql 语法
- 【LeetCode解题报告】《算法基础006_日期算法》- Java
- Halcon入门(一)shape-based matching
- 2022年G3锅炉水处理考试及G3锅炉水处理考试资料
热门文章
- Android炫酷的UI界面
- VCL (三) 属性编辑器
- openpyxl库操作excel表格
- java object save_Java之Object类和常用的API
- usb复合设备 linux,使用STM32CubeMX编写USB复合设备
- MySQL(InnoDB剖析):42---事务之(事务控制语句:begin、commit、rollback、savepoint、transaction)
- 价格战退潮后中通快递迎来强势期,不改长期向好趋势
- 数据采集系统网关采集工厂效率
- Http Server的工作原理
- 【PCB专题】如何在嘉立创8月1日起的新规则下免费打样