jdbc是java语言编写的类和接口_JDBC——Java语言连接数据库的标准

JDBC概述

API

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

要想彻底了解JDBC首先就必须要搞清楚JDBC的API到底有什么。

JDBC的API主要都被存放在java.sql和javax.sql中,前者是Java核心包而后者是扩展包,java类库是Java发布之初就确定了的基础库,而javax类库则是在上面增加的一层东西,就是为了保持版本兼容要保存原来的,但有些东西有了更好的解决方案,典型的就是awt(Abstract Windowing ToolKit) 和swing。

一般而言,我们在程序设计中使用较多的是java.sql而非javax.sql。java.sql类库中包含的是一些接口和方法

java.sql常用API

DriverManager 类

建立与驱动程序的连接

Driver 接口

提供用来注册和连接基于 JDBC 技术(“JDBC驱动程序”)的驱动程序的 API,通常仅由 DriverManager 类使用

Connection 接口

提供创建语句以及管理连接及其属性的方法

Statement

用于发送基本 SQL 语句

PreparedStatement

PreparedStatement:用于发送准备好的语句或基本 SQL 语句(派生自 Statement)

CallableStatement

用于调用数据库存储过程(派生自 PreparedStatement)

ResultSet 接口

获取和更新查询的结果

Date 类

SQL DATE 的映射关系

SQLData 接口

指定 UDT 到此类的一个实例的映射关系

形象记忆

你可以将客户端和服务器想象成一条河的两岸,那么为了使两岸之间有联系,我们就需要根据河的宽度来架桥,而与这条河相对应架起的这座桥我们称之为DriverManager;而要通过桥进行两岸的贸易往来就必须要进行聘请搬运工来搬运双方交易的货物,这样的搬运工我们称他们为Connection;这种搬运工假设有高度的自主能动性,能够根据两岸的具体需求来搬运相应的货物,而这种行为的发生是由于它们有一个叫Statement的大脑神经元,这个神经元可以自由地控制搬运工的行为发生;为了存储搬运工辛苦成果,两岸必须各自建立一个存储货物的仓库,我们叫它ResultSet。

它们之间的关系大概就是这样的:

0a765429a64032c3bafc006e4da4b0d2.png

连接数据库

基本步骤

1.加载数据库连接相应的驱动类

2.调用数据库接口,建立数据库连接

3.创建数据库具体的操作对象

4.设计要运行的SQL语句

5.收集处理结果集

6.关闭JDBC对象及其相关的类

重点说明

NO1.注册驱动程序的三种方法:

一、Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

通过Class把类先装载到java的虚拟机中,并没有创建Driver类的实例。

二、DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());

jdbc是使用桥的模式进行连接的,即桥连接。DriverManager就是管理数据库驱动的一个类,java.sql.Driver就是一个提供注册数据库驱动的接口,而com.microsoft.sqlserver.jdbc.SQLServerDriver()是 java.sql.Driver接口的一个具体实现。

三、System.setProperty("jdbc.drivers", "com.microsoft.sqlserver.jdbc.SQLServerDriver");

多个驱动使用冒号分隔开,在连接时JDBC会按顺序搜索,直到找到第一个能成功连接指定URL的驱动程序。

推荐使用第一种方法,理由有两点:

1.第一种方法的好处在于能够在编译时不依赖于特定的JDBC Driver库,也就是减少了项目代码的依赖性,而且也很容易改造成从配置文件读取JDBC配置,从而可以在运行时动态更换数据库连接驱动,而第二种方法则不可以这样做,它一定要有JDBC的驱动才可以通过编译,这样对我们的程序就有很多的坏处,尤其是为以后换数据库带来麻烦。

2.我们通过Driver类的源码可以了解到,Driver类中就有一个静态的代码块,只要我们执行了Driver类中的静态代码块,并把驱动的实例放入到Drivers的一个数组列表中,我们再调用方法registerDriver就相当于又向Drivers列表中放了一次Driver驱动,虽然这并不影响我们程序,但是这样做实在是没有必要,反而会影响程序的运行。事实上第二种和第三种方法都要创建Driver类实例。

NO2.调用接口,建立连接:

Connection conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Pet", "sa", "123456");

jdbc:sqlserver类似于网络协议,让Java知道要干什么;localhost:1433是主机地址及端口,让java知道目标在哪儿;后面的就是数据库的表名,用户名,密码,没有这些,数据库就会不理睬Java的请求。

NO3.创建一个Statement对象:

Statement state=conn.createStatement();

PreparedStatement pst=conn.prepareStatement(sql);

上面提供了两种方法用来创建Statement对象,凡是要向数据库发送SQL语句时,都需要创建Statement接口或者PreparedStatement接口。PreparedStatement:预编译的Statement接口,具体操作步骤如下

第一步:通过连接获得PreparedStatement接口对象,用带占位符(?)的sql语句构造。

PreparedStatement ps=con.praperedStatement("select * from Pet where id=?");

第二步:设置参数

ps.setString(1,"3");

第三步:执行sql语句

rs= ps.executeQuery();

PreparedStatement(预编译)的优点:

a.执行SQL语句使用预编译的方式。Statement直接将SQL语句发送到数据库。PreparedStatement安全性要更高一些。

b.使用占位符的方式拼接SQL中的参数,SQL更加的简洁。

除此之外,如果执行多条只有参数值不同SQL语句时,预编译的PreparedStatement执行效率会明显比非预编译的Statement高许多。

所以在实际操作中应当尽可能地使用预编译。

NO4.导入SQL语句到对象中并返回结果:

String sql="select*from msg";

ResultSet rs=state.executeQuery(sql);//返回一个查询到的结果集

ResultSet rs2=state.executeUpdate(sql);//返回值为 int 型,表示影响记录的条数

NO5.收集返回的结果集:

executeQuery(sql)用于执行DQL数据查询语言,通过使用select语句返回一个结果集ResultSet,而后再遍历得到查询结果 ;

ResultSet.next()会根据下标来获取数据,与数组不同的是数据库中第一条记录的下标是1而非0;

executeUpdate(sql)则用于执行DML数据操作语言(增加,删除,修改,返回int,表示语句影响行数);

NO6.解除与数据库的连接:

尤其要注意close()的顺序!

要按先 ResultSet ,再Statement,最后Connetction的顺序关闭资源。因为ResultSet和Statement在连接的情况下才能使用,所以在连接使用结束后可能还有其他的Statement还在连接,所以不能先关闭Connection。

再借用之前举的例子,你想啊,如果桥上的搬运工还没搬完货物就先把桥撤了会怎么样。

实战演练

JDBCDemo01连接数据库

那些被注释掉的代码可以试着解除注释运行一下,会发现新的大陆。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

* 数据库连接步骤

* @author Administrator

*

*/

public class JDBCDemo01 {

public static void main(String[] args) throws ClassNotFoundException, SQLException {

//加载数据库连接的驱动类

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//数据库的接口

Connection conn=

DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Pet",

"sa", "123456");

//SQL语句(数据)处理的接口

// DQL数据查询语言(查询,返回结果集)

// DML数据操作语言(增加,删除,修改,返回int,表示语句影响行数)

//创建具体操作对象

Statement state=conn.createStatement();

String sql="select*from msg";

//执行SQL语句,返回结果集

ResultSet rs=state.executeQuery(sql);

//使用循环遍历结果集中的数据

while(rs.next()){

//根据下标获取数据,下标是从1开始(列数)

//System.out.println(rs.getString(1)+

//" "+rs.getString(2));

//根据列名取数据

System.out.println(rs.getString("id")+" "+

rs.getString("info"));

}

//关闭JDBC对象及其相关类

rs.close();

state.close();

conn.close();

//System.out.println(conn);

}

}

感谢您的阅读

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

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

相关文章

怎样判断电饭锅温度传感器的好坏?_空调温度传感器的作用与检测。

温度传感器是指对温度进行感应,并将感应的温度变化情况转换为电信号的功能部件。我们在练习温度传感器检测代换之前,要先对温度传感器的安装位置、结构特点和工作原理有一定的了解。1、温度传感器的安装位置及结构在空调器室内机中,通常设有两…

【codeforces 507E】Breaking Good

【题目链接】:https://vjudge.net/contest/164884#problem/D 【题意】 给你一张图; 图中有些路是完好的;但有些路还没修好; 先不管路有没有修好; 问你从起点到终点的最短路; 如果最短路上有没修好的路,那么你要把它修好; 而不在最短路上的,如果是完好的路,你需要把它摧毁…

java去掉图片边框颜色_sharp 去除图片边框

trim接受参数是颜色相似度, 并不能指定边框颜色, 所以有可能会误删除内容, 需要注意trim 需要转为buffer或者文件后再次操作, 否则图片信息不变从剪裁效果来看, 精度和速度都是可以的const sharp require("sharp");const path "./html/a.png";const outp…

java mail 不用密码_iPhone 无需越狱,简单给 App 加密码锁

在手机上总有些小秘密,也有些APP不想被打开。由于iOS本身限制,想给APP加上密码锁,一般都是需要越狱才能实现。其实在iOS 12就加入了【屏幕使用时间】,用来更好设置APP使用时间的限额。屏幕使用时间屏幕时间功能可以协助您了解自己…

Java植物名录程序_程序员用Java语言编写多线程应用程序,程序员能控制的关键性工作有两个方面:一是编写线程的_________方法;二是建立线程实例。...

沟通的目的是打造“3G团队”,其中的“3G”具体指:“啊,时间过得真快啊!”中的“啊”活塞与气缸盖、气缸壁共同组成燃烧室,承受气缸中气体的压力,并将此压力通过活塞销和连杆传给食品是指人食用或饮用的成品和原料,以及按照传统既是食品又是( )的物品,但不…

【t090】吉祥数

Time Limit: 1 second Memory Limit: 128 MB 【问题描述】 为了迎接圣诞,信息学兴趣小组的同学在辅导老师的带领下,举办了一个盛大的晚会,晚会的第一项内容是做游戏:猜数。老师给 每位同学发一张卡片,每张卡片上都有…

spark内存溢出怎么解决_和平精英:更新需要预留6G内存,玩家抱怨手机扛不住,怎么解决?...

嗨,小伙伴们大家好呀!《和平精英》新版本终于来了哈,小伙伴们在22号上午登录游戏,就可以收到更新提示,点击进行更新就好了。或者是在各个应用商店里等待更新推送,也行哦!但是呢,每到…

php 字符串0转换bool_PHP数据类型转换(转)

PHP数据类型转换PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:•(int)、(integer):转换成整形•(float)、(double)、(real):转换成浮点型•(string):转换成字符串•(bool)、(boolean):转换成布尔…

【转】LDA数学八卦

转自LDA数学八卦 在 Machine Learning 中,LDA 是两个常用模型的简称: Linear Discriminant Analysis 和 Latent Dirichlet Allocation, 在这篇文章中我们主要八卦的是后者。LDA 是一个在文本建模中很著名的模型,类似于 SVD, PLSA …

python3安装json库-python库json快速入门

在本教程中,您将学习如何借助示例在Python中解析,读取和编写JSON。 此外,您将学习将JSON转换为dict并将其打印出来。 JSON简介 JSON (JavaScript Object Notation) 是一种用于表示结构化数据的流行数据格式。 常用于服务器和Web应用程序之间传…

python 常量 模块_Python字符串模块的有用常量

示例Python的string模块为与字符串相关的操作提供常量。要使用它们,请导入string模块:>>> import stringstring.ascii_letters:ascii_lowercase和的串联ascii_uppercase:>>> string.ascii_lettersabcdefghijklm…

PAT1132: Cut Integer

1132. Cut Integer (20) 时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueCutting an integer means to cut a K digits long integer Z into two integers of (K/2) digits long integers A and B. For example, after cutting Z 167334, we…

电脑字体模糊_小红书上传视频模糊?做小红书视频99%的工具都在这了

到现在小红书视频号功能已经上线快三个月了,越来越多的小伙伴开始拍视频、创作视频笔记,但是对于新接触视频的小伙伴来说,拍摄视频好像是一件很难的事,特别是不清楚该选择什么拍摄设备、不知道怎么剪辑视频,还有如何上…

Codeforces Gym101518H:No Smoking, Please(最小割)

题目链接 题意 给出一个n*m的酒店,每个点是一个房间,要将这个酒店的房间划分成为两块(一块无烟区,一块吸烟区),相邻的两个房间之间有一条带权边,权值代表空气锁的面积,如果把这条边给…

java如何实现服务降级_Hystrix服务降级

## 注意Hystrix默认的服务降级时长是1秒钟.因为网络波动,这个值在正式环境中需要调整一下.## 导入包~~~org.springframework.cloudspring-cloud-starter-netflix-hystrix2.0.1.RELEASE~~~## 启动类~~~package com.like;import org.springframework.boot.SpringApplication;impo…

谷歌浏览器不能上网_谷歌浏览器插件下载及安装教程!

emmm......这篇文章的内容非常小白,相信大部分人都会这个基本操作。但是阁主相信还有些妹子操作不来,如果还没有男朋友,那不是铁定不会安装谷歌浏览器插件么?其实“谷歌浏览器插件”这个组合,可以解决很多问题&#xf…

高级技巧之Lambda表达式

1.Lambda表达式简介 其本质上是一种匿名方法,它既没有方法名,也即没有访问修饰符和返回值类型,使用它来编写代码将会更加简洁,也更加易读。 2.使用该表达式需要配置的数据 3.传统java和使用Lambda表达式的对比 0)总结&…

java二维数组两个框代表什么_在java语言中,二维数组的两个中括号[][]分别表示()和()。...

【判断题】一元统计分析是研究一个随机变量统计规律的学科。【判断题】合伙创业的成功率一般低于独资创业的成功率。【单选题】镜检时呈“竹节状”排列的是【判断题】酵母菌的菌落与放线菌的菌落相似。【判断题】木纤维是厚壁细胞的一种,它的化学成份以纤维素为主。( )【判断题…

设计模式之——Builder建造模式

Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式。 示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目。 Builder抽象类,为建造模式的核心pa…

java程序员_Java和Python的区别 好程序员帮大家解读

Java和Python的区别 好程序员今天先来解读Java编程语言的优势,人工智能和大数据火爆一时,随之而来,引起了编程语言的人气暴涨。而Java和Python作为最炙手可热的编程语言从一开始便赢得了众多程序员的青睐。凭借各自强大的性能和优势&#xff…