Java web开发详解读书笔记-第八章数据库访问
来源:互联网 发布:淘宝详情页图片超链接 编辑:程序博客网 时间:2024/05/16 06:19
一、这是书中第八章有关事物处理的一个例子。例子用有两个表,一个存储的是用户信息,另外一个存储的是图书信息。下面简要介绍这个程序的思路。
1.获取request请求中的用户信息--用户id和用户账户余额。
2.判断用户id和用户账户余额是否为空。如果为空则打印出错误信息。
3.如果用户id和用户账户余额不为空,将AutoComit设置为false。并从数据库中查询图书库存和单价。
4.将从request中得到的购买数量转化为整数。
5.判断购买数量是否大于库存数量,如果大于库存数量,则更新数据库,如果小于库存数量则打印出错误信息。
6.获取用户金额。
7.判断用户金额是否大于图书总价,如果大于则更新用户剩余金额,如果小于则打印出错误信息。
8.将上述操作提交到数据库。
二、书中的代码如下
package com.test.wayne;
import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
import java.sql.*;
public class TradeServlet extends HttpServlet
{
private String url;
private String user;
private String password;
public void init() throws ServletException
{
ServletContext sc=getServletContext();
String driverClass=sc.getInitParameter("driverClass");
url=sc.getInitParameter("url");
user=sc.getInitParameter("user");
password=sc.getInitParameter("password");
try
{
Class.forName(driverClass);
}
catch(ClassNotFoundException ce)
{
throw new UnavailableException("加载数据库驱动失败!");
}
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException
{
Connection conn=null;
Statement stmt=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
resp.setContentType("text/html;charset=gb2312");
PrintWriter out=resp.getWriter();
req.setCharacterEncoding("gb2312");
String userid=req.getParameter("userid");//获取用户名id
String quantity=req.getParameter("quantity");//用户的余额
if(null==userid || userid.equals("") || //判断用户id和余额是否为空
null==quantity || quantity.equals(""))
{
out.println("错误的请求参数");
out.close();
}
else
{
try
{
conn=DriverManager.getConnection(url,user,password);
conn.setAutoCommit(false);//将自动提交设置为false
stmt=conn.createStatement();
rs=stmt.executeQuery("select price,amount from bookinfo where id=3");
rs.next();
float price=rs.getFloat(1);//获取图书价格
int amount=rs.getInt(2);//获取图书数量
int num=Integer.parseInt(quantity);//将从request中得到的购买数量转化为整数。
if(amount>=num)//判断购买数量是否大于库存数量
{
pstmt=conn.prepareStatement("update bookinfo set amount = ? where id = 3");
pstmt.setInt(1,amount-num);//更新库存数量
pstmt.executeUpdate();
}
else
{
out.println("您所购买的图书库存数量不足。");
out.close();
return;
}
pstmt=conn.prepareStatement("select balance from account where userid = ?");//获取用户金额
pstmt.setString(1,userid);
rs=pstmt.executeQuery();
rs.next();
float balance=rs.getFloat(1);
float totalPrice=price*num;//计算图书总价
if(balance>=totalPrice)//判断用户金额是否大于图书总价
{
pstmt=conn.prepareStatement("update account set balance = ? where userid = ?");//更新用户剩余金额
pstmt.setFloat(1,balance-totalPrice);
pstmt.setString(2,userid);
pstmt.executeUpdate();
}
else
{
conn.rollback();
out.println("您的余额不足。");
out.close();
return;
}
conn.commit();
out.println("交易成功!");
out.close();
}
catch(SQLException se)
{
if(conn!=null)
{
try
{
conn.rollback();
}
catch(SQLException sex)
{
sex.printStackTrace();
}
}
se.printStackTrace();
}
finally
{
if(rs!=null)
{
try
{
rs.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
rs=null;
}
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
stmt=null;
}
if(pstmt!=null)
{
try
{
pstmt.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
pstmt=null;
}
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
conn=null;
}
}
}
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException
{
doGet(req,resp);
}
}
三、总结:
写程序就像是写作文,思路很重要,在写之前脑子里应该有个关于这个程序运行的大概过程,在程序执行的过程中要分几部分,每一部分下面又包含几个情况,从整天上对程序有个了解,然后再从细节上对程序进行完善,最后进行测试。本来想把思路部分弄成一个思维导图的,但是忘了图怎么画了,等查完资料再弄图吧。
- Java web开发详解读书笔记-第八章数据库访问
- 《大话Java:从零基础到数据库,Web开发》读书笔记
- java Web访问数据库
- 《Flask Web开发》读书笔记(5)第5章数据库(关键词:Web开发/Flask/数据库)
- FKJAVA读书笔记--第八章--JAVA集合
- java编程思想读书笔记----第八章 多态
- Java编程思想 第八章读书笔记-多态
- Java疯狂讲义读书笔记第八章
- Java Web开发详解
- java访问MySQL数据库详解
- 《flask web开发》第八章 用户认证
- PHP和MySQL Web开发读书笔记---创建Web数据库
- TCP/IP详解卷1 读书笔记:第八章 Traceroute程序
- CSAPP第八章:读书笔记
- 《Android开发艺术探索第八章读书笔记》-Window和WindowManager
- 第八章 Eclipse中的Hibernate数据库开发
- Java web访问MySql数据库分页查询
- Java Web中如何访问数据库
- C#构造函数在继承过程中的执行顺序
- 堆和栈的区别 4
- C#继承的特性
- 堆和栈的区别 5
- C#继承与构造函数的调用
- Java web开发详解读书笔记-第八章数据库访问
- C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?
- Introduction to XML and XML With Java
- PKG_CONFIG_PATH 的使用
- 默认构造函数的作用(“A”方法没有采用“0”个参数的重载。)
- 22+1条经典的编程引言
- asp.net 将EXCEL表格数据导入到SQL Server数据库
- C#继承中访问修饰符的区别
- 积极学习辩证唯物主义的立场和方法