Java Web----Java Web的数据库操作(二)
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的数据库操作(二)的更多相关文章
- Java通过JDBC 进行MySQL数据库操作
转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...
- Java常用工具类之数据库操作辅助类DBUtil.java
package com.qushida.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.be ...
- java之Hibernate框架实现数据库操作
之前我们用一个java类连接MySQL数据库实现了数据库的增删改查操作---------MySQL篇: 但是数据库种类之多,除了MySQL,还有Access.Oracle.DB2等等,而且每种数据库语 ...
- Java/C++实现模板方法模式---数据库操作
对数据库的操作一般包括连接.打开.使用.关闭等步骤,在数据库操作模板类中我们定义了connDB().openDB().useDB().closeDB()四个方法分别对应这四个步骤.对于不同类型的数据库 ...
- Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作
在Java中对Oracle数据库的操作分为两种:一.查询.二.非查询. 下面是我对其进行总结: 一.查询数据 /** * 根据用户代码查询 * @param userId * @return 如果存在 ...
- ThinkPHP 数据库操作(二) : 增删改查
基本使用 可以直接使用数据库运行原生SQL操作了,支持 query (查询操作)和 execute (写入操作)方法,并且支持参数绑定. Db::query('select * from think_ ...
- Java Web的数据库操作(一)
一.JDBC技术 1.JDBC简介 JDBC是Java程序与数据库系统通信的标准API,它定义在JDK的API中,通过JDBC技术,Java程序可以非常方便地与各种数据库交互,JDBC在Java程序与 ...
- Java Web----Java Web的数据库操作(三)
Java Web的数据库操作 前面介绍了JDBC技术和JDBC API及API的使用示例,下面详细介绍JDBC在Web中的应用. Java Web----Java Web的数据库操作(一) Java ...
- PHP-Phalcon框架中的数据库操作
> 本文描述了PHP-Phalcon框架中数据库操作方法,主要讨论Phalcon框架的Model组件中的操作方法.更详细的Model介绍请参考:官方文档 1. 连接数据库 在Phalcon框架中 ...
随机推荐
- Java基础05 实施接口
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在封装与接口中,private关键字封装了对象的内部成员.经过封装,产品隐藏了内部 ...
- openstack ovs-gre 网速慢解决方案
Hint: if you want to check if this answer will solve your issue, execute ifconfig eth0 mtu 1400 on t ...
- php连接oracle及简单操作
使你的php支持oracle,按照以下步骤即可: 1.安装php环境,找一下appserv或者xampp,一键安装,很方便 2.把php的ext目录下的php_oci8.dll拷到system32目录 ...
- ARM过程调用标准---APCS简单介绍
介绍 APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程能够与其它例程交织在一起.最显著的一点是对这些例程来自哪里没有 ...
- [置顶] Android框架攻击之Fragment注入
为了适应越来越大的设备屏幕,Android在3.X后引入了Fragment概念,作用是可以在一个屏幕上同时显示多个Activity,以达到充分利用屏幕的目的.关于Fragment的使用说明,可以阅读& ...
- Python全栈开发
Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“ ...
- Swift - 跑酷游戏开发(SpriteKit游戏开发)
一,下面演示了如何开发一个跑酷游戏,实现的功能如下: 1,平台工厂会不断地生成平台,并且向左移动.当平台移出游戏场景时就可将其移除. 2,生成的平台宽度随机,高度随机.同时短平台踩踏的时候会下落. 3 ...
- Swift - 使用TableView的静态单元格进行页面布局
通过使用静态单元格的列表,我们可以很方便的进行页面布局.下面通过一个“添加任务页面”来进行演示. 效果图如下: 实现步骤: 1,在storyboard中拖入一个TableViewController, ...
- Logistic Regression(逻辑回归)(二)—深入理解
(整理自AndrewNG的课件,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 上一篇讲解了Logistic Regression的基础知识,感觉 ...
- delphi之完美Splash方案(在TfrmMain.FormCreate里不断调用TfrmSplash显示加载进度文字,并且及时Update显示)
前言:网上有很多介绍delphi创建闪屏的代码,大多只是在程序开启前显示一个闪屏,但是却没有说如何在闪屏上显示程序加载的进度,于是笔者有意思介绍一下这种闪屏方式. 1.创建一个窗体(TfrmSplas ...