JDBC学习笔记之JDBC简介

1. 引言

JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据。

JDBC可以帮助我们编写下列三种编程活动的java应用程序:

  • 1.连接到数据源,如数据库;
  • 2.发送查询和更新语句到数据库;
  • 3.检索并处理从数据库收到的结果以满足我们的查询要求。

以下简单的代码片段给出了以下三个步骤的简单示例:

/**
* A demo of JDBC
* @param username : 数据源的登录名
* @param password : 数据源的密码
*/
public void connectToAndQueryDatabase(String username, String password) {Connection con = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");while (rs.next()) {int x = rs.getInt("a");String s = rs.getString("b");float f = rs.getFloat("c");}
}

这个很短的代码片段十分简单,实例化一个DriverManager对象,以连接到数据库驱动程序并登录到数据库,该语句将sql语句查询的对象实例化到数据库中,实例化一个ResultSet检索查询结果的对象,并执行一个简单的while循环,检索并显示这些结果。

2. JDBC产品组件

JDBC包括四个组件:

    1. JDBC-API - JDBC™API提供对Java™编程语言的关系数据的编程访问。使用JDBC API,应用程序可以执行SQL语句,检索结果,并将更改发送到底层数据源。此外,JDBC API还可以在分布式异构环境中与多个数据源进行交互。JDBC API是Java平台的一部分,它包括Java™标准版(Java™SE)和Java™企业版(Java™EE)。在JDBC 4.0 API分为两个包:java.sql和javax.sql,在Java SE和Java EE平台均包含这两个包。
    1. JDBC驱动程序管理器 - JDBC DriverManager类定义了一个对象,这个对象可以将java应用程序连接到jdbc驱动程序。从传统上来看,DriverManager是整个JDBC体系结构的支柱。DriverManager不仅仅非常的小巧,而且非常简洁。通过javax.naming和javax.sql这两个标准扩展包,我们可以通过 java 命名和目录接口™ (jndi)命名服务来注册对象去建立数据源的连接的方式去使用数据源。实际上,我们可以使用任何的连接机制,但数据源建议尽可能多地使用对象。
    1. JDBC测试套件 - 这些测试也许不是十分的全面和详尽,但是在JDBC API中执行了很多重要的功能。
    1. JDBC-ODBC Bridge - Java软件桥接可以通过ODBC驱动程序提供JDBC访问。但是需要注意的是,我们需要在使用此驱动程序的每台客户端计算机上加载ODBC二进制代码。因此,ODBC驱动程序最适合于客户端安装不是主要问题的公司网络,或者是以三层架构中的Java编写的应用程序服务器代码。

我们可以使用四个JDBC组件中前两个连接到数据库,然后构建一个Java程序,使用SQL命令去联系和测试关系型数据库。最后两个组件是在一个特定的环境中使用,用于测试Web应用或者是与基于ODBC的DBMS(Database Management System)的通信。

3. JDBC架构

3.1 两层和三层处理模型

数据访问的两层架构

图1:数据访问的两层架构

在两层模型中,Java Applet或应用程序直接与数据源进行交互。因此我们需要一个JDBC驱动程序,它可以与被访问的指定的数据源通信,能将用户的命令传递给数据库或者其他的数据源,并且将这些命令的执行结果返回给用户,而这个数据源可能是用户通过网络连接的另外一台计算机上,这种配置方式被称为client/server配置方式。在这种配置方式中,用户的计算机作为客户端,而数据源所在的计算机作为服务端,用于通信的网络可以是可以是内联网,例如连接公司内的员工,也可以是互联网。

数据访问的三层架构

图2:数据访问的三层架构

在三层模型中,命令被发送到服务的“中间层”,然后将命令发送到数据源,数据源处理命令并将结果发送回中间层,然后将其发送给用户。三层模型具有很多优势,首先中间层可以保持访问的控制和公司数据类型的更新,然后简化了应用程序的部署,最后,在许多情况下,三层架构可以提供性能优势。

3.2 JDBC API支持数据库访问的两层和三层处理模型

直到最近,中间层经常用C或C ++等语言编写,提供快速的性能。然而,随着将Java字节码转换为特定机器的代码和技术(如Enterprise JavaBeans™)的编译器不断得到优化,Java平台凭借Java的强大、多线程和安全等优势正在迅速成为中间层开发的标准平台。

随着越来越多的企业越来越多地使用Java编程语言来编写服务器代码,JDBC API正在三层架构的中间层中越来越多地被使用,其对连接池、分布式事务和断开连接的行集合的支持这使JDBC成为服务器技术。当然,JDBC API也是允许从Java中间层访问数据源的。

4. 声明

本文翻译自oracle官网并做了部分调整以便于理解,更多信息请访问原文。

转载于:https://www.cnblogs.com/xiao2/p/7193402.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PaddleOCR在 windows下的webAPI部署方案

很多小伙伴在使用OCR时都希望能过采用API的方式调用,这样就可以跨端跨平台了。本文将介绍一种基于python的PaddleOCR识方案。喜欢的可以关注公众号,获取更多内容。# 一、 windows环境下部署###1.环境操作系统:windows10;主要软件环…

Vim的NerdTree插件

一个项目文件多起来时,左边的文件树菜单是必要的。参考:常用文件树快捷键所有命令及推荐键盘映射:官方 在vundle插件管理的方式,直接在~/.vimrc中的Plugin段落中加入Plugin "scrooloose/nerdtree"然后重启Vim并输入Plug…

java简单投票系统_JSP实现的简单Web投票程序代码

本文实例讲述了JSP实现的简单Web投票程序。分享给大家供大家参考。具体如下:这里使用文本文件作为数据存储的投票系统。1. vote.java:package vote;import java.io.*;import java.util.*;public class vote {public String filePath "";publi…

LeetCode139:Word Break

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s “leetcode”, dict [“leet”, “code”]. Return true because “leetcode” can be segm…

HTTP2指纹识别(一种相对不为人知的网络指纹识别方法)

这是关于网络指纹识别的两部分系列的第二部分上一部分我介绍了有关TLS 指纹识别方法(以及在不同客户端的指纹有何区别):https://mp.weixin.qq.com/s/BvotXrFXwYvGWpqHKoj3uQHTTP/2 指纹识别和Tls指纹类似也是一种 Web 服务器可以依赖指纹来识…

中兴智能视觉大数据:人脸识别技术目前处于“用的不够,用的不好”

中兴智能视觉大数据报道:在2018年5月30日举行的“人脸识别等AI技术在校园周边安全中的应用”研讨会上,中国人民大学危机管理研究中心主任唐钧指出,人脸识别等AI技术具有“精细识别”、“提前干预”、“及时处置”等优势,有利于促进…

HAProxy的日志配置以及ACL规则实现负载均衡

HAProxy配置日志策略 默认情况下,HAProxy是没有配置日志的在centos6.3下默认管理日志的是rsyslog,可以实现UDP日志的接收,将日志写入文件,写入数据库先检测rsyslog是否安装rpm -q rsyslog安后在/etc/rsyslog.d/下创建haproxy.conf,内容如下: 1 $ModLOad imudp 2 $UDPServerRun …

常见浏览器兼容性问题与解决方案?

(1)浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。碰到频率:100%解决方案:CSS里 *{margin:0;padding:0;}备注&#xff…

C#反射,性能优化,不止于优化

“ 架构师的价值,在于独立且理性的思考”想要写出灵活而且具有更好适应性的代码,反射是首选方案。反射赋予程序在运行时动态创建实例的能力,可以在程序运行时(而非编译时)获取实例类型,获取元数据信息&…

设计模式C++实现--Observer模式

2019独角兽企业重金招聘Python工程师标准>>> 观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。…

Liunx 安装mysql 5.6.16

2019独角兽企业重金招聘Python工程师标准>>> 1.卸载原有的mysql 1)先查看原有的mysql rpm -qa|grep -i mysql 2)删除 mysql rpm -e --nodeps 包名 3)删除老版本 mysql的开发头文件和库 rm -fr /usr/lib/mysql rm -fr /usr/include/mysql 注意:卸载后/va…

java有效索引范围_Java索引超出范围:0

我拼命试图找出一种方法来阻止“字符串索引超出范围:0”错误……只要我不输入任何内容然后继续执行,就会发生这种情况:static String getRef(Scanner Keyboard){Scanner keyboard new Scanner(System.in);String ref "";boolean valid false…

UESTC 电子科大专题训练 DP-N

题意:有n个人写m行代码,第i个人写一行代码会产生ai个bug,问bug小于b的方案数 思路:背包二维费用 AC代码: #include "iostream" #include "string.h" #include "stack" #include "q…

HashMap与HashTable的区别

HashMap和HashSet的区别是Java面试中最常被问到的问题。如果没有涉及到Collection框架以及多线程的面试,可以说是不完整。而Collection框架的问题不涉及到HashSet和HashMap,也可以说是不完整。HashMap和HashSet都是collection框架的一部分,它…

数据挖掘 pandas基础入门之操作

为什么80%的码农都做不了架构师?>>> 统计 import pandas import numpy# 通过传递一个 numpyarray,时间索引以及列标签来创建一个DataFrame: dates pandas.date_range("20180509", periods6) df pandas.DataFrame(num…

C# Task.Delay()和Thread.Sleep()有什么区别?

很多时候我们需要做一段延时处理,就直接Thread.Sleep(n)处理了,但实际上延时也可以用Task.Delay(n),那二者之间有没有区别呢?我们先来看一个案例:using System; using System.Threading; using System.Threading.Tasks…

java queue源码_java源码解读--queue

queue接口特点:可以模拟队列行为,即“先进先出”。接口结构queue接口继承了Collection接口,并增加了一些新方法12345678910111213141516public interface extends Collection{boolean add(E e);//将元素插入队列,如果失败返回fals…

旧题新做:从idy的视角看数据结构

“今天你不写总结……!!!” 额…… 还是讲我的吧。这些考试都是idy出的题。 20170121:DFS序、 ST表、线段树练习 这是第一次考数据结构。 Problem 1. setsum 1 second    给你一个长度为N 的整数序列,支持两种操作…

常用的 Java 工具类之 Apache 全家桶使用

平常我们在日常的开发中会一些通用的功能封装成一些工具类,以便之后复用。但是有些常用功能,业界已经存在,我们无需造轮子,只需直接使用或借用它们的 Api ,构建我们的自己项目中工具类。这篇首先介绍平常用到的 Apache…

.NET MAUI实战 MessagingCenter

1.概要在.NET MAUI提供了消息机制,该机制为订阅/发布模式。发布-订阅模式是一种消息传递模式,在此模式下,发布者可在无需知道任何接收方(称为订阅方)的情况下发送消息。同样,订阅方可在不了解任何发布方的情…