Java Web的数据库操作

三、JDBC操作数据库

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

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

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

1、 添加数据

使用PreparedStatement添加数据:

               String sql = "INSERT INTO tb_books(name,price,count,author)valuse(?,?,?,?)";

               PreparedStatement ps = conn.prepareStatement(sql);

               ps.setString(1, "西游记");

               ps.setDouble(2, 66.0);

               ps.setInt(3, 200);

               ps.setString(4, "吴承恩");

               int row = ps.executeUpdate();

               if(row > 0)

                      System.out.println("成功添加了" + row + "条数据");

使用Statement添加数据:

               String sql = "INSERT INTO tb_books(name,price,count,author)valuse(" + "西游记" + "," + 66.0 + "," + 200 + "," + "吴承恩" + ")";

               ps.close();

               Statement ps = conn.createStatement();

               int row = ps.executeUpdate(sql);

               if(row > 0)

                      System.out.println("成功添加了" + row + "条数据");

               ps.close();

2、查询数据

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

创建Book类:

package com;

public class Book {

       private int id;

       private String name;

       private double price;

       private int count;

       private String author;

       public Book(int id , String name , double price , int count , String author) {

              this.id = id;

              this.name = name;

              this.price = price;

              this.count = count;

              this.author = 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 getCount(){

              return count;

       }

       public void setCount(int count){

              this.count = count;

       }

       public String getAuthor(){

              return author;

       }

       public void setAuthor(String author){

              this.author = author;

       }

}

创建Servlet对象FindServlet:

@WebServlet("/FindServlet")

public class FindServlet extends HttpServlet {

       private static final long serialVersionUID = 1L;

    public FindServlet() {

        super();

    }

       protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

              doPost(request, response);

       }

       protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

              try {

                     Class.forName("com.mysql.jdbc.Driver");

                     String url = "jdbc:mysql://localhost:8080/db_test";

                     String username = "admin";

                     String password = "123456";

                     Connection connection = DriverManager.getConnection(url, username, password);

                     Statement statement = connection.createStatement();

                     String sql = "SELECT * FROM tb_books";

                     ResultSet rs = statement.executeQuery(sql);

                     ArrayList<Book> list = new ArrayList<Book>();

                     while (rs.next()) {

                            Book book = new Book(rs.getInt("id") , rs.getString("name") ,

                                          rs.getDouble("price") , rs.getInt("count") , rs.getString("author"));

                            list.add(book);

                     }

                     request.setAttribute("list", list);

                     rs.close();

                     statement.close();

                     connection.close();

              } catch (ClassNotFoundException e) {

                     e.printStackTrace();

              } catch (SQLException e) {

                     e.printStackTrace();

              }

              //将请求转发到book_list.jsp

              request.getRequestDispatcher("book_list.jsp").forward(request, response);

       }

}

创建book_list.jsp页面:

<body>

       <table align="center" width="450" border="2">

              <tr>

                     <td align="center" colspan="2"><h2>所有图书信息</h2></td>

              </tr>

              <tr align="center">

                     <td><b>ID</b></td>

                     <td><b>图书名称</b></td>

                     <td><b>价格</b></td>

                     <td><b>数量</b></td>

                     <td><b>作者</b></td>

              </tr>

              <%

                     //获取图书信息集合

                     ArrayList<Book> list = (ArrayList<Book>)request.getAttribute("list");

                     if(list == null || list.size() < 1)

                            out.print("没有数据!");

                     else{

                            for(Book book : list){

              %>

              <tr align="center">

                     <td><%= book.getId() %></td>

                     <td><%= book.getName() %></td>

                     <td><%= book.getPrice() %></td>

                     <td><%= book.getCount() %></td>

                     <td><%= book.getAuthor() %></td>

              </tr>

              <%

                            }

                     }

              %>

       </table>

</body>

创建index.jsp页面:

       <body>

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

       </body>

3、修改数据

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

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

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

4、删除数据

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

DELETE FROM 表 WHERE 属性=xxx

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

5、批处理

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

public int saveBatch() {

              int row = 0;

              try {

                     String sql = "INSERT INTO tb_books(id,name,price,count,anthor) VALUES(?,?,?,?,?)";

                     PreparedStatement ps = connection.prepareStatement(sql);

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

                            ps.setInt(1, i);

                            ps.setString(2, "书" + i);

                            ps.setDouble(3, i*10.5);

                            ps.setInt(4, i*20);

                            ps.setString(5, "作者" + i);

                            //添加批处理命令

                            ps.addBatch();

                     }

                     //执行批处理操作并返回计数组成的数据

                     int[] rows = ps.executeBatch();

                     row = rows.length;

                     ps.close();

                     connection.close();

              } catch (SQLException e) {

                     e.printStackTrace();

              }

              return row;

       }

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

USE [test]
GO
CREATE PROCEDURE findAllBooks
AS
BEGIN
SELECT * from tb_books
END
GO

在程序中关键代码如下:

              CallableStatement cs = connection.prepareCall("{call findAllBook()}");

              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. 搭建Windows SVN服务器及TortoiseSVN使用帮助和下载

    搭建Windows SVN服务器: 用的SVN服务器通常为外部,例如Google Code的服务器,不过,做为一个程序开发人员,就算自己一个人写程序,也应该有一个SVN版本控制系统,以便对开发代码进行 ...

  2. flex调用webservice中的datatable结果写入datagrid

    webservice配置文件 <appSettings> <add key="sqlConDuke" value="server=10.9.34.88; ...

  3. 云计算:创业的好时机——上海够快网络科技有限公司总经理蒋烁淼专访(评价阿里云的OSS的4个优点)(够快科技正式宣布已成功挂牌新三板)

    云存储是云计算目前的热点之一,Dropbox.Box等产品的风靡,公司因此获得极高估值,都印证了这一点.但云存储对技术和资金要求都比较高,竞争也非常激烈,挑战巨大.国外云存储公司有亚马逊的云平台作为支 ...

  4. 仿Google首页搜索自动补全

    仿Google自动补全,实现细节: 后台是简单的servlet(其实就是负责后台处理数据交互的,没必要非跌用个struts...什么的) 传输介质:xml 使用jQuery js框架 功能实现: 如果 ...

  5. swift 有些语法还是不支持。

    <pre name="code" class="html">"func hasAnyMatches(list: Int[], condit ...

  6. Delphi中JSon SuperObject 使用:数据集与JSON对象互转

    在delphi中,数据集是最常用数据存取方式.因此,必须建立JSON与TDataSet之间的互转关系,实现数据之间通讯与转换.值得注意的是,这只是普通的TDataset与JSON之间转换,由于CDS包 ...

  7. Silverlight技术调查(4)——完成的调查结果

    原文 Silverlight技术调查(4)——完成的调查结果 客户端使用Silverlight+DXperience,可以在线编辑各种常见文本及富文本文档(doc.docx.rtf.txt.html… ...

  8. Theano学习笔记(二)——逻辑回归函数解析

    有了前面的准备,能够用Theano实现一个逻辑回归程序.逻辑回归是典型的有监督学习. 为了形象.这里我们如果分类任务是区分人与狗的照片. 首先是生成随机数对象 importnumpy importth ...

  9. 【MongoDB】在windows平台下搭建mongodb的分片集群(二)

    在上一片博客中我们讲了Mongodb数据库中分片集群的主要原理. 在本篇博客中我们主要讲描写叙述分片集群的搭建过程.配置分片集群主要有两个步骤.第一启动全部须要的mongod和mongos进程. 第二 ...

  10. Visio中添加、移动或删除形状上的连接点的方法

    Visio中添加.移动或删除形状上的连接点的方法 利用Visio画图时,学会使用连接点能使你的画图质量和速度大幅度提高.下面在Visio2010中,以一个例子讲述如何使用连接点. 一. 准备 1. 打 ...