与指定的数据库建立连接后,就可以使用JDBC提供的API对数据库进行操作,包括查询、新增、更新、删除等。
和数据库建立连接后,对数据库表进行查询操作的步骤如下:
由已创建的Connection对象con调用createStatement()方法创建Statement对象,代码如下:
Statement smt = con.createStatement();
创建Statement对象后,可以使用Statement对象调用executeQuery(String sql)方法执行SQL查询语句。该方法返回ResultSet对象,代表查询结果。
ResultSet对象是executeQuery(String sql)方法的返回值,被称为结果集,它代表符合SQL查询语句的所有行。
ResultSet对象自动维护指向其当前数据行的游标。每调用一次next()方法,游标向下移动一行。最初它位于结果集的第一行之前,因此第一次调用next(),将把游标置于第一行上,使它成为当前行。随着每次调用next(),游标向下移动一行,按照从上至下的次序获取ResultSet行,实现顺序查询。
ResultSet对象包含SQL查询语句的执行结果。它通过一套get()方法对这些行中的数据进行访问,即使用getXxx()方法获得数据。getXxx()方法很多,究竟使用哪一个,由列的数据类型来决定。使用getXxx()方法时,需要注意以下两点:
rs.getString(2);
rs.getString(1);
和数据库建立连接后,对数据库表进行新增、更新与删除操作的具体步骤如下:
Statement对象的创建与查询操作一样,由已创建的Connection对象con调用createStatement()方法创建。
创建Statement对象后,可以使用Statement对象调用executeUpdate(String sql)方法执行SQL语句,完成新增、更新与删除操作。
executeUpdate(String sql)方法主要用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,例如CREATE TABLE和DROP TABLE。该方法返回一个整数(代表被更新的行数)对于CREATE TABLE和DROP TABLE等不操作行的指令,返回零。
页面addGoods.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<! DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="goodServlet" method="post">
<table border="1">
<tr>
<td>商品名称:</td>
<td><input type="text" name="gname"></td>
</tr>
<tr>
<td>商品价格:</td>
<td><input type="text" name="gprice"></td>
</tr>
<tr>
<td><input type="submit" value="添加"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
实体类Goods.java
package entity;
public class Goods {
private int id;
private String gname;
private Double gprice;
//此处省略了setter和getter方法
}
GoodServlet.java
package servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HTTPServlet;
import javax.servlet.http.HTTPServletRequest;
import javax.servlet.http.HTTPServletResponse;
import entity.Goods;
@WebServlet("/goodsServlet")
public class GoodsServlet extends HttpServlet {
private static fianl long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,HttpServlet response) throws ServletException,IOException {
Connection con = null;
Statement st = null;
ResultSet rs = null;
//将查询结果装到集合ArrayList<Goods>中,并返回页面显示
ArrayList<Goods> allGoods = null;
//加载驱动
try{
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e){
e.printStackTrace();
}
//建立连接
try{
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf-8","root","root");
st = con.creatStatement();
//发送添加SQL语句,实现添加的功能
request.setCharacterEncoding("utf-8");
st.executeUpdate("insert into goods values(null,'"+request.getParameter("gname")+"',"+request.getParameter("gprice")+")");
//发送查询SQL语句,返回结果集
rs = st.executeQuery("select * from goods");
//将查询结果装到集合ArrayList<Goods>中
allGoods = new Goods();
while(rs.next()){
Goods g = new Goods();
g.setId(rs.getInt(1));
g.setGName(rs.getString(2));
g.setGPrice(rs.getDouble(3));
allGoods.add(g);
}
rs.close();
st.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
//存到request对象,以便页面showAllGoods.jsp中显示
request.setAttribute("allGoods",allGoods);
//跳转到showAllGoods.jsp显示商品
RequestDispather dis = request.getRequestDispatcher("showAllGoods.jsp");
dis.forward(request,response);
}
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
doGet(request,response);
}
}
页面showAllGoods.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<! DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr>
<th>商品编号</th>
<th>商品名称</th>
<th>商品价格</th>
</tr>
<c:forEach items="${allGoods}" var="goods">
<tr>
<td>${goods.id}</td>
<td>${goods.gname}</td>
<td>${goods.gprice}</td>
</tr>
<c:forEach>
</table>
</body>
</html>
有时候需要结果集的游标前后移动,这时可使用滚动结果集。为了获得滚动结果集,必须首先用下面的方法得到一个Statement对象:
Statement st = con.createStatement(int type,int concurrency);
根据tyoe和concurrency的取值,当执行ResultSet = st.executeQuery(String sql)时,会返回不同类型的结果集。
type的取值决定滚动方式,它的取值如下:
concurrency的取值表示是否可以用结果集更新数据库,它的取值如下:
游动查询经常用到ResultSet的方法如下:
与数据库建立连接是一个耗资源的活动,每次都要花费一定的时间。这个时间对于一次或几次数据库连接,系统的开销或许不明显。可是对于大型电子商务网站,同时有成千上万人频繁地进行数据库连接操作,势必占用很多系统资源,网站的响应速度必定下降,严重时甚至会造成服务器的崩溃。因此,合理地建立数据库连接是非常重要的。
数据库连接池的基本思想是:为数据库建立一个“缓冲池”。预先在“缓冲池”中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。可以通过设定连接池最大连接数来防止系统无限度地与数据库连接。更为重要的是,通过连接池的管理机制见识数据库连接的数量及使用情况,为系统开发、测试和性能调整提供依据。
第一次访问连接池时,需要耗费一定的时间,这是因为在第一次访问时连接池中没有可用连接,但是第二次访问时连接池中就有了一些可用的连接,可以直接从连接池中获得连接来访问数据库。
加载驱动程序
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
建立连接
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@主机:端口号:数据库名","用户名","密码");
Connection con= DriverManager.getConnection( "jdbc:sqlserver://localhost:1433;DatabaseName=mydatabase","用户名","密码");
加载驱动程序
Class.forName("oracle.jdbc.OracleDriver");
建立连接
Connection con= DriverManager.getConnection( "jdbc:oracle:thin:@主机:端口:数据库名","用户名","密码");
与Statement语句一样,PrepareStatement语句同样可以完成向数据库发送SQL语句、获取数据库操作结果的功能。PreparedStatement语句习惯地称为预处理语句。
分页查询一般有两种实现方式:一次查询出所有数据,在页面中进行分页显示;每页查询一次,每次只查询本页显示的数据。本节采用后者。
首先获得查询数据总条数totalCount,然后根据totalCount计算总页数totalPage,最后计算起始位置startIndex。
文章浏览阅读3.5k次,点赞2次,收藏13次。为了从FTP服务器下载文件,需要要实现一个简单的FTP客户端。FTP(文件传输协议) 是 TCP/IP 协议组中的应用层协议。FTP协议使用字符串格式命令字,每条命令都是一行字符串,以“\r\n”结尾。客户端发送格式是:命令+空格+参数+"\r\n"的格式服务器返回格式是以:状态码+空格+提示字符串+"\r\n"的格式,代码只要解析状态码就可以了。读写文件需要登陆服务器,特殊用..._ftp 登录返回230
文章浏览阅读648次。前提:systemctl stop firewalld 关闭防火墙关闭selinux查看getenforce临时关闭setenforce 0永久关闭sed-i'/SELINUX/s/enforcing/disabled/'/etc/selinux/configselinux的三种模式enforcing:强制模式,SELinux 运作中,且已经正确的开始限制..._centos7 安装rabbitmq3.6.5
文章浏览阅读5.8k次。满意答案s55f2avsx2017.09.05采纳率:46%等级:12已帮助:5646人新版Android Studio/IntelliJ IDEA可以直接导入eclipse项目,不再推荐使用eclipse导出gradle的方式2启动Android Studio/IntelliJ IDEA,选择 import project3选择eclipse 项目4选择 create project f..._android studio 项目导入idea 看不懂安卓项目
文章浏览阅读860次,点赞2次,收藏6次。AI大模型技术已经在自然语言处理、计算机视觉、多模态交互等领域取得了显著的进展和成果,同时也引发了一系列新的挑战和问题,如数据质量、计算效率、知识可解释性、安全可靠性等。城市运维涉及到多个方面,如交通管理、环境监测、公共安全、社会治理等,它们需要处理和分析大量的多模态数据,如图像、视频、语音、文本等,并根据不同的场景和需求,提供合适的决策和响应。知识搜索有多种形式,如语义搜索、对话搜索、图像搜索、视频搜索等,它们可以根据用户的输入和意图,从海量的数据源中检索出最相关的信息,并以友好的方式呈现给用户。_ai大模型应用开发
文章浏览阅读8.2k次,点赞12次,收藏121次。为什么要测量阻抗呢?阻抗能代表什么?阻抗测量的注意事项... ...很多人可能会带着一系列的问题来阅读本文。不管是数字电路工程师还是射频工程师,都在关注各类器件的阻抗,本文非常值得一读。全文13000多字,认真读完大概需要2小时。一、阻抗测试基本概念阻抗定义:阻抗是元器件或电路对周期的交流信号的总的反作用。AC 交流测试信号 (幅度和频率)。包括实部和虚部。图1 阻抗的定义阻抗是评测电路、元件以及制作元件材料的重要参数。那么什么是阻抗呢?让我们先来看一下阻抗的定义。首先阻抗是一个矢量。通常,阻抗是_阻抗实部和虚部
文章浏览阅读955次。前面章节分享试用了pyzero,pygame但随着想增加更丰富的游戏内容,好多还要进行自己编写类,从今天开始解绍一个新的python游戏库arcade模块。通过此次的《连连看》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。_arcade语言 like
文章浏览阅读1.1k次。源码简介与安装说明:2021增强版短视频去水印源码 去水印微信小程序源码网站 去水印软件源码安装环境(需要材料):备案域名–服务器安装宝塔-安装 Nginx 或者 Apachephp5.6 以上-安装 sg11 插件小程序已自带解析接口,支持全网主流短视频平台,搭建好了就能用注:接口是公益的,那么多人用解析慢是肯定的,前段和后端源码已经打包,上传服务器之后在配置文件修改数据库密码。然后输入自己的域名,进入后台,创建小程序,输入自己的小程序配置即可安装说明:上传源码,修改data/_去水印机要增强版
文章浏览阅读557次。1. 触发器是FPGA存储数据的基本单元2. 触发器作为时序逻辑的基本元件,官方提供了丰富的配置方式,以适应各种可能的应用场景。_fdre #(.init(1'b0) // initial value of register (1'b0 or 1'b1) ) fdce_osc (
文章浏览阅读560次。本该是不同编译器结果不同,但是尝试了g++ msvc都是先计算c,再计算b,最后得到a+b+c是经过赋值以后的b和c参与计算而不是6。由上表可知,将q复制到p数组可以表示为:*p++=*q++,*优先级高,先取到对应q数组的值,然后两个++都是在后面,该行运算完后执行++。在电脑端编译完后会分为text data bss三种,其中text为可执行程序,data为初始化过的ro+rw变量,bss为未初始化或初始化为0变量。_嵌入式面试笔试c语言知识点
文章浏览阅读2.3k次。57 Things I've Learned Founding 3 Tech CompaniesJason Goldberg, Betashop | Oct. 29, 2010, 1:29 PMI’ve been founding andhelping run techn_mature
文章浏览阅读1.9k次。问题:先讲下需求,有若干个文本文件(txt或者csv文件等),每行代表一条数据,现在希望能合并成 1 个文本文件,且需要去除重复行。分析:一向奉行简单原则,如无必要,绝不复杂。如果数据量不大,那么如下两条命令就可以搞定合并:cat a.txt >> new.txtcat b.txt >> new.txt……去重:cat new...._python 超大文本合并
文章浏览阅读489次。这个过渡页是第一次打开小程序展示的,点击某个小程序前把手机的开发者->network link conditioner->enable & very bad network 就会在停在此页。比如《支付宝运动》这个小程序先看这个类的.h可以看到它继承于DTViewController点击左上角返回的方法- (void)back;#import "DTViewController.h"#import "APBaseLoadingV..._类似支付宝页面过度加载页