`
johnnycmj
  • 浏览: 35815 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

14、JDBC数据库编程

阅读更多

14、JDBC数据库编程

14.1、为什么需要JDBC

当前所有的B/S系统无一不和数据库之间有交互

JDBC(Java Database Connectivity)是一种可用于执行SQL语句的 Java API

JDBC的应用模型如下图所示:



 14.2、JDBC驱动

JDBC 驱动的4种类型

TYPE 1: JDBC-ODBC桥驱动程序

适用于快速的原型系统,没有提供JDBC驱动的数据库如Access

TYPE 2: Native-API驱动程序

利用开发商提供的本地库来直接与数据库通信。比Type1性能略好

TYPE 3: JDBC通过网络的纯Java驱动程序

具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的

TYPE 4: 原生协议以及纯Java驱动程序

最高的性能,通过自己的本地协议直接与数据库引擎通信,具备在Internet装配的能力

14.3、JDBC实现以下目标

通过使用SQL语句,程序员可以利用java语言开发访问数据库的应用。

数据库供应商和数据库工具开发商可以提供底层的驱动程序。因此他们有能力优化各自的数据库产品的驱动程序。

14.4、JDBC的工作原理

JDBC API 供程序员调用的类和接口被包装在java.sql包中如:

DriverManager类

Connection接口

Statement接口

ResultSet接口

DriverManager 

作用:管理不同的JDBC驱动

JDBC驱动

作用:负责连接各种不同的数据库

JDBC API类和接口均在Java.sql和javax.sql程序包中提供。

JDBC API中常使用的类和接口是:

DriverManager 类:为数据库加载驱动程序。

驱动程序接口:提供一个数据库驱动程序。所有的JDBC驱动程序类必须执行驱动程序接口。

连接接口: 使你可以建立Java应用程序与数据库之间的连接。

语句接口:使你可以执行SQL语句。

ResultSet 接口:提供从数据库检索的信息。

SQLException 类:提供与数据库互动时发生的异常的有关信息。



 14.5、JDBC接口类和对象

DriverManager类

Class.forName() 显式加载并注册驱动程序类

驱动程序被加载后就出现在DriverManager的驱动程序列表中,并可用于创建连接

Connection对象

建立连接

DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);

JDBC URL

jdbc:< 子协议 >:< 子名称 > 

如:jdbc:mysql://localhost:3306/test

发送SQL语句

Statement

PreparedStatement

Statement对象

创建Statement对象

Statement stmt = conn.createStatement();

使用Statement对象执行语句

ResultSet executeQuery()参数是查询语句(select)

Int executeUpdate()参数是DML或DDL语句(insert, update, delete or DDL)

boolean execute()执行可能返回多种结果的语句(任何sql)

ResultSet getResultSet() 获取当前的结果集

int getUpdateCount() 以更新计数的形式获取当前结果;如果结果为 ResultSet 对象或没有更多结果,则返回 -1。

关闭Statement对象

作为一种良好的编程风格,应在不需要的时候显式关闭他们,stmt.close()

ResultSet对象

ResultSet对象又称结果集

行和光标

初始光标停在第一行之前,rs.next() 会使光标向下移一行列

resultSet中的getXxx()方法提供了对当前行某列值的访问

getXxx(String 列名) 列名不区分大小写

getXxx(int 列编号) 编号从 1 开始

 

14.6、JDBC访问数据库的基本步骤

①注册JDBC驱动程序;

注册驱动程序有三种方式:

JAVA规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动注册到驱动程序管理器中。

方式一:Class.forName(“oracle.jdbc.driver.OracleDriver”);

 

方式二:Driver drv = new oracle.jdbc.driver.OracleDriver();

 DriverManager.registerDriver(drv);

方式三:编译时在虚拟机中加载驱动

javac –Djdbc.drivers = oracle.jdbc.driver.OracleDriver xxx.java

java –D jdbc.drivers=驱动全名 类名

使用系统属性名,加载驱动 -D表示为系统属性赋值

附?: mysql的Driver的全名com.mysql.jdbc.Driver                 

SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver

②建立到DB连接;

conn=DriverManager.getConnection(“jdbc:oracle:thin:@192.168.0.1:1521:test”,  ” User”,” Pasword”);

IP地址及端口号和数据库实例名

用户名密码码

 

Connection连接是通过DriverManager的静态方法getConnection(.....)来得到的,这个方法的实质是把参数传到实际的Driver中的connect()方法中来获得数据库连接的。

Oracle URL的格式:

jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端口号):XXXXXXX(所使用的库名)

MySql URL的写法    例: jdbc:mysql://192.168.0.1:3306/test

 

③获得Statement对象;

stat = conn.createStatement();

 

④通过Statement执行Sql语句;

sta.executeQuery(String sql);返回一个查询结果集。

sta.executeUpdate(String sql);返回值为int型,表示影响记录的条数。

将sql语句通过连接发送到数据库中执行,以实现对数据库的操作。

 

⑤处理结果(有的话);

使用Connection对象获得一个Statement,Statement中的executeQuery(String sql) 方法可以使用select语句查询,并且返回一个结果集 ResultSet通过遍历这个结果集,可以获得select语句的查寻结果,ResultSet的next()方法会操作一个游标从第一条记录的前面开始读取,直到最后一条记录。executeUpdate(String sql) 方法用于执行DDL和DML语句,比如可以update,delete操作。

只有执行select语句才有结果集返回。

 

⑥与数据库断开连接。

关闭数据库连接(释放资源)  调用.close()

rs.close();            sta.close();              con.close();

ResultSet  Statement  Connection是依次依赖的。

注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接时才可以使用的,所以在使用结束之后有可能其它的Statement还需要连接,所以不能现关闭Connection。


 14.7、实例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class JDBCTest {
	
	public static final String DB_DRIVER = "com.mysql.jdbc.Driver";
	public static final String DB_URL = "jdbc:mysql://localhost:3306/test";
	public static final String DB_USERNAME = "root";
	public static final String DB_PASSWORD = "root";
	
	public static void main(String[] args){
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try{
			//1、装载JDBC驱动
			Class.forName(DB_DRIVER);
			//2、获取数据库连接
			conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
			//3、创建数据库语句
			String sql = "seletc * from users";
			stmt = conn.createStatement();
			//执行数据库操作
			rs = stmt.executeQuery(sql);
			//从结果集中获取数据
			while(rs.next()){
				int id = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				System.out.println("id = " + id +" name = " + name +" age="+age);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			//6、释放资源
			if(rs != null){
				try{
					rs.close();
				}catch(SQLException e){
					e.printStackTrace();
				}
			}
			
			if(stmt != null){
				try{
					stmt.close();
				}catch(SQLException e){
					e.printStackTrace();
				}
			}
			
			if(conn != null){
				try{
					conn.close();
				}catch(SQLException e){
					e.printStackTrace();
				}
			}
		}
	}
}

 14.8、JDBC连接几种常见数据库



 
  • 大小: 10.3 KB
  • 大小: 17.7 KB
  • 大小: 17.6 KB
  • 大小: 23.1 KB
  • 大小: 22.1 KB
分享到:
评论

相关推荐

    Linux 平台基于 Qt5 的网速浮窗.zip

    Linux 平台基于 Qt5 的网速浮窗

    手机游戏峡谷沼泽农田关卡地图Ai+EPS+PSD源文件.zip

    游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP

    上市公司-企业资本结构动态调整数据及代码(2001-2022年).txt

    数据存放网盘,txt文件内包含下载链接及提取码,永久有效。 样例数据及详细介绍参见文章:https://blog.csdn.net/li514006030/article/details/138324717

    Git 常用命令手册大全

    Git 是一个开源的分布式版本控制系统,它允许你跟踪代码的更改,并且可以与他人合作开发项目。附件中是一些常用的 Git 命令。 这些命令覆盖了 Git 的基本操作,包括初始化、克隆、提交、分支管理、合并、查看状态和历史、远程仓库操作等。根据你的具体需求,可能还需要学习更多的命令和 Git 的高级用法。 文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流!

    中科大2021秋《机器学习概论》课程资源.zip

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径。 机器学习的发展历程可以追溯到20世纪50年代,当时Arthur Samuel在IBM开发了第一个自我学习程序,一个西洋棋程序,这标志着机器学习的起步。随后,Frank Rosenblatt发明了第一个人工神经网络模型——感知机。在接下来的几十年里,机器学习领域取得了许多重要的进展,包括最近邻算法、决策树、随机森林、深度学习等算法和技术的发展。 机器学习有着广泛的应用场景,如自然语言处理、物体识别和智能驾驶、市场营销和个性化推荐等。通过分析大量的数据,机器学习可以帮助我们更好地理解和解决各种复杂的问题。例如,在自然语言处理领域,机器学习技术可以实现机器翻译、语音识别、文本分类和情感分析等功能;在物体识别和智能驾驶领域,机器学习可以通过训练模型来识别图像和视频中的物体,并实现智能驾驶等功能;在市场营销领域,机器学习可以帮助企业

    游戏道具3D立体blender模型图标素材-3d Game Asset Icon Vol.1.zip

    游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP

    K1213-Q版游戏UI界面.zip

    游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP

    百问网linux桌面GUI,基于LVGL 8.x。.zip

    百问网linux桌面GUI,基于LVGL 8.x。

    HTML5小游戏源码下载网页版游戏JS小游戏-塔防源码.zip

    HTML5小游戏源码下载,JS小游戏源码下载,坦克大战,驴子跳,连连看,俄罗斯方块,圈泡泡,塔防,太空战舰,愤怒的小鸟,植物大战僵尸,水果忍者,扫雷,超级玛丽,打地鼠,坦克大战,麻将等JS小游戏源码下载,游戏开发教程,网页游戏,本地直接打开就可以玩。

    2022年 【30页】外部环境边际改善,AIGC搭建元宇宙内容生态.zip

    2022年 【30页】外部环境边际改善,AIGC搭建元宇宙内容生态.zip

    node-v10.15.3-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.11.1-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Support 客户关系管理 - SAS 支持.pdf

    Support 客户关系管理 - SAS 支持.pdf

    node-v6.12.1-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    机械设计PF-1315反击式破碎机sw14可编辑非常好的设计图纸100%好用.zip

    机械设计PF-1315反击式破碎机sw14可编辑非常好的设计图纸100%好用.zip

    ATMEGA328P+CH340C arduino-nano最小系统开发板AD09设计硬件(原理图+PCB)文件.zip

    ATMEGA328P+CH340C arduino_nano最小系统板ALTIUM设计硬件原理图+PCB文件,硬件采用2层板设计,大小为8x10mm, 包括完整的ALTIUM设计硬件原理图和PCB文件,可以做为你的设计参考。

    源代码-160.es免费资源网程序.zip

    源代码-160.es免费资源网程序.zip

    用Python来抓取一个新闻网站上的文章标题、链接、发布时间和内容

    在这个爬虫开发案例中,我们将使用Python的requests库和BeautifulSoup库来抓取一个新闻网站(如https://news.example.com)上的文章标题、链接、发布时间和内容。 代码解释 导入requests和BeautifulSoup库。 定义get_article_list函数,接收一个URL参数,用于获取文章列表。 使用requests.get()方法发送GET请求,获取网页内容。 使用BeautifulSoup解析网页内容,提取文章标题、链接和发布时间。 将提取到的文章信息存储在一个字典列表中,并返回。 定义get_article_content函数,接收一个URL参数,用于获取文章内容。 使用requests.get()方法发送GET请求,获取网页内容。 使用BeautifulSoup解析网页内容,提取文章内容。 返回提取到的文章内容。 在主函数main中调用get_article_list函数,遍历文章列表并输出标题、链接、发布时间和内容。 注意:请将示例中的https://news.example.com替换为您要抓取的实际新闻网站URL。在

    毕业设计:Python高校社团学生会管理系统(源码 + 数据库 + 说明文档)

    毕业设计:Python高校社团学生会管理系统(源码 + 数据库 + 说明文档) 二、 相关技术介绍 4 (一) SSM架构 4 (二) MYSQL简介 4 (三) Java技术简介 5 (四) Eclipse介绍 5 三、 需求分析 6 (一) 功能需求 6 (二) 非功能需求分析 6 (三) 业务过程分析 6 (四) 系统设计原则 6 四、 系统可行性研究 7 1. 技术可行性 7 2. 经济可行性 7 3. 操作可行性 7 五、 系统总体设计 8 六、 数据库设计 8 (一) E-R图 8 (二) 数据库表实现 9 七、系统实现 10 1. 首页 10 2. 注册 11 3. 登录 11 4. 后台首页界面 12 5. 社团公告页面 13 6. 留言信息页面 13 7. 社团活动页面 14 结论 14

    扫雷游戏UI素材源文件minesweeper.zip

    游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP

Global site tag (gtag.js) - Google Analytics