不好意思登陆页面有点问题,现重贴如下:
<%@ page language="java" import="java.sql.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="db" scope="page" class="my.DB"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title></title>
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<%
request.setCharacterEncoding("gb2312");
String name=request.getParameter("user_logname");
String password=request.getParameter("password");
String strcount="";
String sql="";
ResultSet rs=null;
%>
<%
sql="select * from user1 where user_logname='"+name+"' and password='"+password+"'";
rs=db.executeQuery(sql);
if(!rs.next())
{
%>
<center><h3>输入的用户名、密码错误!!!!请重新登录!!!</h3></center>
<%
rs.close();
db.close_all();
}
else{
//if(session.isNew()){
session.setAttribute("user_ID",rs.getString("user_ID"));
session.setAttribute("user_type",rs.getString("user_type"));
session.setAttribute("user_name",rs.getString("user_name"));
session.setAttribute("password",rs.getString("password"));
session.setAttribute("department",rs.getString("department"));
session.setAttribute("user_logname",rs.getString("user_logname"));
strcount=rs.getString("user_Count"); //下面是增加用户的登陆次数
if(strcount==null){
strcount="0";
}
int count=Integer.parseInt(strcount);
count++;
strcount = new Integer(count).toString();
session.setAttribute("user_Count",strcount);
String user_ID=(String)session.getAttribute("user_ID");
sql="update user1 set user_Count ='"+count+"' where user_ID='"+user_ID+"'";
db.executeUpdate(sql);
rs.close();
db.close_all();
//}
response.sendRedirect("teacher.jsp");
}
%>
</div>
</body>
</html>
<%@ page language="java" import="java.sql.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="db" scope="page" class="my.DB"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title></title>
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<%
request.setCharacterEncoding("gb2312");
String name=request.getParameter("user_logname");
String password=request.getParameter("password");
String strcount="";
String sql="";
ResultSet rs=null;
%>
<%
sql="select * from user1 where user_logname='"+name+"' and password='"+password+"'";
rs=db.executeQuery(sql);
if(!rs.next())
{
%>
<center><h3>输入的用户名、密码错误!!!!请重新登录!!!</h3></center>
<%
rs.close();
db.close_all();
}
else{
//if(session.isNew()){
session.setAttribute("user_ID",rs.getString("user_ID"));
session.setAttribute("user_type",rs.getString("user_type"));
session.setAttribute("user_name",rs.getString("user_name"));
session.setAttribute("password",rs.getString("password"));
session.setAttribute("department",rs.getString("department"));
session.setAttribute("user_logname",rs.getString("user_logname"));
strcount=rs.getString("user_Count"); //下面是增加用户的登陆次数
if(strcount==null){
strcount="0";
}
int count=Integer.parseInt(strcount);
count++;
strcount = new Integer(count).toString();
session.setAttribute("user_Count",strcount);
String user_ID=(String)session.getAttribute("user_ID");
sql="update user1 set user_Count ='"+count+"' where user_ID='"+user_ID+"'";
db.executeUpdate(sql);
rs.close();
db.close_all();
//}
response.sendRedirect("teacher.jsp");
}
%>
</div>
</body>
</html>
解决方案 »
- 运行java程序,出现错误 从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
- SSH(spring,hibernate,struts)中关于级联查询的问题?
- [虚心请教] 大家能谈谈自己的java web学习过程吗 我现在学的很痛苦
- 留言板内容 显示排版格式
- tomcat运行jsp问题!
- 怎么把路径下的图片文件 与 数据库 连系(接)起来???高分求方法!!都进来看看.
- servlet的稳定性问题
- 请问各位如何在jsp或在java中哪个函数可以进行字符的替换?
- MVC里,模式层M是神马东东?????????????????????????????????????
- 为什么我在jsp中只是把访问数据库的javabean的scope从page改成session, 就会出现"关闭的语句"异常?
- 紧急求救....关于数据库中的数据自动删除的问题
- (www.china-it.org)一个IT技术社区,欢迎大家的光临,让我们一起学习,一起进步!顶者有分!
数据库的 游标 ( 对应到 ResultSet ) ,所以数据库会表示反抗。Oracle 的错误消息可能更容易看懂:中文的是 : 用尽的 ResultSet.
1.我的那个javabean的结构是不是正确的?一般对数据库访问的javabean是如何写?
2.由于我在javabean中获取记录集的时候已经用到了try{}catch{}finally{}结构,难道在jsp中使用javabean的时候也要用到此结构?
可能我的问题的原因正如你所说的那样,但是你那种情况也应该在异常情况出现的时候发生,为什么实际中是正常访问的时候也遇到呢?
还请多多指教,谢谢!
public ResultSet executeQuery(String sql) throws Exception {
rs = null;
try {
Context initCtx = new javax.naming.InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/bn");
con = ds.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
}
catch (SQLException e) {throw e; }
catch (NamingException e) {throw e; }
finally{ // 关键,你的代码没有这个,任何时候都应该确保关了,正常还是不正常。
有错误应该写日志,不要再抛,如果是更新就先回滚,到这里了有错误几乎都是不可恢复的错误,你的事情已经干完了,剩下的是没有办法完成的。
if ( rs!=null )try{ rs.close();catch(Exception e){ // 写日志}
if ( conn !=null )try{ conn .close();catch(Exception e){ // 写日志}
}
return rs;
}2. 你的代码 ,SQLException 没有人处理,所以 JSP 一定要处理(清理因异常而没有关闭释放的资源), Servlet 正在执行时,用户在 IE 中 按了 Esc 或其他网络故障,服务器依然会继续执行完,但是这个错误用户浏览器断开了连接所以没有看到 500, 如果服务器也没有打印日志那么就没有人亲眼看到这个错误曾经发生过。
错了
不要返回ResultSet,返回A的集合就行了
请高手指点!谢谢
this.database = "jnpc";
}
/**
* 从连接池中返回一个数据库连接
* @return
*/
public static Connection getConnection() {
Connection connection = null;
try {
InitialContext initContext = new InitialContext();
String strDataSourceName = "jdbc/"+database;
DataSource dsOracle = (DataSource)initContext.lookup(strDataSourceName);
connection = dsOracle.getConnection();
} catch(Exception e) {
System.out.println("xzsfw:Oracle.java-->getConnection:" + e.getMessage());
}
return connection;
}/**
* 完成数据库的增删改操作,要求传入的sql语句必须为insert,update或delete
* 有返回值,-1表示操作不成功,0表示没有更新行,正整数代表更新的行数
* @param sql
*/
public int update(String sql) {
Connection conn = getConnection();
Statement stmt = null;
int result = 0;
try {
stmt = conn.createStatement();
conn.setAutoCommit(false);
result = stmt.executeUpdate(sql);
stmt.close();
conn.commit();
conn.setAutoCommit(true);
conn.close();
return result;
} catch(SQLException e1) {
System.out.println("xzsfw:Oracle.java-->update(String sql" + sql+") e1:" + e1.getMessage());
try{
conn.rollback();
conn.setAutoCommit(true);
return -1;
} catch(SQLException e2) {
System.out.println("xzsfw:Oracle.java-->update(rollback) e2:" + e2.getMessage());
return -1;
}
} finally {
this.disconnect(stmt, conn);
}
}/**
* 返回多行多列查询结果
* @param sql
* @param colArr
* @return
*/
public String[][] getMultiRowMultiCol(String sql) {
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;
Vector v = new Vector();
int colCount=0;
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
colCount=rsmd.getColumnCount();
while (rs.next()) {
String[] arr = new String[colCount];
for (int i = 0; i < colCount; i++) {
arr[i] = rs.getString(i+1);
}
v.addElement(arr);
}
} catch(Exception e) {
System.out.println("Oracle.java-->getMultiRowMultiCol:" + e.getMessage());
} finally {
this.disconnect(rs, stmt, conn);
}
return this.cvtVtrToArr(v, colCount);
}
/**
* 将Vector转换为一个二维数组
* @param v
* @param colCount
* @return
*/
public String[][] cvtVtrToArr(Vector v, int colCount) {
Object[] obj = v.toArray();
int rowCount = obj.length;
String[][] arr = new String[rowCount][colCount];
for (int i = 0; i < rowCount; i++) {
arr[i] = (String[])obj[i];
}
return arr;
}供参考
ResultSetMetaData rsmd = rs.getMetaData();
colCount=rsmd.getColumnCount();
while (rs.next()) {
String[] arr = new String[colCount];
for (int i = 0; i < colCount; i++) {
arr[i] = rs.getString(i+1);
}
获取数据库表的内容确实不错,不过用ArrayList可能更好一点,不用再进行下面的转二维数组!
另外问一个关于try{}catch{}finally{}结构的问题:
在finally{}中关闭记录集,连接的时候也要用到try{}catch{}结构,那么是否还需要finally呢?如果关闭失败的话,还是会存在资源关闭不了的情况?如果有finally的话,那么这个结构可能就会没止境了!不知我的说法是否正确?请指点!
另外各位在jsp中用javabean的时候的scope用的是什么?page还是session?