博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC操作数据库
阅读量:6283 次
发布时间:2019-06-22

本文共 14272 字,大约阅读时间需要 47 分钟。

1. 添加数据

通过JDBC向数据库添加数据,可以使用INSERT语句实现插入数据SQL语句,对于SQL语句中的参数可以使用占位符“?"代替,然后通过PreparedStatement对其赋值并执行SQL。

例1.1 创建Web项目,然后通过JDBC实现图书信息添加功能。

(1)在MySQL数据库中创建图书信息表books,其结构如下图所示。

(2)创建名称为Book的类,用于封装图书对象信息。关键代码如下:

package com.cn.database;public class Book {    private int id;    private String name;    private double price;    private int bookCount;    private String author;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public int getBookCount() {        return bookCount;    }    public void setBookCount(int bookCount) {        this.bookCount = bookCount;    }    public String getAuthor() {        return author;    }    public void setAuthor(String author) {        this.author = author;    }}

(3)创建index.jsp页面,它是程序中的主页,用于放置添加图书信息所需要的表单,该表单提交到AddBook.jsp页面进行处理。关键代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'index.jsp' starting page        

添加图书信息

图书名称:
图书价格:
图书数量:
图书作者:

(4)创建AddBook.jsp页面,用于对添加图书信息请求进行处理,该页面通过JDBC将所提交的图书信息数据写入数据库中。关键代码如下:

<%@page import="java.sql.PreparedStatement"%><%@page import="java.sql.DriverManager"%><%@page import="java.sql.Connection"%><%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'AddBook.jsp' starting page        
<%request.setCharacterEncoding("GBK"); %>
<% try{ Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "1234"); String sql="insert into books(name,price,bookCount,author) values(?,?,?,?)"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, book.getName()); ps.setDouble(2, book.getPrice()); ps.setInt(3, book.getBookCount()); ps.setString(4, book.getAuthor()); int row = ps.executeUpdate(); //执行更新操作,返回所影响的行数 if(row > 0){ out.print("成功添加了"+row+"条数据!"); } ps.close(); //关闭PrepareStatement,释放资源 conn.close(); }catch(Exception e){ out.print("图书信息添加失败!"); e.printStackTrace(); } %>
返回

在AddBook.jsp页面中,首先通过<jsp:useBean>实例化JavaBean对象Book,并通过<jsp:setProperty>对Book对象中的属性赋值,在构建了图书对象后通过JDBC将图书信息写入到数据库中。

2. 查询数据

使用JDBC查询数据与添加数据的流程基本相同,但执行查询数据操作后需要通过一个对象来装载查询结果集,这个对象就是ResultSet对象。

例2.1 创建Web项目,通过JDBC查询图书信息表中的图书信息,并将其显示在JSP页面中。

(1)创建名称为Book的类,用于封装图书信息,代码同例1.1。

(2)创建名称为FindServlet的Servlet对象,用于查询所有图书信息。在此Servlet中, 编写doGet()方法,建立数据库连接,并将所查询的数据集合放置到HttpServletRequest对象中,将请求转发到JSP页面。关键代码如下:

package com.cn.gao;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 java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.cn.gao.Book;public class FindServlet extends HttpServlet {        private static final long serialVersionUID = 1L;    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        try {            Class.forName("com.mysql.jdbc.Driver");            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "1234");            String sql = "select* from books";            Statement sta = conn.createStatement();            ResultSet rs = sta.executeQuery(sql);            List
list = new ArrayList
(); while(rs.next()){ Book book = new Book(); book.setId(rs.getInt("id")); book.setName(rs.getString("name")); book.setPrice(rs.getDouble("price")); book.setBookCount(rs.getInt("bookCount")); book.setAuthor(rs.getString("author")); list.add(book); } request.setAttribute("list", list); //将所查询的数据集合放置到HttpServletRequest对象中 rs.close(); sta.close(); conn.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } request.getRequestDispatcher("book_list.jsp").forward(request, response); //请求转发到book_list.jsp }}

(3)创建book_list.jsp页面,用于显示所有图书信息。关键代码如下:

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GBK"%><%@ page import="java.util.*" %><%@ page import="com.cn.gao.*" %>
Insert title here
list = (List
)request.getAttribute("list"); //判断集合是否有效 if(list==null||list.size()<1){ out.print("没有数据!"); }else{ //遍历图书集合中的数据 for(Book book:list){ %>
<% //获取图书信息集合 List
<% } } %>
所有图书信息
ID 图书名称 价格 数量 作者
<%=book.getId()%> <%=book.getName()%> <%=book.getPrice()%> <%=book.getBookCount()%> <%=book.getAuthor()%>

由于FindServlet将查询的所有图书信息集合放置到了request中,所以在book_list.jsp中可以通过request的getAttribute()方法获取到这一集合对象。实例中在获得所有图书信息集合后,通过for循环遍历所有图书信息集合,并将其输出到页面中。

(4) 创建showbook.jsp页面,该页面为程序中的主页,在该页面中编写一个导航链接,用于请求查看所有图书信息。关键代码如下:

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%>
Insert title here

查看所有图书

部署并运行程序后,将打开showbook.jsp页面,单击“查看所有图书”链接后,可以查看到从数据库中查询的所有图书信息。

3. 修改数据

使用JDBC修改数据库中的数据,其操作方法与添加数据相似,只不过修改数据需要使用UPDATE语句实现。

在实际的开发中,通常情况下都是由程序传递SQL语句中的参数,所以修改数据也需要使用PreparedStatement对象进行操作。

 例3.1 在查询所有图书信息的页面中,添加修改图书数量的表单,通过Servlet修改数据库中的图书数量。

(1)在book_list.jsp页面中增加修改图书数量的表单,将该表单的提交地址设置为UpdateServlet。关键代码如下:

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GBK"%><%@ page import="java.util.*" %><%@ page import="com.cn.gao.*" %>
Insert title here
list = (List
)request.getAttribute("list"); //判断集合是否有效 if(list==null||list.size()<1){ out.print("没有数据!"); }else{ //遍历图书集合中的数据 for(Book book:list){ %>
<% //获取图书信息集合 List
<% } } %>
所有图书信息
ID 图书名称 价格 数量 作者 修改数量
<%=book.getId()%> <%=book.getName()%> <%=book.getPrice()%> <%=book.getBookCount()%> <%=book.getAuthor()%>

在修改图书信息的表单中,主要包含两个属性信息,分别为图书id与图书数量bookCount,因为修改图书数量时需要明确指定图书的id作为修改的条件,否则,将会修改所有图书信息记录。

技巧:由于图书id属性并不需要显示在表单中,而在图书信息的修改过程中又需要获取这个值,所以,将id对应文本框<input>中的type属性设置为hidden,使之在表单中构成一个隐藏于,从而实现实际的业务需求。

(2)创建修改图书信息的Servlet对象,其名称为UpdateServlet。由于表单提交请求类型为post,所以在UpdateServlet中编写doPost()方法,对修改图书信息请求进行处理。关键代码如下:

package com.cn.gao;import java.io.IOException;import java.io.PrintWriter;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 UpdateServlet extends HttpServlet {    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        int id = Integer.parseInt(request.getParameter("id"));        int bookCount = Integer.parseInt(request.getParameter("bookCount"));        try {            Class.forName("com.mysql.jdbc.Driver");            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "1234");            String sql = "update books set bookCount=? where id=?";            PreparedStatement ps = conn.prepareStatement(sql);            ps.setInt(1, bookCount);            ps.setInt(2, id);            ps.executeUpdate();            ps.close();            conn.close();        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        response.sendRedirect("FindServlet");  //重定向到FindServlet    }}

 4. 删除数据

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

(1)在book_list.jsp页面中,增加删除图书信息的超链接,将链接地址指向DeleteServlet。关键代码如下:

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GBK"%><%@ page import="java.util.*" %><%@ page import="com.cn.gao.*" %>
Insert title here
list = (List
)request.getAttribute("list"); //判断集合是否有效 if(list==null||list.size()<1){ out.print("没有数据!"); }else{ //遍历图书集合中的数据 for(Book book:list){ %>
<% //获取图书信息集合 List
或者:
所有图书信息
ID 图书名称 价格 数量 作者 修改数量 删除
<%=book.getId()%> <%=book.getName()%> <%=book.getPrice()%> <%=book.getBookCount()%> <%=book.getAuthor()%>

<td>

<a href="DeleteServerlet?id=<%book.getId()%>>删除</a>
</td>

            <%                    }                }             %>            

在删除数据信息操作中,需要传递所要删除的图书对象,因此,在删除图书信息的超链接中加入图书id值。

技巧:在Java Web开发中,JSP页面中的超链接可以带有参数,器操作方式通过在超链接后加入“?”实现。

(2)编写处理删除图书信息的Servlet,其名称为DeleteServlet。在doPost()(或doGet())方法中,编写删除图书信息的方法。关键代码如下:

package com.cn.gao;import java.io.IOException;import java.io.PrintWriter;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 {    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        int id = Integer.parseInt(request.getParameter("id"));        try {            Class.forName("com.mysql.jdbc.Driver");            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "1234");            String sql = "delete from books where id=?";            PreparedStatement ps = conn.prepareStatement(sql);            ps.setInt(1, id);            ps.executeUpdate();            ps.close();            conn.close();        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        response.sendRedirect("FindServlet");    }}

 

转载地址:http://zdxva.baihongyu.com/

你可能感兴趣的文章
CentOS7.4——Apache优化应用四(防盗链)
查看>>
MySQL中too many connections问题解决
查看>>
我公司卷板机2010年度全胜寰球卷板机事业50强
查看>>
nginx+lua的安装
查看>>
Linux常用命令——dumpe2fs
查看>>
使用PXE+DHCP+Apache+Kickstart系统自动化安装
查看>>
好的学习文章链接
查看>>
JVM -XX: 参数介绍
查看>>
关于windows下的c++的rand函数详解
查看>>
Maven项目没有Run AS和Debug AS想要的命令操作
查看>>
日志分析 awstats 如何优化性能
查看>>
Shell 特殊用法续
查看>>
keepalived高可用LVS与Nginx
查看>>
Symfony杂记
查看>>
2.5 控制流
查看>>
“诚实”需求分析法的价值
查看>>
组策略应用之一:映射网络驱动器
查看>>
计算机专业学生在毕业之前应该做的10000件事
查看>>
linux开机启动顺序
查看>>
快速预览Office 15服务端:Exchange 2013
查看>>