Java Web的数据库操作

三、JDBC操作数据库

上一篇介绍了JDBC API,之后就可以通过API来操作数据库,实现对数据库的CRUD操作了。

http://blog.csdn.net/zhai56565/article/details/9794225

下面仅以示例 的方式对数据库操作进行说明

1、 添加数据

使用PreparedStatement添加数据:

  1. String sql = "INSERT INTO tb_books(name,price,count,author)valuse(?,?,?,?)";
  2.  
  3. PreparedStatement ps = conn.prepareStatement(sql);
  4.  
  5. ps.setString(1, "西游记");
  6.  
  7. ps.setDouble(2, 66.0);
  8.  
  9. ps.setInt(3, 200);
  10.  
  11. ps.setString(4, "吴承恩");
  12.  
  13. int row = ps.executeUpdate();
  14.  
  15. if(row > 0)
  16.  
  17. System.out.println("成功添加了" + row + "条数据");

使用Statement添加数据:

  1. String sql = "INSERT INTO tb_books(name,price,count,author)valuse(" + "西游记" + "," + 66.0 + "," + 200 + "," + "吴承恩" + ")";
  2.  
  3. ps.close();
  4.  
  5. Statement ps = conn.createStatement();
  6.  
  7. int row = ps.executeUpdate(sql);
  8.  
  9. if(row > 0)
  10.  
  11. System.out.println("成功添加了" + row + "条数据");
  12.  
  13. ps.close();

2、查询数据

查询数据是通过一个Web项目来演示,通过JDBC查询图书信息表中的图书信息数据,并将其显示在JSP页面中:

创建Book类:

  1. package com;
  2.  
  3. public class Book {
  4.  
  5. private int id;
  6.  
  7. private String name;
  8.  
  9. private double price;
  10.  
  11. private int count;
  12.  
  13. private String author;
  14.  
  15. public Book(int id , String name , double price , int count , String author) {
  16.  
  17. this.id = id;
  18.  
  19. this.name = name;
  20.  
  21. this.price = price;
  22.  
  23. this.count = count;
  24.  
  25. this.author = author;
  26.  
  27. }
  28.  
  29. public int getId(){
  30.  
  31. return id;
  32.  
  33. }
  34.  
  35. public void setId(int id){
  36.  
  37. this.id = id;
  38.  
  39. }
  40.  
  41. public String getName(){
  42.  
  43. return name;
  44.  
  45. }
  46.  
  47. public void setName(String name){
  48.  
  49. this.name = name;
  50.  
  51. }
  52.  
  53. public double getPrice(){
  54.  
  55. return price;
  56.  
  57. }
  58.  
  59. public void setPrice(double price){
  60.  
  61. this.price = price;
  62.  
  63. }
  64.  
  65. public int getCount(){
  66.  
  67. return count;
  68.  
  69. }
  70.  
  71. public void setCount(int count){
  72.  
  73. this.count = count;
  74.  
  75. }
  76.  
  77. public String getAuthor(){
  78.  
  79. return author;
  80.  
  81. }
  82.  
  83. public void setAuthor(String author){
  84.  
  85. this.author = author;
  86.  
  87. }
  88.  
  89. }

创建Servlet对象FindServlet:

  1. @WebServlet("/FindServlet")
  2.  
  3. public class FindServlet extends HttpServlet {
  4.  
  5. private static final long serialVersionUID = 1L;
  6.  
  7. public FindServlet() {
  8.  
  9. super();
  10.  
  11. }
  12.  
  13. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14.  
  15. doPost(request, response);
  16.  
  17. }
  18.  
  19. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  20.  
  21. try {
  22.  
  23. Class.forName("com.mysql.jdbc.Driver");
  24.  
  25. String url = "jdbc:mysql://localhost:8080/db_test";
  26.  
  27. String username = "admin";
  28.  
  29. String password = "123456";
  30.  
  31. Connection connection = DriverManager.getConnection(url, username, password);
  32.  
  33. Statement statement = connection.createStatement();
  34.  
  35. String sql = "SELECT * FROM tb_books";
  36.  
  37. ResultSet rs = statement.executeQuery(sql);
  38.  
  39. ArrayList<Book> list = new ArrayList<Book>();
  40.  
  41. while (rs.next()) {
  42.  
  43. Book book = new Book(rs.getInt("id") , rs.getString("name") ,
  44.  
  45. rs.getDouble("price") , rs.getInt("count") , rs.getString("author"));
  46.  
  47. list.add(book);
  48.  
  49. }
  50.  
  51. request.setAttribute("list", list);
  52.  
  53. rs.close();
  54.  
  55. statement.close();
  56.  
  57. connection.close();
  58.  
  59. } catch (ClassNotFoundException e) {
  60.  
  61. e.printStackTrace();
  62.  
  63. } catch (SQLException e) {
  64.  
  65. e.printStackTrace();
  66.  
  67. }
  68.  
  69. //将请求转发到book_list.jsp
  70.  
  71. request.getRequestDispatcher("book_list.jsp").forward(request, response);
  72.  
  73. }
  74.  
  75. }

创建book_list.jsp页面:

  1. <body>
  2.  
  3. <table align="center" width="450" border="2">
  4.  
  5. <tr>
  6.  
  7. <td align="center" colspan="2"><h2>所有图书信息</h2></td>
  8.  
  9. </tr>
  10.  
  11. <tr align="center">
  12.  
  13. <td><b>ID</b></td>
  14.  
  15. <td><b>图书名称</b></td>
  16.  
  17. <td><b>价格</b></td>
  18.  
  19. <td><b>数量</b></td>
  20.  
  21. <td><b>作者</b></td>
  22.  
  23. </tr>
  24.  
  25. <%
  26.  
  27. //获取图书信息集合
  28.  
  29. ArrayList<Book> list = (ArrayList<Book>)request.getAttribute("list");
  30.  
  31. if(list == null || list.size() < 1)
  32.  
  33. out.print("没有数据!");
  34.  
  35. else{
  36.  
  37. for(Book book : list){
  38.  
  39. %>
  40.  
  41. <tr align="center">
  42.  
  43. <td><%= book.getId() %></td>
  44.  
  45. <td><%= book.getName() %></td>
  46.  
  47. <td><%= book.getPrice() %></td>
  48.  
  49. <td><%= book.getCount() %></td>
  50.  
  51. <td><%= book.getAuthor() %></td>
  52.  
  53. </tr>
  54.  
  55. <%
  56.  
  57. }
  58.  
  59. }
  60.  
  61. %>
  62.  
  63. </table>
  64.  
  65. </body>

创建index.jsp页面:

  1. <body>
  2.  
  3. <a href="FindServlet">查看所有图书</a>
  4.  
  5. </body>

3、修改数据

修改数据的方法,除了SQL语句外其它都与添加数据相同,其SQL语句为:

UPDATE 表 SET 属性=xxx WHERE 属性=xxx

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

4、删除数据

修改数据的方法,除了SQL语句外其它都与添加数据相同,其SQL语句为:

DELETE FROM 表 WHERE 属性=xxx

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

5、批处理

JDBC中批处理的原理是将批量的SQL语句一次性发送到数据库中进行执行,从而解决多次与数据库连接所产生的速度瓶颈。下面是一个使用批处理添加数据的方法:

  1. public int saveBatch() {
  2.  
  3. int row = 0;
  4.  
  5. try {
  6.  
  7. String sql = "INSERT INTO tb_books(id,name,price,count,anthor) VALUES(?,?,?,?,?)";
  8.  
  9. PreparedStatement ps = connection.prepareStatement(sql);
  10.  
  11. for (int i = 0; i < 10; i++) {
  12.  
  13. ps.setInt(1, i);
  14.  
  15. ps.setString(2, "书" + i);
  16.  
  17. ps.setDouble(3, i*10.5);
  18.  
  19. ps.setInt(4, i*20);
  20.  
  21. ps.setString(5, "作者" + i);
  22.  
  23. //添加批处理命令
  24.  
  25. ps.addBatch();
  26.  
  27. }
  28.  
  29. //执行批处理操作并返回计数组成的数据
  30.  
  31. int[] rows = ps.executeBatch();
  32.  
  33. row = rows.length;
  34.  
  35. ps.close();
  36.  
  37. connection.close();
  38.  
  39. } catch (SQLException e) {
  40.  
  41. e.printStackTrace();
  42.  
  43. }
  44.  
  45. return row;
  46.  
  47. }

6、调用存储过程

在JDBC API中提供了调用存储过程的方法,通过CallableStatement对象进行操作。CallableStatement对象位于java.sql包中,它继承于Statement对象,主要用于执行数据库中定义的存储过程,其调用方法如下:

{call <procedure-name>[(<arg1>,<arg2>,…)]}

其中arg1、arg2为存储过程中的参数,如果存储过程中需要传递参数,可以对其进行赋值操作。

存储过程是一个SQL语句和可选控制流语句的预编译集合。编译完成后存放在数据库中,这样就省去了执行SQL语句时对SQL语句进行编译所花费的时间。在执行存储过程时只需要将参数传递到数据库中,而不需要将整条SQL语句都提交给数据库,从而减少了网络传输的流量,提高了程序的运行速度。

各种数据库创建存储过程的方法并非一致,下面以SQL Server 2012调用存储过程的方法做讲解,其他数据库请参考其帮助文档:

首先打开 SQL Server Management Studio,依次打开实例、数据库、你的数据库、可编程性、存储过程,右键存储过程选择新建存储过程。这是会弹出文本窗口,内有许多文本,鉴于初学者,将文本内容全部删掉,以下面的代码代替之:

  1. USE [test]
  2. GO
  3. CREATE PROCEDURE findAllBooks
  4. AS
  5. BEGIN
  6. SELECT * from tb_books
  7. END
  8. GO

在程序中关键代码如下:

  1. CallableStatement cs = connection.prepareCall("{call findAllBook()}");
  2.  
  3. ResultSet resultSet = cs.executeQuery();

下一节介绍JDBC在Java Web中的应用

Java Web----Java Web的数据库操作(二)的更多相关文章

  1. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  2. Java常用工具类之数据库操作辅助类DBUtil.java

    package com.qushida.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.be ...

  3. java之Hibernate框架实现数据库操作

    之前我们用一个java类连接MySQL数据库实现了数据库的增删改查操作---------MySQL篇: 但是数据库种类之多,除了MySQL,还有Access.Oracle.DB2等等,而且每种数据库语 ...

  4. Java/C++实现模板方法模式---数据库操作

    对数据库的操作一般包括连接.打开.使用.关闭等步骤,在数据库操作模板类中我们定义了connDB().openDB().useDB().closeDB()四个方法分别对应这四个步骤.对于不同类型的数据库 ...

  5. Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作

    在Java中对Oracle数据库的操作分为两种:一.查询.二.非查询. 下面是我对其进行总结: 一.查询数据 /** * 根据用户代码查询 * @param userId * @return 如果存在 ...

  6. ThinkPHP 数据库操作(二) : 增删改查

    基本使用 可以直接使用数据库运行原生SQL操作了,支持 query (查询操作)和 execute (写入操作)方法,并且支持参数绑定. Db::query('select * from think_ ...

  7. Java Web的数据库操作(一)

    一.JDBC技术 1.JDBC简介 JDBC是Java程序与数据库系统通信的标准API,它定义在JDK的API中,通过JDBC技术,Java程序可以非常方便地与各种数据库交互,JDBC在Java程序与 ...

  8. Java Web----Java Web的数据库操作(三)

    Java Web的数据库操作 前面介绍了JDBC技术和JDBC API及API的使用示例,下面详细介绍JDBC在Web中的应用. Java Web----Java Web的数据库操作(一) Java ...

  9. PHP-Phalcon框架中的数据库操作

    > 本文描述了PHP-Phalcon框架中数据库操作方法,主要讨论Phalcon框架的Model组件中的操作方法.更详细的Model介绍请参考:官方文档 1. 连接数据库 在Phalcon框架中 ...

随机推荐

  1. Demo XML 、 JSON 解析 AND 网络HTTP请求

    有道云笔记分享:http://note.youdao.com/share/?id=7950b949a5017a698a9ecc95bc250ec5&type=note 后台服务端:C#.服务器 ...

  2. 凤凰OS

    看看这个http://www.phoenixos.com 是不是你想要的     --- 共有 5 条评论 --- Entity回复 @Leaybc : 今天装的凤凰os,有很多的BUG整天还不错.  ...

  3. TPersistent的三个用途(读写DFM文件,Assign,RTTI),最主要还是第三个用途

    不是什么类对象都需要RTTI,如果把它放在TObject,除了增加可执行文件的大小以及运行内存空间以外,没什么好处.

  4. jquery实现ajax提交form表单的方法总结

    本篇文章主要是对jquery实现ajax提交form表单的方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 方法一:  function AddHandlingFeeToRefund( ...

  5. 符号文件(.pdb)——Windows 应用程序调试必备

    最近在做项目需求过程中,时不时会遇到崩溃,总是异常中断,于是学习了windbg进行调试的一些基础,windbg在接下来文章进行更新,先介绍在windbg调试中一个重要文件(符号文件) 一.符号文件定义 ...

  6. Android ListView条目全选功能,不用checkbox实现!

    大家好,翻了翻曾经的笔记,发现了一个我特别标记的功能,那就是ListView全选功能,顿时想起了我那个时候苦逼的生涯,因为我大学机械出身,大学毕业了都不知道什么叫代码,在58干了一段销售.实在是干不下 ...

  7. fzu 1913 Easy Comparison(字符串)

    题目链接:fzu 1913 Easy Comparison 题目大意:给出一个字符串,计算与它按照字典序排序排列后的字符串有多少个位置不同. 解题思路:水体,sort一下,然后遍历一遍就好. #inc ...

  8. 网页WEB打印控件

    网页WEB打印控件制作 在WEB系统中,打印的确是比较烦人的问题,如果我们能制作一个属于自己的自定义的打印插件,那么我们在后续自定义打印的时候能随心所欲的控制打印,这样的效果对于程序员来说是非常开心的 ...

  9. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...

  10. PHP之验证码代码

    <?php session_start(); $checkcode=""; /*for($i=0;$i<4;$i++) { $checkcode.=dechex(ran ...