热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java连接mysql属于java_什么是JDBC?Java数据库连接性简介

JDBC(Java数据库连接性)是JavaAPI,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK1.

JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批组件之一。

本文提供了JDBC的概述,然后是使用JDBC API将Java客户端与轻量级关系数据库SQLite连接的动手入门。

3472b66e77017235642b0c5fc4feb9bd.png

JDBC如何工作

JDBC作为基于C的ODBC(开放数据库连接)API的替代产品而开发,提供了编程级别的接口,该接口处理Java应用程序与数据库或RDBMS通信的机制。JDBC接口包括两层:

1. JDBC API支持Java应用程序与JDBC管理器之间的通信。

2. JDBC驱动程序支持JDBC管理器和数据库驱动程序之间的通信。

JDBC是您的应用程序代码与之交互的通用API。下面是您正在使用的数据库的JDBC兼容驱动程序。

图1是Java持久层中JDBC的体系结构概述。

使用JDBC连接数据库

Java生态系统中编程的幸运事实之一是,您可能会为所选的任何数据库找到稳定的JDBC数据库连接器。在本教程中,我们将使用SQLite来了解JDBC,主要是因为它非常易于使用。

使用JDBC连接数据库的步骤如下:

1. 安装或找到您要访问的数据库。

2. 包括JDBC库。

3. 确保所需的JDBC驱动程序在类路径中。

4. 使用JDBC库获得与数据库的连接。

5. 使用该连接来发出SQL命令。

6. 完成后关闭连接。

我们将一起完成这些步骤。

查找JDBC驱动程序

要查找您要使用的数据库的驱动程序,只需对数据库和JDBC进行网络搜索。例如,输入“ mysql jdbc driver”将打开MySQL驱动程序。我挑战您寻找没有JDBC驱动程序的Java兼容数据库!

步骤1.下载并安装SQLite

SQLite是一个非常紧凑的数据库。它不是供生产使用的,但是快速尝试问题的绝佳选择。SQLite使用文件作为其功能数据库,而无需安装任何服务或守护程序。

要开始进行此演示,请继续下载SQLite示例数据库。解压缩.db文件并将其保存在您不会忘记的地方。

该文件包含一个基于功能文件的数据库以及我们可以使用的示例架构和数据。

SQL和JDBC

在过去的十年中,NoSQL变得越来越流行,但是关系数据库仍然是使用中最常见的数据存储类型。一个关系型数据库是由列和行的表的结构化存储库。SQL(结构化查询语言)是数据架构师用于在关系数据库中创建,读取,更新和删除新记录之类的语言。JDBC是从Java到SQL 的适配器层:它为Java开发人员提供了一个公共接口,用于连接数据库,发出查询和命令以及管理响应。

步骤2.将JDBC导入Java应用程序

我们可以在IDE中进行编码,但是直接在文本编辑器中进行编码将更好地展示JDBC的简单性。首先,您需要为您的操作系统安装兼容的JDK。

假设您已安装Java平台开发人员工具,我们可以从创建一个简单的Java程序开始。在您的文本编辑器中,粘贴清单1中所示的代码。调用此文件WhatIsJdbc.java。

清单1.一个简单的Java程序

classWhatIsJdbc{

publicstaticvoidmain(String args[]){

System.out.println("Hello JavaWorld");

}}

现在,通过输入以下命令来编译代码:javac WhatIsJdbc.java。编译将输出WhatIsJdbc.class文件。使用以下命令从命令行执行此文件:java WhatIsJdbc。

(有关在命令行上与JDK交互的更多信息,请参见“什么是JDK?Java开发者工具包简介”。)

一旦有了基本的Java程序,就可以包括JDBC库。将清单2中的代码粘贴到简单Java程序的开头。

清单2. JDBC导入

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

这些导入中的每一个都提供对类的访问,该类促进了标准Java数据库连接:

· Connection 表示与数据库的连接。

· DriverManager获取与数据库的连接。(另一个选项是DataSource,用于连接池。)

· SQLException 处理Java应用程序和数据库之间的SQL错误。

· ResultSet并对Statement数据结果集和SQL语句建模。

我们将很快看到其中的每一个。

步骤3.将JDBC驱动程序添加到您的类路径中

接下来,您将SQLite驱动程序添加到您的类路径中。一个JDBC驱动程序是一个类,实现JDBC API为特定的数据库。

从GitHub 下载SQLite驱动程序。确保获取最新.jar文件并将其存储在您会记得的地方。

下次执行Java程序时,将.jar通过类路径将该文件拉入。有几种设置类路径的方法。清单3显示了如何使用命令行开关来做到这一点。

清单3.在Java类路径上执行SQLite驱动程序

java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar:. WhatIsJdbc

注意,我们将类路径设置为指向驱动程序和本地目录。这样,Java仍会找到我们的类文件。

步骤4.获得数据库连接

现在,类路径可以访问驱动程序。现在,更改您的简单Java应用程序文件,使其类似于清单4中的程序。

清单4.使用JDBC Connection类连接到SQLite

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

classWhatIsJdbc{

publicstaticvoidmain(String[] args) {

Connectionconn = null;

try{

Stringurl = "jdbc:sqlite:path-to-db/chinook/chinook.db";

conn = DriverManager.getConnection(url);

System.out.println("Got it!");

} catch (SQLException e) {

thrownewError("Problem", e);

} finally {

try{

if(conn != null) {

conn.close();

}

} catch (SQLException ex) {

System.out.println(ex.getMessage());

}

}

}}

编译并执行此代码。假设一切顺利,您将得到一个肯定的消息。

找不到合适的驱动程序?

如果收到类似“”的错误,No suitable driver found for jdbc:sqlite则需要重新访问类路径并确保它指向您下载的驱动程序。驱动程序连接失败是使用JDBC的初学者最常见的绊脚石。不要流汗。修复它。

现在,我们可以使用一些SQL命令了。

步骤5.查询数据库

有了实时连接对象,我们可以做一些有用的事情,例如查询数据库。清单5显示了如何使用JDBC Connection和Statement对象查询SQLite 。

清单5.使用JDBC查询数据库

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

classWhatIsJdbc{

publicstaticvoidmain(String[] args) {

Connectionconn = null;

try{

Stringurl = "jdbc:sqlite:path-to-db-file/chinook/chinook.db";

conn = DriverManager.getConnection(url);

Statementstmt = null;

Stringquery = "select * from albums";

try{

stmt = conn.createStatement();

ResultSetrs = stmt.executeQuery(query);

while(rs.next()) {

Stringname = rs.getString("title");

System.out.println(name);

}

} catch (SQLException e ) {

thrownewError("Problem", e);

} finally {

if(stmt != null) { stmt.close(); }

}

} catch (SQLException e) {

thrownewError("Problem", e);

} finally {

try{

if(conn != null) {

conn.close();

}

} catch (SQLException ex) {

System.out.println(ex.getMessage());

}

}

}}

在清单5中,我们使用Connection对象获得一个Statement对象:conn.createStatement()。然后,我们使用此对象执行SQL查询:stmt.executeQuery(query)。

该executeQuery命令返回一个ResultSet对象,然后我们用它来对进行数据迭代while (rs.next())。在此示例中,您应该看到我们查询的专辑标题作为输出。

请注意,我们还通过调用来关闭连接conn.close()。

与JDBC的网络连接

清单5中的数据库连接字符串用于本地连接:jdbc:sqlite:path-to-db-file/chinook/chinook.db。要通过网络访问数据库,连接字符串将需要包括网络URL和(通常)用于访问数据库的凭据。

使用JDBC做更多的事情

到目前为止,我们已经介绍了使用JDBC连接数据库和发出SQL命令的基础知识。虽然StatementsS和ResultSetS代表常见的场景很好地工作,你可能需要用更大或更复杂的应用程序的附加选项。幸运的是,JDBC库不断发展以满足大多数数据库访问需求。

准备声明

一种提高代码灵活性的简单方法是用替换Statement类PreparedStatement,如清单6所示。

清单6.使用JDBC PreparedStatements

StringprepState = "insert into albums values (?, ?);";

PreparedStatementprepState =

connection.prepareStatement(sql);

prepState.setString(1, "Uprising");

prepState.setString(2, "Bob Marley and the Wailers ");

introwsAffected = preparedStatement.executeUpdate();

PreparedStatement用Statement问号(?)替换的硬编码值。使用PreparedStatements可优化代码的重用性:a PreparedStatement仅被编译一次,然后可以与各种参数一起重用。随着代码库的增长,您只需在语句中插入新值,而不用修改字符串对象本身。

批量更新

每当应用程序要发布多个更新时,分批执行它们可以极大地提高性能。批处理的实质是获取多个更新并将它们收集在一起,然后一次发布所有更新。清单7使用JDBC的批处理方法来执行几个PreparedStatements 的批处理更新。

清单7.使用PreparedStatement进行批处理

prepState.setString(1, "Uprising");

prepState.setString(2, "Bob Marley and the Wailers");

preparedStatement.addBatch();

prepState.setString(1, "Wildflowers");

prepState.setString(2, "Tom Petty and the Heartbreakers");

preparedStatement.addBatch();

int[] rowsAffected = preparedStatement.executeBatch();

JDBC事务

关系数据库中的事务允许将一组更新包装在完全成功或失败的交互中。通过JDBC使用事务的基础是告诉系统关闭自动提交,然后在完成后手动告诉系统进行提交。默认情况下,自动提交功能为on,这意味着无论何时运行executeUpdate或executeInsert,命令都会被提交。

清单8显示了JDBC事务的一小部分。

清单8. JDBC事务

connection.setAutoCommit(false);// Use executeUpdate multiple times

connection.commit();

当connection.commit()遇到,所有包裹在里面的更新将尝试,如果有任何失败,他们都将被回滚。

JDBC 4.3中还有许多值得探索的功能,包括CallableStatement用于存储过程,使用DataSource对象以提高应用程序性能(尤其是通过连接池),以及将JDBC ResultSet转换为Java Stream。

特定于数据库的功能

尽管每个符合JDBC的数据库都提供了相同的核心功能,以便通过SQL与数据库连接和交互,但是某些数据库的作用要比其他数据库大。例如,Oracle DB提供了结果缓存,这不是JDBC规范所必需的。这是一个例子:

conn.prepareStatement ("select /*&#43; result_cache */ * from employees where employee_id <: 1");

结论

JDBC是Java最古老的API之一&#xff0c;它为Java应用程序开发的长期需求之一提供了易于使用的解决方案。仅了解本文演示的几个JDBC调用&#xff0c;即可开始使用JDBC连接几乎所有的数据库。完成这些命令后&#xff0c;就可以开始探索JDBC中内置的一些更复杂的选项。

最后&#xff0c;开发这么多年我也总结了一套学习Java的资料与面试题&#xff0c;如果你在技术上面想提升自己的话&#xff0c;可以关注我&#xff0c;私信发送领取资料或者在评论区留下自己的联系方式&#xff0c;有时间记得帮我点下转发让跟多的人看到哦。

5d9da29036fab64cde7e8a0a26269e89.png

8d202125a51d32b27a87c2713c80df86.png



推荐阅读
  • Qt提供了QtSql模块来提供平台独立的基于SQL的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外, ... [详细]
  • MFC程序连接MySQL成功实现查询功能,但无法实现修改操作——详解查询语句在MySQL中的使用过程
    selectxxx,xxx,xxxfromxxxwherexxxxxx,xxxxxx程序的日常开发中,我们经常会写到各种各样的简单的,复杂的查询sql语 ... [详细]
  • 语法:CREATE[索引类型]INDEX索引名称ON表名(列名)WITHFILLFACTOR填充因子值0~100GOUSE库名GOIFEXISTS(SELECT*FR ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • MySQL笔记_MySQL笔记1|数据库17问17答
    本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 【转】腾讯分析系统架构解析
    TA(TencentAnalytics,腾讯分析)是一款面向第三方站长的免费网站分析系统,在数据稳定性、及时性方面广受站长好评,其秒级的实时数据更新频率也获得业界的认可。本文将从实 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 【回顾】聚焦DTCC | 巨杉数据库与您相约DTCC 数据库技术大会
    2018年5月10-12日,第九届中国数据库技术大会(DTCC2018)将以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余 ... [详细]
  • mysql主机地址是什么????下面的该怎么添??mysql主机地址是什么????下面的该怎么添??答:SQLyogEnterprise中,mysql的主机地址如果你是本机,就填写 ... [详细]
author-avatar
良良8003
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有