读书人

数据库连接有关问题,哪位大哥给小弟看

发布时间: 2012-01-12 22:11:58 作者: rapoo

数据库连接问题,哪位大哥给小弟看看.
package pakejiaoyi;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;

public class Servlet2 extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK ";

//Initialize global variables
public void init() throws ServletException {
}

//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
String name=request.getParameter( "name ");//获取用户名
String num=request.getParameter( "text1 ");//获取购买书籍的数量

try {
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");
} catch (ClassNotFoundException ex) {
out.println( "加载错误 ");

}
String url= "jdbc:odbc:text ";
String ursename= "sa ";
String paw= " ";
Connection con=null;
Statement s=null;
PreparedStatement st=null;
ResultSet rs=null;

try {
con = DriverManager.getConnection(url, ursename, paw);
//取消自动提交
con.setAutoCommit(false);


s=con.createStatement();
//获取ID为1的书籍
rs=s.executeQuery( "select*from book where id= '1 ' ");
rs.next();
//获取该书籍的库存数量
int number=rs.getInt(3);
//获取该书籍的金额
float manei=rs.getFloat(4);
//将用户填写书籍数量转换为整型
int num1=Integer.parseInt(num);
//判断库存书籍数量是否大于用户购买数量
if(number> =num1){
//如果是更新数据库书籍数量
st=con.prepareStatement( "update book set booknum=? where id=3 ");
st.setInt(1,number-num1);
st.executeUpdate();
}
else
{
//如果库存书籍数量小于用户购买数量,提示库存不足
out.println( "你所购的图书数量不足! ");


return;
}
//获取用户余额
st=con.prepareStatement( "select jine from name1 where username=? ");
st.setString(1,name);
st.executeQuery();

rs.next();
out.println( "0 ");
float namejin=rs.getFloat(1);//得到用户的余额,这句有错,后面的2输不出来
out.println( "2 ");
float zong=manei*num1;//得数书籍的总金额
out.println( "1 ");
//判断用户金额是否大于购书的总金额
if(namejin> =zong){
//如果是更新数据库
st=con.prepareStatement( "update name1 set jine=? where name=? ");
out.println( "word ");
st.setFloat(1,namejin-zong);
st.setString(2,name);


st.executeQuery();
out.println( "hello ");

}
else
{
//否则调用rollback()自动回滚,提示金额不足,
con.rollback();
out.println( "您的金额不足 ");
return;
}
//如果更新数据库成功,调用commit()方法提交
con.commit();
out.println( "交易成功 ");

} catch (SQLException ex1) {
out.println( "连接错误 ");
try {
//如果发生异常,自动回滚
con.rollback();
} catch (SQLException ex2) {


}
}

}

//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}

//Clean up resources
public void destroy() {
}
}



[解决办法]
1.你的程序写的太乱了,
2,你能不能把显示的错误发出来
3,我的猜测是有可能rs那儿出错了,因为在一个连接通道里,只能有一个rs可以使用,而你先前用了一次rs 而后再用,可能是取出的数据没有把以前的数据给复盖掉,
4,另一个猜测是,你的rs是不是少了循环啊,

[解决办法]
rs=s.executeQuery( "select*from book where id= '1 ' ");
rs.next();
//获取该书籍的库存数量
int number=rs.getInt(3);
//获取该书籍的金额
float manei=rs.getFloat(4);
//将用户填写书籍数量转换为整型
int num1=Integer.parseInt(num);
//判断库存书籍数量是否大于用户购买数量
if(number> =num1){
//如果是更新数据库书籍数量
st=con.prepareStatement( "update book set booknum=? where id=3 ");


你怎么查找id=1的 更新id=3的
[解决办法]
楼主的rs=s.executeQuery( "select*from book where id= '1 ' ");中
select和*和from应该有空格吧 不知道是不是笔误
支持dr_lou()的观点
[解决办法]
st=con.prepareStatement( "select jine from name1 where username=? ");
st.setString(1,name);
st.executeQuery(); // 改成:ResultSet newRs = st.executeQuery();

rs.next(); // 这边的rs仍然是你上面所获得的id 为1的rs.
// 改成 newRs,next();
out.println( "0 ");
float namejin=rs.getFloat(1);//得到用户的余额,这句有错,后面的2输不出来 // float namejin=newRs.getFloat(1);
out.println( "2 ");

------------------------------------
不知道是不是,你的代码有点看不明白。好乱

[解决办法]
xwt630() ( ) 信誉:100 Blog 2007-2-5 19:48:38 得分: 0



1.你的程序写的太乱了,
2,你能不能把显示的错误发出来
3,我的猜测是有可能rs那儿出错了,因为在一个连接通道里,只能有一个rs可以使用,而你先前用了一次rs 而后再用,可能是取出的数据没有把以前的数据给复盖掉,
4,另一个猜测是,你的rs是不是少了循环啊,

---------------------------------



读书人网 >Java Web开发

热点推荐