救命啊!!为什么还是错

alan817 2004-10-26 06:10:25
package myConnection;

import java.lang.*;
import java.sql.*;

public class connDB {

Connection conn;
ResultSet rs;
ResultSetMetaData rsmd;
Statement stmt;
//String driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//String jdbcURL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Test";
String driverName="sun.jdbc.odbc.JdbcOdbcDriver";
String jdbcURL="jdbc:odbc:Test";
String username="Alan";
String password="";


public connDB(){
conn=null;
rs=null;
rsmd=null;
stmt=null;
try{
Class.forName(driverName);
}
catch(ClassNotFoundException e){
}
}

public ResultSet execQuery(String sql){
if(sql==null){
System.out.println("查询语句不能为空。");
}
try{
conn=DriverManager.getConnection(jdbcURL,username,password);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLException eq){
}
return rs;
}

public int execUpdate(String sql){
int result=0;
try{
stmt=conn.createStatement();
stmt.executeUpdate(sql);
}
catch(SQLException eu){
}
return result;
}

public void rsClose() throws Exception{
if(rs!=null){
rs.close();
rs=null;
}
}
public void stmtClose() throws Exception{
if(stmt!=null){
stmt.close();
stmt=null;
}
}
public void connClose() throws Exception{
if(conn!=null || !conn.isClosed()){
conn.close();
conn=null;
}
}
public void closeAll() throws Exception{
rsClose();
stmtClose();
connClose();
}


}


jsp也面:
<jsp:useBean id="connDB" class="myConnection.connDB" scope="page"/>
//String sql1="update userInfo set addr='hhh' where id=1";
String sql2="select * from userInfo";
ResultSet rs=connDB.execQuery(sql2);

这样写的没提示什么错误,但是加上rs.next();就出现错误。

极度郁闷~~
请各位大侠帮帮忙呀


错误信息:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


root cause

java.lang.NullPointerException
org.apache.jsp.testSql_jsp._jspService(testSql_jsp.java:77)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


note The full stack trace of the root cause is available in the Tomcat logs.



...全文
138 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
alan817 2004-10-27
结果:
记录集为空

但是我这样写又是可以:

import java.lang.*;
import java.sql.*;
import myConnection.connDB;

public class myTest{

public static void main(String[] args){

/*这部分捕捉异常:java.lang.NullPointerException
try{
connDB conn22=new connDB();
String sql22="update userInfo set addr='桂林' where id=1";
conn22.execUpdate(sql22);
}catch(Exception ex){
System.out.println(ex);
}*/


//查询部分正常
try{

connDB conn=new connDB();
String sql="select * from userInfo";
ResultSet rs=conn.execQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("userName")+" "+rs.getString("addr"));
}
}
catch(Exception e){
System.out.println(e);
}

}

}
回复
jinannanhai79 2004-10-27
你加上代码测试一下
if(rs == null)
System.out.println("数据结果集为空");
else
{
System.out.println("数据结果集为非空");
rs.next();
System.out.println(rs.getString(0));
}
回复
zhangjensy 2004-10-27
哪裹有SQL SERVER的驅動下載?我想連接,但報驅動打不開.
回复
alan817 2004-10-27
也是不可以哦
rs.next是语法出错
回复
baointoo1980 2004-10-27
rs.next这样写试试:
if (rs.next())
{
......
}

可能是没记录
回复
alan817 2004-10-27
这里是正常的 :

import java.lang.*;
import java.sql.*;

public class myTest{


public static void main(String[] args){
try{
String driverName="sun.jdbc.odbc.JdbcOdbcDriver";
String jdbcURL="jdbc:odbc:Test";
String username="Alan";
String password="";

Class.forName(driverName);
try{
Connection conn=DriverManager.getConnection(jdbcURL,username,password);
Statement stmt=conn.createStatement();
//stmt=conn.createStatement();
//stmt.executeUpdate("update userInfo set addr='柳州' where id=1");
ResultSet rs=stmt.executeQuery("select * from userInfo");
while (rs.next()){
System.out.println(rs.getString("id")+" "+rs.getString("userName")+" "+rs.getString("sex")+" "+rs.getString("addr"));
}
}
catch(SQLException ex){
System.out.println(ex);
}

}
catch(ClassNotFoundException e){
System.out.println(e);
}
}

}
回复
jinsfree 2004-10-27
应该是rs为空才出现从的吧
回复
alan817 2004-10-27
但是我在Application里面查询、更改都可以,数据源和查询的语句都是一样的

弄不懂是什么原因一起的
回复
jinannanhai79 2004-10-27
你不<jsp:useBean id="connDB" class="myConnection.connDB" scope="page"/>
这个样子写,将需要的包都包含到jsp页面中,然后
<%
connDB conn=new connDB();
String sql="select * from userInfo";
ResultSet rs=conn.execQuery(sql);
if(rs == null)
System.out.println("数据结果集为空");
else
{
System.out.println("数据结果集为非空");
rs.next();
System.out.println(rs.getString(0));
}
%>
这个样子写一下,测试,看看能不能通过,有没有异常
回复
beikechen 2004-10-27
帮你顶
回复
ssuupvbamd 2004-10-27
楼主我跟你有同样的错误(只要涉及到取数据库的数据就会出错,好像是不能连到数据库,可是,我测试连接都是好好,一点异常都没有,),我也搞了一个星期不知道是什么原因.我也很想得到答案.
回复
snow_jin 2004-10-27
up
回复
alan817 2004-10-27
那也捕捉异常

我现在郁闷的就是在JSP页面执行不下
但是在application里面可以正常运行结果
回复
yown 2004-10-27
public ResultSet execQuery(String sql){
if(sql==null){
System.out.println("查询语句不能为空。"); //IF语句如果成立,那还是往下执行了呀
}
try{
conn=DriverManager.getConnection(jdbcURL,username,password);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLException eq){
}
return rs;
}

---这个是不是有点问题呢?

回复
alan817 2004-10-27
更新记录也可以了
更新之前少了查询

在控制台都正常
就是在jsp页面不行,返回空的记录集
回复
tutor666 2004-10-27
在bean里把异常信息写到控制台
System.out.println(eq);
回复
tutor666 2004-10-26
在查询时有异常因此rs为空,建的数据源可能有问题,或者你的查询语句。
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告