jsp通过JavaBean访问数据库, 只能向数据库里面插入数据, 查询数据的时候 ResultSet rs=executeQuery(sql);
if(rs.next()) 却不能读出数据, 而且是抛出异常 经过调试发现是因为用了 rs.next() 才出错的 高手们帮帮忙, 是怎么回事啊?????????????
if(rs.next()) 却不能读出数据, 而且是抛出异常 经过调试发现是因为用了 rs.next() 才出错的 高手们帮帮忙, 是怎么回事啊?????????????
{System.out.print(ex);
}
这样多调试下!!!
最好在加个try..catch..捕捉下异常
多打印些语句
在把你的sql语句打印出来
我都是这么调试的
ResultSet rs=(ResultSet)db.executeQuery(sql);
if(rs.next())
{
String priority=rs.getString("user_priority");
session.setAttribute("username", name);
session.setAttribute("userpsw", psw);
session.setAttribute("userid", rs.getString("user_id"));
session.setAttribute("userpriority", priority);
response.sendRedirect("list.jsp");
}
else
{
session.setAttribute("error", "2");
response.sendRedirect("error.jsp");
}
}
catch(Exception e)
{
session.setAttribute("error", "3");
response.sendRedirect("error.jsp");
e.printStackTrace();
}
正常情况:如果rs.next()为空的话 应该是执行else语句啊 但是它却是抛出异常的 所以我觉得是rs.next()出了问题, 请高手指正
{
String sql="select * from YHGL_TABLE where USER_NAME='"+name+"'and USER_PSW='"+psw+"'";
ResultSet rs=(ResultSet)db.executeQuery(sql);
if(rs.next())
{
String priority=rs.getString("user_priority");
session.setAttribute("username", name);
session.setAttribute("userpsw", psw);
session.setAttribute("userid", rs.getString("user_id"));
session.setAttribute("userpriority", priority);
response.sendRedirect("list.jsp");
}
else
{
session.setAttribute("error", "2");
response.sendRedirect("error.jsp");
}
}
catch(Exception e)
{
//session.setAttribute("error", "3");
response.sendRedirect("error.jsp");
e.printStackTrace();
}
}
上面忘了些代码 不好意思
rs=(ResultSet)db.executeQuery(sql);
if(rs.next()即使是null也不会报错
错误: description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
如果是的话,你的代码是有问题的。
if(rs.next){
}else{}用这个来判断?这当然不正确了。
把你的查询代码贴出来 看看。
这里面,你要明确整个流程
name,pwd从页面获得的吧。看你代码里,可是没有的哦。
String name = request.getParameter("name");
从页面中取得name的值,然后和你数据库中的进行对比,用这个来判断if(){}else{}
<%@page language="java" contentType="text/html; charset=gb2312" import="java.sql.*"%>
<jsp:useBean id="db" class="yhgl.connectDB"/>
<%
String name= request.getParameter("username");
String psw= request.getParameter("password");
if(name==null|| psw==null||name.equals("")||psw.equals(""))
{
session.setAttribute("error", "1");
response.sendRedirect("error.jsp");
}
else
{
try
{
ResultSet rs=null; String sql="select * from YHGL_TABLE where USER_NAME='"+"xiangjiao"+"'and USER_PSW='"+"235011"+"'";
rs=(ResultSet)db.executeQuery(sql);
if(rs.next())
{
String priority=rs.getString("user_priority");
session.setAttribute("username", name);
session.setAttribute("userpsw", psw);
session.setAttribute("userid", rs.getString("user_id"));
session.setAttribute("userpriority", priority);
response.sendRedirect("list.jsp");
}
else
{
session.setAttribute("error", "2");
response.sendRedirect("error.jsp");
}
}
catch(Exception e)
{
session.setAttribute("error", "3");
response.sendRedirect("error.jsp");
e.printStackTrace();
}
}
%>正常情况:如果rs.next()为空的话 应该是执行else语句啊 但是它却是抛出异常的 所以我觉得是rs.next()出了问题, 请高手指正
(ResultSet)db.executeQuery(sql)
你应该检查下
<jsp:useBean id="db" class="yhgl.connectDB"/> 里面是不是有问题了。
单纯的rs。next应该不会有问题
package yhgl;
import java.sql.*;
public class connectDB
{
String DBDriver="oracle.jdbc.driver.OracleDriver";
String DBUrl="jdbc:oracle:thin:@localhost:1521:oracle";
String DBUser="linqin";
String DBPsw="235011";
Connection conn=null;
PreparedStatement stmt=null;
public connectDB()
{
try
{
Class.forName(DBDriver);
conn=DriverManager.getConnection(DBUrl, DBUser, DBPsw);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public ResultSet executeQuery(String sql) throws Exception
{
try
{
this.stmt=null;
this.stmt=conn.prepareStatement(sql);
return this.stmt.executeQuery();
}
catch(SQLException e)
{
e.printStackTrace();
return null;
}
}
public int executeUpdate(String sql) throws Exception
{
try
{
this.stmt=null;
this.stmt=conn.prepareStatement(sql);
return this.stmt.executeUpdate();
}
catch(SQLException e)
{
e.printStackTrace();
return 0;
}
}
public void closeDB()
{
try
{
conn.close();
stmt.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
private static Connection conn; private static Statement stat; private static ResultSet rs;
// mysql连接
public DBCon() {
PreparedStatement stmt=null;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:oracle";
String user = "linqin";
String password = "235011";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
System.out.println("连接成功");
} catch (ClassNotFoundException e) {
e.getMessage();
e.printStackTrace();
} catch (SQLException e) {
e.getMessage();
e.printStackTrace();
}
} //根据sql查询得到结果集
public ResultSet select(String sql) {
try {
rs = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
} catch (SQLException e) {
e.getMessage();
e.printStackTrace();
}
return rs;
} //根据sql查询条件判断是否存在
public boolean selectDb(String sql){
boolean boo = false;
try {
rs = conn.createStatement().executeQuery(sql);
boo=rs.next();
} catch (SQLException e) {
e.getMessage();
e.printStackTrace();
}
return boo;
} //修改或删除数据
public int update(String sql) throws SQLException {
int rs = conn.createStatement().executeUpdate(sql);
return rs;
} //插入数据
public boolean insert(String sql) throws SQLException {
stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
try {
stat.executeUpdate(sql);
} catch (Exception e) {
e.getMessage();
e.printStackTrace();
}
return true;
} //关闭
public void close() {
try {
if (rs != null)
rs.close();
if (stat != null)
stat.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String args[])
{
DBCon db=new DBCon();
}}直接用这个。
查询时调用select
<jsp:useBean id="db" class="yhgl.connectDB"/>
<%
String name= request.getParameter("username");
String psw= request.getParameter("password");
if(name==null|| psw==null||name.equals("")||psw.equals(""))
{
session.setAttribute("error", "1");
response.sendRedirect("error.jsp");
}
else
{
String sql = String sql="select * from YHGL_TABLE where USER_NAME='"+"xiangjiao"+"'and USER_PSW='"+"235011"+"'";
ResultSet rs = con.select(sql);
try {
while(rs.next()){
String priority=rs.getString("user_priority");
session.setAttribute("username", name);
session.setAttribute("userpsw", psw);
session.setAttribute("userid", rs.getString("user_id"));
session.setAttribute("userpriority", priority);
response.sendRedirect("list.jsp");
}
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
%>
验证user,pwd如果和数据库中一致,就跳转一个页面,不一致就跳转到error页面就可以了。
public void testQuery1(){
try{
ConnectDB db = new ConnectDB();
ResultSet rs=null; String sql="select * from YHGL_TABLE where USER_NAME='"+"xiangjiao"+"'and USER_PSW='"+"235011"+"'"; rs=(ResultSet)db.executeQuery(sql); if(rs.next())
{
String priority=rs.getString("USER_NAME");
System.out.println(priority);
}
else
{
System.out.println("--------error-------");
}
}
catch(Exception e)
{
e.printStackTrace();
} }
在我的机上你的程序没有出错~~~