JDBC 基础知识总结
1. 何谓JDBC --- Java Database Connectivity. 由Sun 公司提供的访问数据库的一组java类和接口,用来对数据库进行链接、发送SQL语句、处理返回结果,为开发人员提供了统一的访问数据库入口API,使得开发人员可以不用绑定到特定数据库访问API。
2. 应用程序,JDBC API,JDBC 驱动程序,数据库之间的层次关系如下图:
3.
4. JDBC 有四种驱动:
4.1 JDBC-ODBC 桥链接: 把对JDBC接口的访问翻译成对应的ODBC的访问。
(缺点:执行效率比较低;它需要在客户机上安装一个ODBC驱动,使用这一类驱动,就失去JDBC平台无关的好处;此外,ODBC驱动器需要客户端的管理
4.2 JDBC-Native 本地API: 提供了一个构建在本地数据库驱动上的JDBC接口而没有使用ODBC。
(缺点:JDBC驱动将标准的JDBC调用转化为对数据库API的本地调用,使用这一类的驱动也会失去JDBC平台无关性的好处,并且需要安装客户端的本地代码)
4.3 JDBC-Network: JDBC-network桥不需要客户端的数据库驱动。它使用网络上的中间服务器来访问一个数据库可以实现负载均衡、连接缓冲池和数据缓存等。
只需要相对更少的下载时间,具有平台独立性,而且是不需要在客户端安装并取得控制权,很适合于Internet上的应用。
4.4 纯JAVA驱动:纯Java数据库驱动来提供直接的数据库访问,由于这类驱动运行在客户端,并且直接访问数据库,因此运行在这个模式暗示要且用一个两层的体系
5. JDBC API 有哪些
5.1 java.sql.Connection 链接接口
java.sql.Driver 驱动接口
java.sql.DriverManager 驱动管理类
java.sql.CallableStatement 可调用申明,用于调用存储过程。
java.sql.PreparedStatement 一个预编译的SQL对象接口
java.sql.ResultSet 一个结果集接口
... 等等
5.2 javax.sql 主要是对链接管理,分布式事物,连接池的管理.
6. Connection --- 有两种类型的链接(直接连接,连接池),其中直接连接是指在JAVA代码中,写数据打开,关闭代码来维护连接; 连接池是指J2EE服务器管理的连接.
7. JDBC 编程主要分以下步骤:
7.1 装载并注册JDBC程序
加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名: Class.forName(driver);
Oracle: Class.forName("oracle.jdbc.driver.OracleDriver");
SQLServer: Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver");
MySql: Class.forName(“com.mysql.jdbc.Driver");
7.2 定义URL
URL指定数据库服务器的主机名,端口以及希望与之连接的数据库名
Oracle: URL = "jdbc:oracle:thin:@localhost:1521:hrSys" ;
SQLServer: URL = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hrSys";
MySql: URL = “jdbc:mysql://localhost:3306/hrSys”
7.3 建立连接
有了数据库 URL 用户名密码就可以和数据库建立连接, 连接的类为 Connection, 格式为: Connection conn = DriverManager.getConnection(URL地址,用户名,密码);
Connection conn = DriverManager.getConnection(URL,username,password);
7.4 建立Statement对象
Statement对象用来向数据库发送查询和命令.它由Connection的createStatement()方法创建
Statement stmt = conn.createStatement();
7.5 准备并执行调用SQL语句
有了statement对象就可以使用它来发送SQL语句
String sql = “select * from table”;
ResultSet rs = stmt . executeQuery(sql);
Statement对象的常用方法:
executeQuery( ): 执行SQL查询并在ResultSet中返回数据, ResultSet可能为空,但不会为null.
executeUpdate( ): 执行update , insert , delete 命令,返回受影响的行数,可以为0. 它还支持DDL命令,如 create table , drop table , alter table .
PS:
使用PreparedStatement 执行预编译的SQL语句这样可以比使用拼字符串更安全
String sql = “select * from student where name=? and id = ?” 其中name为字符型数据 id 为整数
PreparedStatement pstmt = conn . preparedStatemengt(sql);
pstmt.setString(1,”lilei”); 第一个问号值为 lilei
pstmt.setInt(2,5); 第二个问号值为 5
ResultSet rs = pstmt.executeQuery( );
7.5 出来ResultSet 结果集
ResultSet 的next 方法返回一个布尔值 TRUE 表下面还有数据,并移动到表的下一行。
使用ResultSet对象的 getXXX(“字段名”)获取该行中字段的数据,或者getXXX("index")来获取索引.
7.6 释放资源
Connection.close(); 关闭连接, 关闭连接会关闭对应的Statement和ResultSet 对象
8. JDBC 批处理方式
JDBC 批处理有两种方式:
8.1 第一种方式:Statement.addBatch(sql) (Statement中有一个集合属性list存储所有的sql)
executeBatch()方法:执行批处理命令
clearBatch()方法:清除批处理命令
1 try{ 2 3 conn = DBManager.getConnection(); 4 5 String sql1 = "insert into testbatch(id,name) values(1,'aa')"; 6 7 String sql2 = "insert into testbatch(id,name) values(2,'bb')"; 8 9 String sql3 = "delete from testbatch where id=1"; 10 11 st = conn.createStatement(); 12 13 st.addBatch(sql1);//把sql语句加入到批中 14 15 st.addBatch(sql2); 16 17 st.addBatch(sql3); 18 19 //该方法返回值为int[],返回的是每条sql语句执行后对表中记录的影响行数 20 21 st.executeBatch(); 22 23 st.clearBatch(); 24 25 }catch (Exception e) { 26 27 throw new RuntimeException(e); 28 29 }finally{ 30 31 DBManager.release(conn, st, rs); 32 33 } 34 35 }
采用Statement.addBatch(sql)方式实现批处理的
优点:可以向数据库发送多条不同的SQL语句。
缺点: 一是SQL语句没有预编译; 二是当向数据库发送多条语句相同,但仅参数不同的SQL语句时,需重复写上很多条SQL语句(如:sql1, sql2那样的繁琐)
8.2 第二种方式:PreparedStatement.addBatch()
1 { 2 3 long starttime = System.currentTimeMillis(); 4 5 Connection conn = null; 6 7 PreparedStatement st = null; //list 8 9 ResultSet rs = null; 10 11 try{ 12 13 conn = DBManager.getConnection(); 14 15 String sql = "insert into testbatch(id,name) values(?,?)"; 16 17 st = conn.prepareStatement(sql); //预编译次SQL语句 ; 18 19 for(int i=0;i<10000004;i++){ 20 21 st.setInt(1, i); 22 23 st.setString(2, "aa" + i); 24 25 st.addBatch(); // 加入到批处理中; 26 27 if(i%1000==0){ // 由于添加记录数目较大,可能导致内存爆满,所以每千条提交一次,并清理批处理内容 28 29 st.executeBatch(); 30 31 st.clearBatch(); 32 33 } 34 35 } 36 37 st.executeBatch();//为了保证最后那4条sql语句也会被提交 38 39 }catch (Exception e) { 40 41 throw new RuntimeException(e); 42 43 }finally{ 44 45 DBManager.release(conn, st, rs); 46 47 } 48 49 long endtime = System.currentTimeMillis(); 50 51 System.out.println("共花了: " + (endtime-starttime)/1000 + "秒"); 52 53 }
采用PreparedStatement.addBatch()实现批处理
• 优点:发送的是预编译后的SQL语句,执行效率高。
• 缺点:只能应用在SQL语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据
转载于:https://www.cnblogs.com/dragonflyyi/p/3703330.html
JDBC 基础知识总结相关推荐
- JDBC基础知识复习
JDBC基础知识复习 1.JDBC连接数据库 1.1.导入JDBC驱动 1.2.注册JDBC驱动程序 1.3.创建连接对象 1.4.关闭JDBC连接 1.5.每种数据库对应的驱动名和URL 2.JDB ...
- java数据库edit_Java数据库连接——JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- Java数据库连接--JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- JDBC 基础、CRUD、分页 第一节
JDBC基础知识 JDBC 简介 1.持久化 把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以"固化",而 ...
- java jdbc_详解Java基础知识——JDBC
JDBC Java DataBase Connectivity,java数据库连接,为了降低操作数据的难度,java提供jdbc,按照java面向对象特点,对操作进行了很多封装. JDBC提供了很多接 ...
- JDBC 学习笔记(一)—— 基础知识 + 分页技术
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- java培训基础知识都学哪些
很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...
- Spark基础知识解答
Spark基础知识解答 一. Spark基础知识 1. Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架. Spark基于mapred ...
- JMeter性能测试的基础知识和个人理解
JMeter性能测试的基础知识和个人理解 1. JMeter的简介 JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常 ...
最新文章
- [快速数论变换 NTT]
- 3.2 目标点检测-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- Java 7对抑制异常的支持
- 【数据结构与算法】【字符串匹配】Trie树
- 关于低代码真实技术趋势,听低代码巨头 Mendix 怎么说
- 【牛腩1】--- 服务器错误:编译错误
- 特例模式(Special Case Pattern)与空对象模式(Null Pointer Pattern)—— 返回特例对象而非 null
- 从Oracle Database 角度来看浪潮天梭K1主机的操作系统选择
- java实现根据pdf文件模板生成pdf文件
- 非线性系统基于干扰观测器的抗干扰控制
- 台式计算机垃圾清理程序,PC Cleaning Utility(电脑垃圾清理软件)
- P4556 [Vani有约会]雨天的尾巴(线段树合并)
- narwal机器人_首款全自动扫拖一体机器人Narwal云鲸,彻底解放双手
- 144G在线网页制作html系统源码下载
- 如何通过Darkvm注册阿里云国际版?
- Cocos2d-x游戏暂停、继续游戏、重新开始界面的实现---之游戏开发《赵云要格斗》(10)
- python||报错‘gbk‘ codec can‘t decode byte 0x80 in position 8: illegal multibyte sequence
- ICMP是个啥?一分钟介绍ICMP协议
- 自定义404页面并打包docker部署项目
- 万物互联时代,oasis助力数据存储保护