JSP:JDBC
JDBC(Java Data Base Connectivity的缩写)是Java程序操作数据库的API,也是Java程序与数据库相交互的一门技术。
JDBC是Java操作数据库的规范,由一组用Java语言编写的类和接口组成,它对数据库的操作提供基本方法,但对于数据库的细节操作由数据库厂商进行实现,使用JDBC操作数据库,需要数据库厂商提供数据库的驱动程序。
关于Java程序与数据库相交互的示意图如下图所示。
JDBC(Java Database Connectivity) Java数据库连接,是一组用来按照统一方式访问数据库的API。它向程序员提供了独立于数据库的统一接口,可以使开发人员不必考虑所用的特定数据库便可编写应用程序,实现了Java与数据库的互连。
由一组用Java语言编写的类和接口组成。它能够:与数据库建立连接、发送SQL语句、处理结果JDBC的主要接口
java.sql.Driver:任何驱动程序类都应该实现这个接口。读取数据库驱动器的信息、提供connect方法用于建立访问数据库所用的Connection对象
java.sql.DriverManager:用于管理JDBC驱动程序一个接口(使用此接口能够获得与相应数据库的连接)
java.sql.Connection:表示驱动程序与数据库之间的连接。(使用此连接可以创建一个Statement对象)
java.sql.Statement:能对数据库执行SQL语句,并得到返回的结果
java.sql.ResultSet:表示从数据库服务器返回的结果集。
ResultSet 有如下几个方法
1. boolean next()
用于将 ResultSet定位到下一行。
ResultSet最初是定位在第0行上的,此时应该先调用 next()方法将其定位到第1行上,然后才可输出。当 ResultSet已经到了最后一行时,再调用next()方法,则返回 false。
2. getXXX()
当 ResultSet已经定位在某一行上时,使用 getXxx ()方法得到这一行上单个字段的值。针对不同的字段类型,调用不同的getXxx ()方法(getString(col), getDate(col), getInt(col),…)
例:如果表中的第一个字段,字段名为“name”,是文本型的; 则可以使用getString
(1)或 getString(“name”)来得到它的值。
如果表中的第三个字段,字段名为“score”,是数值型的; 则可以使用getFloat(3)或 getFloat(“score”)来得到它的值。显示结果集中所有记录的前两列:
while(rs.next())
{
name =rs.getString(1);
phone =rs.getString(2);
System.out.println(name+","+phone);
}
JDBC连接数据库的过程
在了解了JDBC与数据库后,下面向大家介绍使用JDBC操作数据的开发流程,其关键步骤如下:(1)注册数据库驱动 :加载数据库驱动,注册到驱动管理器Class.forName(“com.mysql.jdbc.Driver”);
(2)构建数据库连接URL “JDBC协议+IP地址或域名+端口+数据库名称”
MySQL连接URL的字符串为:“jdbc:mysql://localhost:3306/test”
(3)获取Connection对象
注册了数据库驱动及构建数据库URL后,通过驱动管理器获取数据库的连接Connection,Connection对象是JDBC封装的数据库连接对象,创建此对象后,才可以对数据库进行相关操作:DriverManager.getConnection(url, username, password);
使用JDBC驱动程序访问数据库
获取相应数据库的jdbc驱动程序,并将它们保存在指定的位置, 然后重新启动tomcat服务;
连接的具体步骤:以打电话通知同学为你带书为例…编写程序的具体步骤编写程序
加载驱动程序;---打开手机、找到电话簿:亲人、同学、朋友
定义所要连接数据库的地址;---定位到同学
建立与数据库的连接;--拨号给他打电话
建立语句对象;--接通后,你(对象)可以跟他(数据库)交流了
声明并执行SQL语句;--任务:帮你带书
处理返回的结果; --给带或是不能带
关闭对象;--挂电话
首先应该导入java.sql包。语句为: <%@ page import="java.sql.*" %>
利用Class.forName()方法加载某一个数据库的驱动程序。
语法:Class.forName(“JDBC驱动程序类”);
方法:例1:使用JDBC/ODBC桥驱动程序:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
例2:使用SQLServer的驱动程序:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
经过以上其中之一语句的声明后,驱动程序就会自动地加载。
注意:如果classpath路径中没有找到所需的驱动程序则会抛出 ClassNotFoundException异常。
通过此步骤,定义要连接的数据库资源
String ODBCURL= " jdbc:odbc:dbName";
String sqlserverURL= " jdbc:microsoft:sqlserver://host:1433;DatabaseName=dbName ";
String mysqlURL= "jdbc:mysql://host:port/dbName ";
String oracleURL= "jdbc:oracle:thin:@host:port:dbName ";
不同数据库连接的地址不同,这点需要特别注意
URL由3部分组成,各个部分用冒号间隔,格式如下:jdbc:<子协议>:<子名称>
JDBC URL的3部分可分解如下:jdbc:JDBC中的协议就是jdbc。
<子协议>:数据库驱动程序名或数据库连接机制的名称。子协议的典型示例为oracle,它用于连接oracle数据库。
<子名称>:一种标记数据库的方法。子名称根据子协议的不同而不同,使用子名称的目的是为定位数据库
例如 jdbc:oracle:thin:@[ip]:[port]:[sid]
子协议现在是 oracle子名称现在由四部分构成:包括驱动程序类型thin、数据库服务器的IP地址、提供服务的端口号、数据库的名字
语法:Connection con=DriverManager.getConnection(url,”登录数据库用户名”,”登录密码”);
例:以SQLServer连接数据库book为例,用户名为sa,密码为123
Class.forName(" com.microsoft.jdbc.sqlserver.SQLServerDriver ");
String connStr=" jdbc:microsoft:sqlserver://host:1433;DatabaseName=book";
Connection conn = DriverManager.getConnection(connStr, " sa", " 123");
利用 Connection接口à createStatement() 方法创建语句对象。
例:Statement stmt=conn.createStatement();
语句对象用于执行SQL语句。该对象负责将SQL语句传递给数据库管理系统执行;声明SQL语句,并将该语句通过Statement对象提交给服务器进行执行。
String sql= " SELECT * FROM book ";//上面的语句用于从book表中查询所有记录。
ResultSet resultSet=stmt.executeQuery(sql);//该语句将sql命令提交给数据库服务器进行执行,并将执行结果存储在ResultSet对象中进行执行。
Statement接口主要有如下三个方法:
1. ResultSet executeQuery(String sql)以sql语句为参数,执行sql查询语句;
返回ResultSet结果集(一个二维表)
例如:
Statement stmt=con.createStatement();
Stringsql= " SELECT * FROM book ";
ResultSet rs=stmt.executeQuery(sql);
2. int executeUpdate(String sql)
以sql语句为参数,执行sql更新语句及DDL语句,如添加、删除或修改操作,返回被受影响记录的条数。例如:
Statement stmt=con.createStatement();
String sql= " delete FROM book where bookid= " + " ‘12335’ ";
int i=stmt.executeUpdate(sql);
System.out.println(i);
3. boolean execute(String sql)
用于执行实现不知道类型的SQL语句,既可以执行查询语句,也可以执行更新语句。
常用于动态的处理未知的SQL语句,事先无法知道该SQL语句的具体类型及执行的返回值。
执行参数部分的SQL语句:
当SQL语句的执行结果是一个ResultSet结果集时,本方法返回true;并可以通过StatementàgetResultSet()方法得到返回的结果集
当SQL语句执行后没有返回的结果集时,该方法返回false
Statement对象负责将SQL语句传递给数据库管理系统执行,返回的是一个ResultSet的对象。 ResultSet对象,称为结果集,是符合条件的所有行的集合。
可以通过(first(), last(), previous(), next(), absolute(int), …) 方法浏览可滚动结果集中的内容rs.close();//关闭结果集
stmt.close();//关闭语句对象
con.close();//关闭连接
将打开的资源关闭。注意:资源关闭的顺序和打开的顺序恰恰相反。
异常处理 数据库访问中可能会发生异常(如无法连接),需要做异常处理
编写Servlet时,需要将访问数据库代码放在try-catch结构中,
try { …}catch(SQLExceptionex){ …}
在编写JSP页面时,数据库操作可以不写try-catch, 服务器将JSP编译成Servlet时会自动加上try-catch
例7.2 通过JDBC连接MySQL数据库
(1)创建名称为10.1的动态Web项目,将MySQL数据库的驱动包添加至项目的构建路径,构建开发环境
(2) 创建程序中的主页index.jsp,在该页面中加载数据库驱动并创建数据库连接
应用程序为了能和数据库交互信息,必须首先和数据库建立连接。目前在开发中常用的连接数据库的方式是加载JDBC-数据库驱动程序。
用Java语言编写的数据库驱动程序称作JDBC-数据库驱动程序。JDBC可以调用本地的JDBC-数据库驱动程序和相应的数据库建立连接,如图所示。
使用JDBC-数据库驱动程序方式和数据库建立连接需要经过2个步骤
①加载JDBC-数据库驱动程序
② 和指定的数据库建立连接。
使用JDBC-数据库驱动程序访问数据库时,必须要保证连接数据库的应用程序所驻留的计算机上安装有相应JDBC-数据库驱动程序,比如,Tomcat服务器上的某个Web应用程序想访问MySQL数据库管理系统所管理的数据库,那么Tomcat服务器所驻留的计算机上必须要安装MySQL提供的JDBC-数据库驱动程序。
登录MySQL的官方网站www.mysql.com下载JDBC-数据库驱动程序(JDBC Driver for MySQL)。本教材下载的是mysql-connector-java-5.1.28.zip。
解压后的mysql-connector-java-5.1.28-bin.jar复制到Tomcat服务器所使用的JDK的扩展目录中。应用程序加载MySQL的JDBC-数据库驱动程序代码如下:
try{
Class.forName("com.mysql.jdbc.Driver");
} catch(Exception e){
}
Java.sql包中的DriverManager类有两个用于建立连接的类方法:
Connection getConnection(java.lang.String, java.lang.String, java.lang.String)
Connection getConnection(java.lang.String)
数据库服务器占用的端口是3306,假设MySQL数据库服务器所驻留的计算机的IP地址是192.168.100.1。应用程序要和warehouse建立连接,用户的id和密码分别是root、99,
那么使用Connection getConnection(java.lang.String, java.lang.String, java.lang.String)
方法建立连接的代码如下:
try{ String uri = "jdbc:mysql:// 192.168.100.1:3306/warehouse"
String user ="root";
String password ="99";
con = DriverManager.getConnection(uri,user,password);
}catch(SQLException e){
System.out.println(e);
}
使用Connection getConnection(java.lang.String) 方法建立连接的代码如下:
try{ String uri =" jdbc:mysql:// 192.168.100.1:3306/warehouse?user=root&password=99";
con = DriverManager.getConnection(uri);
}catch(SQLException e){
System.out.println(e);
}
在某些Web程序中需要避免操作数据库出现中文乱码,那么需要使用
Connection getConnection(java.lang.String) 方法建立连接,连接中的代码是(假设用户是root,其密码是99):
String uri = "jdbc:mysql://127.0.0.1/warehouse?"+"user=root&password=&characterEncoding=gb2312";
con = DriverManager.getConnection(uri);
应用程序一旦和某个数据库建立连接,就可以通过SQL语句和该数据库中的表交互信息,比如查询、修改、更新表中的记录
JDBC在Java Web中的应用
1、开发模式
在Java Web开发使用JDBC,应遵循MVC的设计思想,从而使用Web程序拥有一定的健壮性、可扩展性。JDBC应用于Java Web开发中,处于MVC之中的模型层位置,如下图所示。
2、分页查询
分页查询是Java Web开发之中十分常用的技术。在数据库量非常大的情况下,不适合将所有数据显示到一个页面之中,既给查看带来有便,又占用了程序及数据库的资源,此时就需要对数据进行分页查询。
通过JDBC实现分页查询的方法有很多种,而且不同的数据库机制也提供了不同的分页方式,两种非常典型的分页方法。
1、通过ResultSet的光标实现分页
2、通过数据库机制进行分页
连接MySQL数据库和连接Oracle数据库的方法非常类似。只是有两个地方需要注意一下
1. 需要把MySQL的驱动程序mysql-connector-java-5.0.4-bin.jar部署到“/WEB-INF/lib/”下。(MySQL驱动程序可以从其官方网站www.mysql.com上下载)
2). 注册驱动程序和获取连接的语句变为:
Class.forName("com.mysql.jdbc.Driver");或者Class.forName("org.gjt.mm.mysql.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://[ip]:[port]/[sid]","Login","password");
例:
<%@page contentType="text/html; charset=GBK" %>
<%@page import="java.sql.*" %>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/book","root",“123");
Statement stmt = con.createStatement();
stmt.executeUpdate("create table table1(id int, name varchar(30))");
stmt.executeUpdate("insert into table1 values(10, 'java')");
stmt.executeUpdate("insert into table1 values(20, 'JSP')");
out.print("table1 has been created!");
stmt.close(); con.close();
%>
相关文章:
JSP:JDBC
JDBC(Java Data Base Connectivity的缩写)是Java程序操作数据库的API,也是Java程序与数据库相交互的一门技术。 JDBC是Java操作数据库的规范,由一组用Java语言编写的类和接口组成,它对数据库的操作提供基本方法&#…...
能否在一台电脑上安全地登录多个Facebook账号?
Facebook是一个流量大、用户多的平台,许多人可能需要在一台设备上管理多个Facebook账号,无论是出于个人或职业需求,都能带来极大地便利。然而,保持每个账号的安全性和隐私性却是一个挑战。本文将介绍如何在一台电脑上安全地登录多…...
Banana Pi [BPi-R3-Mini] 回顾和主线 ImmortalWrt 固件支持
BananaPi BPi-R3 Mini 采用 MediaTek 830(4 个 A53,最高 2.0 GHz),具有 2 个 2.5 GbE、AX4200 2.4G/5G 无线和 USB 2.0 端口。它还具有两个 M.2 连接器,可用于 NVMe SSD 和 5G 模块(板上包含 Nano SIM 插槽…...
2001-2022年上市公-供应链话语权测算数据(原始数据+处理代码Stata do文档+结果)
2001-2022年上市公-供应链话语权测算数据(原始数据处理代码Stata do文档结果) 1、时间:2001-2022年 2、指标:企业代码、股票代码、年份、股票简称、上市公司前五大供应商的采购额之和占企业当年总采购额的比例、上市公司前五大客…...
如何通过ShardingJDBC进行读写分离
背景信息: 面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库。其中主库负责处理事务性的增删改操作,从库负责处理查询操作&#…...
【uniapp】部分图标点击事件无反应
比如:点击这个图标在h5都正常,在小程序上无反应 css:也设置z-index,padding 页面上也试过click.native.stop.prevent"changePassword()" 时而可以时而不行, 最后发现是手机里输入键盘的原因,输…...
前端vue导出PPT,使用pptxgen.js
前言 公司新需求需要导出ppt给业务用,查阅资料后发现也挺简单的,记录一下。 如有不懂的可以留言!!! 1.安装包 npm install pptxgenjs --save2.引入包 在需要使用的文件中引入 import Pptxgenfrom "pptxgenjs&…...
JSP过滤器和监听器
什么是过滤器 Servlet过滤器与Servlet十分相似,但它具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要。 对于程序开发人员而言,过滤器实质就是在Web应用服务…...
pcl+vtk(十二)使用vtkPolyData创建点、线、面(不规则面)、三角带
一、前言 vtkPlaneSource创建平面,只可以创建平行四边形的平面,根据一个起点和两个终点创建法向量创建平面。但是当有创建多个点围成不规则平面的需求时,该怎么创建显示呢? 在网上查了资料,可以使用vtkPolyData拓扑结…...
51单片机的智能浇花系统【含proteus仿真+程序+报告+原理图】
1、主要功能 该系统由AT89C51单片机LCD1602显示模块DHT11温湿度模块DS1302时间模块继电器驱动水泵模块光敏传感器等模块构成。适用于智能浇花、自动浇花、智能盆栽等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、土壤温湿度、光照强度等信息 2、DHT11采集温湿度信…...
为什么 MQTT 对于构建联网汽车至关重要
汽车行业正在接受构建联网汽车的想法。他们看到了利用车辆遥测数据创造新收入机会并打造更好用户体验的机会。然而,实施可扩展以支持数百万辆汽车的联网汽车服务可能会带来一些挑战。 对于大多数联网汽车服务,汽车和云之间需要进行双向通信。汽车将遥测…...
CSIT883系统分析与项目管理——Lecture2重点概念
一、前言 这个是本人的学习笔记,如果大家喜欢可以多多关注吧! 二、重点概念 1.项目经理及其团队必须认识到任何项目对整个系统或组织的利益和需求的影响,而不是关注项目的直接问题。 2.系统愿景文件的目的是什么? 系统愿景文档是描述问题、解决方案、系统目标等的简短声…...
【linux】基本指令(中篇)
echo指令 将引号内容打印到显示屏上 输出的重定向 追加的重定向 输出的重定向 我们学习c语言的时候当以写的方式创建一个文件,就会覆盖掉该文件之前的内容 当我们以追加的方式打开文件的时候,原文件内容不会被覆盖而是追加 more指令 10.more指令…...
Centos Download
前言 CentOS Linux 是一个社区支持的发行版,源自 CentOS git for Red Hat Enterprise Linux (RHEL) 上免费提供给公众的源代码。因此,CentOS Linux 的目标是在功能上与 RHEL 兼容。CentOS 计划主要更改组件以删除上游供应商的品牌…...
k8s集群资源监控工具metrics-server安装
1、下载镜像 docker pull swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/metrics-server:v0.6.22、在任一一个主节点上创建角色,执行下面语句 kubectl create clusterrolebinding kube-proxy-cluster-admin --clusterrolecluster-admin --usersystem:kube-…...
物流单打印模板下载,佳易王物流托运单打印软件
物流单打印模板下载,佳易王物流托运单打印软件 上图是常用的物流单打印模板,佳易王物流单打印软件打印格式可以根据需要定制更改。 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装ÿ…...
TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖
11月22日,由CSA(连接标准联盟)中国成员组主办,CSHIA承办的“Matter中国区开发者大会2023” 于杭州举行。 会上,连接标准联盟中国成员组主席宿为民博士、连接标准联盟亚洲区架构师杨莉女士、CSHIA秘书长|中智盟投资创始…...
java 事务提交(批量处理数据,单个批次执行完成后直接提交事务)
方法一:接口REQUIRES_NEW 实现单个事务提交 方式1: for (TIrBuPBom buPBom : batchList) {// 查询待处理的批次数据List<TIrBuPBom> pBomList pBomMapperBase.list(new LambdaQueryWrapper<TIrBuPBom>().eq(TIrBuPBom::getBatchNo, buPBom.getBatchNo…...
logging.config 日志模块
logging 日志模块 简单应用: import logging logging.warning(警告!) # 输出结果: WARNING:root:警告!1. 日志等级 - debug 调试 10 最详细的日志信息,典型应用场景是 问题诊断 - info 普通信息 20 信息详细…...
win10+ vs2017用cmake编译geos3.5.1
参考教程:使用CMake编译Geos3.5.0_cmake geos-CSDN博客 注意事项: 报错:在使用cmake编译geos-3.5.1的时候,会出现报错: CMake Error at CMakeLists.txt:330 (include): include could not find load file GenerateSou…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
