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 基础知识总结相关推荐

  1. JDBC基础知识复习

    JDBC基础知识复习 1.JDBC连接数据库 1.1.导入JDBC驱动 1.2.注册JDBC驱动程序 1.3.创建连接对象 1.4.关闭JDBC连接 1.5.每种数据库对应的驱动名和URL 2.JDB ...

  2. java数据库edit_Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  3. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  4. JDBC 基础、CRUD、分页 第一节

    JDBC基础知识 JDBC 简介 1.持久化 把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以"固化",而 ...

  5. java jdbc_详解Java基础知识——JDBC

    JDBC Java DataBase Connectivity,java数据库连接,为了降低操作数据的难度,java提供jdbc,按照java面向对象特点,对操作进行了很多封装. JDBC提供了很多接 ...

  6. JDBC 学习笔记(一)—— 基础知识 + 分页技术

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  7. java培训基础知识都学哪些

    很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...

  8. Spark基础知识解答

    Spark基础知识解答 一. Spark基础知识 1. Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架. Spark基于mapred ...

  9. JMeter性能测试的基础知识和个人理解

    JMeter性能测试的基础知识和个人理解 1. JMeter的简介   JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常 ...

最新文章

  1. [快速数论变换 NTT]
  2. 3.2 目标点检测-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. Java 7对抑制异常的支持
  4. 【数据结构与算法】【字符串匹配】Trie树
  5. 关于低代码真实技术趋势,听低代码巨头 Mendix 怎么说
  6. 【牛腩1】--- 服务器错误:编译错误
  7. 特例模式(Special Case Pattern)与空对象模式(Null Pointer Pattern)—— 返回特例对象而非 null
  8. 从Oracle Database 角度来看浪潮天梭K1主机的操作系统选择
  9. java实现根据pdf文件模板生成pdf文件
  10. 非线性系统基于干扰观测器的抗干扰控制
  11. 台式计算机垃圾清理程序,PC Cleaning Utility(电脑垃圾清理软件)
  12. P4556 [Vani有约会]雨天的尾巴(线段树合并)
  13. narwal机器人_首款全自动扫拖一体机器人Narwal云鲸,彻底解放双手
  14. 144G在线网页制作html系统源码下载
  15. 如何通过Darkvm注册阿里云国际版?
  16. Cocos2d-x游戏暂停、继续游戏、重新开始界面的实现---之游戏开发《赵云要格斗》(10)
  17. python||报错‘gbk‘ codec can‘t decode byte 0x80 in position 8: illegal multibyte sequence
  18. ICMP是个啥?一分钟介绍ICMP协议
  19. 自定义404页面并打包docker部署项目
  20. 万物互联时代,oasis助力数据存储保护

热门文章

  1. 遍历Repeater与ItemDataBound事件发现的几个问题。
  2. 画出HTML DOM对象层次图。文档对象document有哪些常用的属性和方法?
  3. 以get方式传递json字符串问题。
  4. 令人头疼的字符编码的问题
  5. jenkins job构建后汇总结果到同一个文本文档中去
  6. 聚类分析基础知识总结及实战解析
  7. HBase 系统架构
  8. .NET 线程问题汇总
  9. struts的DevMode模式
  10. Android .classpath文件的作用