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/csshref="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/csshref="styles.css">

-->

 

  </head>

  

  <body>

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

    <%

     int row = batch.saveBatch();

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

     %>

  </body>

</html>




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。