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. 一个必用的javascript框架:underscore.js - wine的思考 - ITeye技术网站

    AngularJS+JqueryMobile+PhoneGap 打造APP « Dogeek AngularJS+JqueryMobile+PhoneGap 打造APP

  2. MFC网页访问的实现示例

    本示例使用MFC 类CInternetSession 建立连接,使用 CHttpFile读取内容. 首先,建立一个MFC对话框项目,界面如下: 1. 添加头文件: #include <afxin ...

  3. Jetty总览

    Jetty入门 基本功能介绍 配置概览-怎么配置Jetty 配置概览-须要配置什么 Jetty配置 部署到Jetty 配置上下文 配置连接器 配置安全 配置JSP支持 Jetty管理指导 启动Jett ...

  4. Java 异常解决之java.lang.IllegalArgumentException: Comparison method violates its general contract!

    Java 异常解决 在你的代码前加一句 System.setProperty("java.util.Arrays.useLegacyMergeSort", "true&q ...

  5. tomcat 后台启动设置

    如果你环境变量配置对了且保证tomcat的bin目录下有如下三个文件,则你只需在cmd中运行 service install tomcat即可将tomcat添加的服务项中,然后在设置开机自动启动,则以 ...

  6. (5/9)*(f-32)与5*(f-32)/9

    今天在Linux下用c语言写个小程序玩玩,主要就是根据华氏温度计算摄氏温度.公式是:摄氏度=(5/9)*(华氏度-32) 代码很简单~ #include<stdio.h> main() { ...

  7. 为什么java源文件中只允许一个public类存在

    1.提出问题 为什么java源文件中只允许一个public类存在? 2.分析问题 问题涉及到的条件:源文件的名字    public类     main方法 一般我们在编写一个源文件的时候: 一个pu ...

  8. TWinControl.DefaultHandler处理WM_CTLCOLORMSGBOX..WM_CTLCOLORSTATIC消息的两个参数很有意思,两个都是传递句柄

    procedure TWinControl.DefaultHandler(var Message); begin then begin with TMessage(Message) do begin ...

  9. Complete Guide for Spring Boot Actuator

    You are here to learn about Spring Boot Actuator for collecting metrics about your production grade ...

  10. jquery动态改变背景颜色插件

    GETHUB下载地址 背景颜色用animate方法时时无法改变颜色的 所以要使用插件进行补充. 用法: <!DOCTYPE html> <html> <head> ...