15.3 JDBC数据库编程2

15.3.1  数据库访问步骤

使用JDBC API连接和访问数据库,一般分为以下5个步骤:

(1) 加载驱动程序

(2) 建立连接对象

(3) 创建语句对象

(4) 获得SQL语句的执行结果

(5) 关闭建立的对象,释放资源

下面将详细描述这些步骤 

15.3.2  加载驱动程序

        要使应用程序能够访问数据库,必须首先加载驱动程序。加载驱动程序一般使用Class类的forName()静态方法,格式如下:

        public static Class<?> forName(String className)

        该方法返回一个Class类的对象。参数className为字符串表示的完整驱动程序类的名称,若找不到驱动程序将抛出ClassNotFoundException异常
        对于不同的数据库,驱动程序的类名不同。下面几行代码分别是加载MySQL数据库、Oracle数据库和PostgreSQL数据库驱动程序

//加载MySQL数据库驱动程序
Class.forName("com.mysql.jdbc.Driver");
//加载Oracle数据库驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
//加载PostgreSQL数据库驱动程序
Class.forName("org.postgresql.Driver");

另一种加载驱动程序的方法是使用DriverManager类的静态方法registerDriver()注册驱动程序,如下所示。

        DriverManager.registerDriver(new org.postgresql.Driver());

其中,org.postgresql.Driver为PostgreSQL的驱动程序类

        注:使用JDBC4.0及以上的版本,可以采用动态加载驱动程序的方法,即不需要使用Class.forName()方法加载驱动程序。只需将包含JDBC驱动程序的JAR文件添加到CLASSPATH中。例如,对MySQL数据库,在mysql-connector-java-5.1.39-bin.jar中META-INF/services/java.sql.Driver文件的内容是org.mysql.jdbc.Driver
        动态加载驱动程序的优点是,不仅少写几行代码,而且不需要将JDBC驱动程序类名硬编码在程序中。如果需要更新驱动程序 ,只需用新的JAR文件替换旧的文件即可。新的类名也不必与旧的类名匹配。

15.3.3  建立连接对象

1.DriverManager类

        DriverManager类是JDBC的管理层,作用于应用程序和驱动程序之间。DriverManager类跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接。

        建立数据库连接的方法是调用DriverManager类的getConnection()静态方法,该方法有下面两种格式:

        puiblic static Conneciton getConnection(String dburl);

        puiblic static Conneciton getConnection(String dburl,String user,String password).

        参数dburl表示JDBC URL,user表示数据库用户名,password表示口令。DriverManager类维护一个注册的Driver类列表。调用该方法,DriverManager类试图从注册的驱动程序中选择一个合适的驱动程序,然后建立与给定数据库的连接。如果不能建立连接将抛出SQLException异常

2.数据库URL

        数据库URL与一般的URL不同,用来标识数据源,这样驱动程序就可以与它建立连接。下面是数据库URL的标准语法,包括由冒号分割的3个部分:

        jdbc:<subprotocol>:<subname>

        其中,jdbc表示协议,数据库URL的协议总是jdbc:subprotocol表示子协议,为驱动程序或数据库连接机制的名称,子协议名通常为数据库厂商名,如mysql,oracle,postgresql等;subname为子名称,表示数据库标识符,该部分内容随数据库驱动程序的不同而不同

String url = "jdbc:mysql://localhost:3306/haozihua?useSSL=false";
Connection conn = DriverManager.getConnection(url, user, password);

        如代码所示, localhost为本机IP地址,也可以更改为127.0.0.1;3306为MySQL数据库服务器使用的端口号;数据库名为haozihua,用户名为root,密码为root.

3.Connection对象

        Connection对象代表与数据库的连接,也就是在加载的驱动程序与数据库之间建立连接。一个应用程序可以与一个数据库建立一个或多个连接,或与多个数据库建立连接
        得到连接对象后,可以调用Connection接口的方法创建SQL语句对象以及在连接对象上完成各种操作,下面是Connection接口的常用方法.

  • public Statement createStatment():创建一个Statement对象,使用该方法执行不带参数的SQL语句。
  • public PreparedStatement prepareStatement(String sql):使用给定的SQL命令创建一个预编译语句对象,使用该方法可执行带参数的SQL语句
  • public void setAutoCommit(boolean autoCommit):设置通过该连接对数据库的更新操作是否自动提交,默认情况为true
  • public boolean getAutoCommit():返回当前连接是否为自动提交模式
  • public void commit():提交对数据库的更新操作,使更新写入数据库。只有当setAutoCommit()为false时,才应该使用该方法。
  • public void rollback():回滚对数据库的更新操作。只有当setAutoCommit()为false时,才应该使用该方法。
  • public void close():关闭该数据库连接。在使用连接后应该关闭,否则连接会保持一段较长的时间,直至超时
  • public void isClosed():返回该连接是否已被关闭

15.3.4  创建语句对象

SQL语句对象有3种:Statement、PreparedStatement和CallableStatement。通过调用Connection接口的相应方法可以得到这3种语句对象,本节只讨论Statement对象
Statement接口对象主要用于执行一般的SQL语句,常用方法如下:

  • public ResultSet executeQuery(String sql):执行SQL查询语句,参数sql为用字符串表示的SQL查询语句,查询结果以ResultSet对象返回
  • public int executeUpdate(String sql):执行SQL更新语句,参数sql用来指定SQL语句更新,该语句可以是INSERT、DELETE、UPDATE语句或无返回的SQL语句,如SQL DDL语句CREATE TABLE。该方法返回值是更新的行数,如果语句没有返回则返回值为0 
  • public boolean execute(String sql):执行可能有多个结果集的SQL语句,sql为任何的SQL语句。如果语句执行的第一个结果为ResultSet对象,该方法返回true,否则返回false
  • public Connection getConnection():返回产生该语句的连接对象
  • public void close():释放Statement对象占用的数据库和JDBC资源

执行SQL语句使用Statement对象的方法。对于查询语句,调用executeQuery(String sql)方法,该方法的返回类型为ResultSet,再通过调用ResultSet的方法可以对查询结果的每行进行处理。

String sql="SELECT * FROM department";
ResultSet rst=stmt.executeQuery(sql);
while(rst.next()){
System.out.println(rst.getString(1)="\t")
}

对于更新语句,如INSERT、UPDATE、DELETE,需使用executeUpdate(String sql)方法。该方法返回值为整数,用来只是被影响行的数目 

15.3.5  ResultSet对象

        ResultSet对象表示SQL查询语句得到的记录集合,称为结果集。结果集一般是一个记录表,其中包含列标题和多个记录行,一个Statement对象一个时刻只能打开一个ResultSet对象。
        每个结果集对象都有一个游标。所谓游标(cursor)是结果集的一个标志或指针。对新产生的ResultSet对象,游标指向第一行的前面,可以调用ResultSet对象的方法,对查询结果处理。1.ResultSet的常用方法
ResultSet接口提供了对结果集操作的方法,下面是一个常用的方法。
public boolean next() throws SQLException
        该方法将游标从当前位置向下移动一行。第一次调用next()方法将使第一行成为当前行,以后调用游标依次向后移动。如果方法返回true,说明新行是有效的行;若返回false,说明已无记录。
        可以使用getXxx()方法检索当前行的列值由于结果集列的数据类型不同,所以应该使用不同的getXxx()方法获得列值
        

15.4.4  关闭有关对象

        数据库访问结束后,应当关闭有关对象。可以使用每种对象的close()方法关闭对象,也可以使用Java7的try-with-reso urces结构实现资源的自动关闭。
        

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

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

相关文章

计算机网络408考研 2022

https://zhuanlan.zhihu.com/p/695446866 1 1 1SDN代表软件定义网络。它是一种网络架构&#xff0c;旨在通过将网络控制平面从数据转发平面分离出来&#xff0c;从而实现网络的灵活性和可编程性。在SDN中&#xff0c;网络管理员可以通过集中式控制器 来动态管理网络流量&…

2024 年 8 月区块链游戏研报:用户增长与加密货币市场波动并存

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics Games Research 页面 8 月&#xff0c;加密货币市场面临严峻挑战&#xff0c;比特币和以太币的价值都大幅下跌。比特币下跌了 9.3%&#xff0c;而以太坊的跌幅更为严重&#x…

代码随想录27期|Python|Day51|​动态规划|​115.不同的子序列|​583. 两个字符串的删除操作​|

115. 不同的子序列 本题是在原来匹配子序列的基础上增加了统计所匹配的子序列个数&#xff0c;也就是dp数组的定义和更新公式和原来的有所区别。 1、dp数组的定义 dp[i][j]表示以i-1和j-1为末尾的字符串中&#xff0c;给定字符串s包含目标字符串t的个数。注意这里不是长度。…

CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

多个微信是怎么进行管理的?

随着微信逐渐成为企业商务沟通的重要平台&#xff0c;对于业务咨询量较大的行业&#xff08;例如教育培训、旅游、美容以及医疗等&#xff09;而言&#xff0c;在利用微信进行营销活动和客户服务的过程中&#xff0c;往往会遭遇多微信管理的困境。 在此情形下&#xff0c;选用工…

企业出海网络方案,助力TikTok直播

在全球贸易蓬勃发展的今天&#xff0c;出海电商已成为引领增长的新动力&#xff0c;政府对此的支持力度也在持续加大&#xff0c;为企业带来了前所未有的出海机遇。越来越多的企业开始进军TikTok直播等业务&#xff0c;而在这一过程中&#xff0c;一个适应全球化运营的出海网络…

RS485网关在工业自动化控制系统中的应用-天拓四方

随着工业自动化控制系统的不断发展&#xff0c;各种现场总线技术在工业领域得到了广泛应用。其中&#xff0c;RS485作为一种半双工的通信方式&#xff0c;因其通信距离远、抗干扰能力强、传输速率高等优点&#xff0c;在工业现场得到了广泛应用。而RS485网关作为连接不同网络之…

“人大金仓”正式更名为“电科金仓”; TDSQL-C支持回收站/并行DDL等功能; BigQuery支持直接查询AlloyDB

重要更新 1. “人大金仓”正式更名为“电科金仓”&#xff0c;完整名称“中电科金仓&#xff08;北京&#xff09;科技股份有限公司”&#xff0c;突出金仓是中国电子科技集团有限公司在基础软件领域产品( [1] ) 。据悉人大金仓在上半年营收入为9056万元&#xff0c;净利润约21…

并发编程:Future类

一、Future 类有什么用&#xff1f; Future 类是异步思想的典型运用&#xff0c;主要用在一些需要执行耗时任务的场景&#xff0c;避免程序一直原地等待耗时任务执行完成&#xff0c;执行效率太低。具体来说是这样的&#xff1a;当我们执行某一耗时的任务时&#xff0c;可以将…

使用Python自动抓取亚马逊网站商品信息

全量数据抓取不现实&#xff0c;但可以自动化、小批量采集亚马逊数据&#xff0c;现在可用的工具也非常多&#xff0c;包括Python以及一些专门的爬虫软件&#xff0c;我用过几个比较好入手的&#xff0c;像web scraper、八爪鱼、亮数据。 比如亮数据爬虫&#xff0c;它提供数据…

Dubbo精要

1、为什么需要 Dubbo&#xff1f; 分布式系统中的服务调用和协调问题&#xff1a;在分布式系统中&#xff0c;服务之间的相互依赖会导致复杂的通信和协调问题。Dubbo提供了高效的服务调用和自动注册、发现等功能&#xff0c;使得构建分布式应用程序更加容易。服务治理和服务调…

Ubuntu下使用Cron定时任务

Ubuntu下使用Cron定时任务 文章目录 Ubuntu下使用Cron定时任务概述Cron 工作原理crontab的基本指令使用Cron 定时任务语法用户的crontab 文件系统的crontab 文件cron 任务设置环境变量1. 直接在 crontab 中声明变量2. 将变量声明为命令的一部分3. 从文件加载变量使用环境变量控…

06后夺得都江堰杯2024国际超模大赛四川总决赛冠军

9月8日众人期盼已久的都江堰杯2024国际超模大赛四川总决赛在三遗之城都江堰落下帷幕。国际超模大赛已经举办第12个年头&#xff0c;每年为时尚界、模特界输送无数的优秀时尚模特人才&#xff0c;让世界超模中出现更多的中国面孔。大赛在全球已经布局多个国家及地区&#xff0c;…

MySQL高可用配置及故障切换

目录 引言 一、MHA简介 1.1 什么是MHA&#xff08;MasterHigh Availability&#xff09; 1.2 MHA的组成 1.3 MHA的特点 1.4 MHA工作原理 二、搭建MySQL MHA 2.1 实验思路 2.2 实验环境 1、关闭防火墙和安全增强系统 2、修改三台服务器节点的主机名 2.3 实验搭建 1、…

【springsecurity】使用PasswordEncoder加密用户密码

目录 1. 导入依赖2. 配置 PasswordEncoder3. 使用 PasswordEncoder 加密用户密码4. 使用 PasswordEncoder 验证用户密码 1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifac…

利用Tiktok广告资料库提升广告效果

Tiktok广告资料库是一个展示Tiktok广告素材的平台&#xff0c;包含了上千万的热门广告案例&#xff0c;利用Tiktok广告资料库&#xff0c;你可以查看竞争对手广告情况&#xff0c;分析广告市场动态&#xff0c;获取最受欢迎的广告形式&#xff0c;激发创作素材的灵感&#xff0…

异常重试工具

目录 RetryUtils方法main方法测试拓展-函数接口 RetryUtils方法 该Java函数retryOnException用于在指定重试次数内执行某个操作&#xff0c;并在遇到异常时重试。功能如下&#xff1a; 对传入的操作&#xff08;retryCallable&#xff09;进行尝试执行。如果执行成功且结果符…

代码管理工具——git及阿里云云效的使用(包含git的使用及云效自动化部署)

1、做项目开发时都会用到代码管理工具,像是我之前使用过gitHub,Visual Studio等一些代码管理工具&#xff0c;这里介绍的是阿里云云效的使用。 2、首先登录阿里云云效&#xff0c;登录进去之后会看到公司给你开放的一个仓库。 3、进入仓库&#xff0c;点击克隆/下载&#xff0…

docker部署rabbitMQ 单机版

获取rabbit镜像&#xff1a;我们选择带有“mangement”的版本&#xff08;包含web管理页面&#xff09;&#xff1b; docker pull rabbitmq:management 创建并运行容器&#xff1a; docker run -d --name rabbitmq -p 5677:5672 -p 15677:15672 rabbitmq:management --name:…

[数据集][目标检测]汽油检泄漏检测数据集VOC+YOLO格式237张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;237 标注数量(xml文件个数)&#xff1a;237 标注数量(txt文件个数)&#xff1a;237 标注类别…