JSP详细篇——JDBC操作数据库(二)

删除数据

范例:

在查询所有图书信息的页面中,添加删除图书信息的超链接,通过Servlet实现对数据的删除操作

(1)在book_list.jsp中,增加删除图书信息的超链接,将连接的地址指向DeleteServlet。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP ‘check.jsp‘ starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<a href="FindServlet">查看所有图书信息</a>

</body>

</html>

(2)编写DeleteServlet,在doGet()方法中,编写删除图书信息的方法

package com.zgy.servlet;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class DeleteServlet extends HttpServlet {

/**

*

*/

private static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// TODO Auto-generated method stub

int id = Integer.valueOf(request.getParameter("id"));//获取图书id

try{

Class.forName("com.mysql.jdbc.Driver");//注册驱动

String url = "jdbc:mysql://localhost:3306/zhouguanya";//数据库连接字符串

String user = "root";//数据库用户名

String password = "root";//数据库密码

String sql = "delete from books where id = ?";//sql语句

Connection conn = DriverManager.getConnection(url, user, password);//创建Connection连接

PreparedStatement ps = conn.prepareStatement(sql);//获取PreparedStatement对象

ps.setInt(1, id);//设置sql中的?

ps.executeUpdate();//执行更新操作

ps.close();//关闭PreparedStatement

conn.close();//关闭Connection

}catch(ClassNotFoundException e){

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}

response.sendRedirect("FindServlet");//重定向到FindServlet

}

}

批处理

在JDBC开发中,操作数据库需要与数据库建立连接,然后将要执行的SQL语句传送到数据库服务器,最后关闭数据库连接。如果按照这个流程执行多条SQL语句,那么就需要建立多个数据库连接,这样会浪费很多时间。针对这一问题,JDBC的批处理提供了很好的解决方法。

JDBC中批处理的原理就是将批量的SQL语句一次性的发送到数据库中执行,从而解决了多次与数据库连接所产生的速度问题。

范例:

创建学生信息表,通过JDBC的批处理操作,一次性将多个学生的信息写入数据库。

(1)创建student表

(2)创建名称为Batch的类,实现对学生信息的批量添加。

package com.zgy.batchsql;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.Random;

public class Batch {

/*

* 获取数据库连接

*

* @return Connection对象

*/

public Connection getConnection() {

Connection conn = null;// 数据库连接

try {

Class.forName("com.mysql.jdbc.Driver");// 注册驱动

String url = "jdbc:mysql://localhost:3306/zhouguanya";// 连接数据库的字符串

String user = "root";// 数据库用户名

String password = "root";// 数据库密码

conn = DriverManager.getConnection(url, user, password);// 创建Connection对象

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

/*

* 批量添加数据

*

* @return 所影响的行数

*/

public int saveBatch(){

int row = 0;

Connection conn = getConnection();

try{

String sql = "insert into student(student_id,student_name,student_age,student_class) values (?,?,?,?)";

PreparedStatement ps = conn.prepareStatement(sql);

Random random = new Random();

for(int i = 0 ; i < 20 ; i++){

ps.setInt(1, i+1);//对student_id赋值

ps.setString(2, "学生"+(i+1));//对studet_name赋值

ps.setInt(3, random.nextInt(5)+10);//对student_age赋值

ps.setString(4, "班级"+(i+1));//对student_class赋值

ps.addBatch();//添加批处理

}

int[] rows = ps.executeBatch();//执行批处理操作返回计数组成的数组

row = rows.length;//对行进行赋值

ps.close();

conn.close();

}catch(SQLException e){

e.printStackTrace();

}

return row;

}

}

(3)创建batchsql.jsp页面,在该页面中使用<jsp:useBean>实例化Batch,并执行批量添加数据的操作。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP ‘batchsql.jsp‘ starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<jsp:useBean id="batch" class="com.zgy.batchsql.Batch"></jsp:useBean>

<%

int row = batch.saveBatch();

out.print("批量插入了"+row+"条数据");

%>

</body>

</html>

时间: 2025-01-04 13:35:03

JSP详细篇——JDBC操作数据库(二)的相关文章

JSP详细篇——EL表达式(二)

EL的隐含对象 为了能够获得Web应用中的是相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名进行操作.在EL的隐含对象中,除了PageContext是JavaBean对象,对应于javax.servlet.jsp.PageContext类型外,其他的隐含对象都对应于java.util.Map类型.这些隐含对象可以分为页面上下文对象.访问作用域范围的隐含对象和访问环境信息的隐含对象3种.下面分别进行详细介绍. 1.页面上下文对象 页面上下文对象为pageCon

JSP详细篇——Java Web的数据库操作

Java Web的数据库操作 JDBC技术 JDBC简介 JDBC是Java程序曹祖数据库的API,也是Java程序与数据库交互的一门技术.JDBC是java操作数据库的规范,由一组用Java语言编写的类和接口组成,他对数据库的操作提供了基本的方法.使用JDBC操作数据库,需要数据库厂商提供数据库的驱动程序. JDBC在Java程序与数据库之前起到了桥梁的作用,有了JDBC就可以方便的与各种数据库进行交互,不必为某一个特定的数据库指定专门的访问程序. JDBC连接数据库的过程 JDBC操作数的开

JDBC操作数据库的详细步骤

JDBC操作数据库的步骤: 1.注册驱动 告知JVM使用的是哪一个数据库的驱动 2.获得连接 使用JDBC中的类,完成对MySQL数据库的连接 3.获得语句执行平台 通过连接对象获取对SQL语句的执行者对象 4.执行sql语句 使用执行者对象,向数据库执行SQL语句 获取到数据库的执行后的结果 5.处理结果 6.释放资源  一堆close() 1.注册驱动,发射技术,将驱动加入到内容 使用java.sql.DriverManager类静态方法 registerDriver(Driver driv

JDBC操作数据库的学习(1)

单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的连接驱动,应用程序通过这些驱动来操作数据库: 但是这里就又有一个问题了,不同的数据库有各自的驱动程序,而一个应用程序要操作不同的数据库,那么就要懂得要使用的数据库的驱动如何操作,这样就增加了学习成本.好在我们使用Java开发应用,而Java中只需要使用JDBC就能操作所有的数据库,因为JDBC提供的

JDBC操作数据库的学习(2)

在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本篇就在简单开发中如何对上一篇的例子进行“升级”,满足简单开发中对数据库的增删改查(CRUD). 如果按照上一篇中的例子,那么我们在做增删改查的话将会出现每个方法都要获取连接,释放资源,代码会出现很大的重复性,因此我们应该将每个增删改查每个方法中可以复用的代码抽取出来,同时为了能切换数据库方便,也该将一些配置信

Spark Streaming通过JDBC操作数据库

本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Streaming也提供了两种API与之对应,其中spark-streaming-kafka-0-8支持Kafka 0.8.2.1以后的Broker:spark-streaming-kafka-0-10支持0.10.0以上Broker,处于实验阶段.两者的对比如下表所示. |spark-streaming-ka

jdbc操作数据库语句

非常有用的jdbc操作数据库语句,记录下来,以方便以后的查询. public class PersonDao { // 增加操作 public void insert(Person person) throws Exception; // 修改操作 public void update(Person person) throws Exception; // 删除操作 public void delete(String id) throws Exception ; // 按ID查询操作 publi

几种通过JDBC操作数据库的方法,以及返回数据的处理

1.SQL TO String :只返回一个查询结果 例如查询某条记录的总数 rs = stmt.executeQuery(replacedCommand);             if (rs != null && rs.next()) // rs only contains one row and one column             {                    String tempStr = rs.getString(1);                 

JDBC操作数据库的基本步骤

JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操作结果集. 7)关闭对象,回收数据库资源(关闭结果集-->关闭数据库操作对象-->关闭连接). package com.yangshengjie.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java