站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题初学JSP,运行时出错,请大哥大姐指点!!

初学JSP,运行时出错,请大哥大姐指点!!

摘要: 初学JSP,运行时出错,请大哥大姐指点!!


我做了一个JSP页面,里面有连接数据库的语句,也有列出数据的语句,能实现,也好使了!
但我现在想把连接数据库及列数据的语句做成JAVABEAN,在JSP页面中调这个BEAN,可是运行就出错。请指点。
这个是BEAN
package news;
import java.sql.*;
public class sql_data
{
String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
String user="sa";
String password="396330100";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
public sql_data()
{
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("sql_data()" + e.getMessage());
}
}
public void executeInsert(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeUpdate:"+ex.getMessage());
}
}
public ResultSet executeQuery(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("sql_data.executeQuery:"+ex.getMessage());
}
return rs;
}
public void executeUpdate(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery"+ex.getMessage());
}
}
public void executeDelete(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeDelete:"+ex.getMessage());
}
}
public void closestmt()
{
try
{
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public void closeConn()
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}


下面是JSP页面

<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>


<body>
<% //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
// pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
rs=sqlbean.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________

<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|

<% } %>
<% out.print("数据库操作成功,恭喜你556677"); %>


<%
//rs.close();
//stmt.close();
//conn.close();
%>
</body>




初错提示,我也贴出来:
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:370)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NullPointerException
org.apache.jsp.sql_005ftest_jsp._jspService(org.apache.jsp.sql_005ftest_jsp:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs



急死了,为什么没有人帮我呀?求求你们了!!


try:

在rs=sqlbean.executeQuery(sql);
前调用你的数据库驱动加载方法:sql_data()

也就是:
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sql_data();
rs=sqlbean.executeQuery(sql);


javabean不是你这样用的,要这样用


看错了,丢人了,呵呵


不过你为啥不把 <% //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
// pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
rs=sqlbean.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________

<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|

<% } %>
<% out.print("数据库操作成功,恭喜你556677"); %>


<%
//rs.close();
//stmt.close();
//conn.close();
%>
这一部分也放到java类中?


kingxin130() 正解,没加载驱动


我学JSP毕业后,连去做网站都没有人要,只好去跟外国人混erp二次开发了。真惨!


kingxin130() ( ) 信誉:100 Blog 2006-09-02 10:38:00 得分: 0


try:

在rs=sqlbean.executeQuery(sql);
前调用你的数据库驱动加载方法:sql_data()

也就是:
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sql_data();
rs=sqlbean.executeQuery(sql);


sql_data()
它不是个构造方法吗?也需要执行吗?我是初学,请指点!


大哥,还是不对啊,出错提示变了:
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 8 in the jsp file: /sql_test.jsp
Generated servlet error:
Syntax error, insert ";" to complete Statement


org.apache.jasper.JasperException: Unable to compile class for JSP //jsp编译出错


An error occurred at line: 8 in the jsp file: /sql_test.jsp //第8行有问题
Generated servlet error:
Syntax error, insert ";" to complete Statement //缺少";"





看你贴出来的代码 在叶面上好像没有调用bean 呢


不对啊,大哥
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 8 in the jsp file: /sql_test.jsp
Generated servlet error:
The method sql_data() is undefined for the type sql_data

我加上分号了,就提法没有找到这个方法?
我写sqlbean.之后也没有提示我有这个方法啊?


javabean用的不多,我的用法是:
bean里全是些setXXX()和getXXX()方法

jsp页面就可以使用< %= beanName.getXXX() %>方法
以及< % beanName.setXXX(xx xx) %>方法

你上面的用法感觉就是调用一个普通的java类
如果不想改java类
可以把jsp页面中的
一行改成:
<%@page import="news.sql_data"%>
然后用sql_data sd = new sql_data();
语句来加载驱动

String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
rs=sd.executeQuery(sql);
while(rs.next()) { %>
...





这句不就是调用BEAN吗?

能帮忙测试一下我的代码,我的代码都是完整的代码

谢谢了!


TO :kingxin130() ( )
用你的方法也不行啊
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 10 in the jsp file: /sql_test.jsp
Generated servlet error:
sd cannot be resolved

An error occurred at line: 10 in the jsp file: /sql_test.jsp
Generated servlet error:
sd cannot be resolved



sql_data sd = new sql_data();
这句写了吗,写了就不应该
"sd cannot be resolved"了


写了!!
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<%@ page language="java" import="news.sql_data"%>
sql_data sd = new sql_data();


<body>
<%
//Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
//pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sd.sql_data();
rs=sd.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________

<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|

<% } %>
<% out.print("数据库操作成功,恭喜你556677888"); %>


<%
//rs.close();
//stmt.close();
//conn.close();
%>
</body>




我把sql_data.class文件放到WEB-INF/classes/news 没有错吧?


我的想法是把 sql语句写到一个listBean.java里面 数据结果放到另外一个dataBean.java里面

jsp界面只是给参数给listBean.java产生对,结果放到dataBean.java产生对象里面,然后jsp界面返回结果,这样容易管理 把所有的对数据库操作都放到java里面

不知道有什么错误 望指出


handerz_cn() ( ) 信誉:100 Blog 2006-09-02 11:47:00 得分: 0


我的想法是把 sql语句写到一个listBean.java里面 数据结果放到另外一个dataBean.java里面

jsp界面只是给参数给listBean.java产生对,结果放到dataBean.java产生对象里面,然后jsp界面返回结果,这样容易管理 把所有的对数据库操作都放到java里面

不知道有什么错误 望指出


大哥,也许你做的对,但对我来说挺难的,我也不会啊!

我就想把目前的弄明白,一点点的学!
我觉得我目前的这两个东西挺简单的,我也能理解,就是不好使?郁闷!!!



写了!!
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<%@ page language="java" import="news.sql_data"%>
sql_data sd = new sql_data();


<body>
<%
//Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
//pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sd.sql_data();
rs=sd.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________

<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|

<% } %>
<% out.print("数据库操作成功,恭喜你556677888"); %>


<%
//rs.close();
//stmt.close();
//conn.close();
%>
</body>




sql_data sd = new sql_data(); 是java代码,

写到<% %>里试试


还有:

sd.sql_data();

去掉



我学JSP毕业后,连去做网站都没有人要,只好去跟外国人混erp二次开发了。真惨!
是不是哟,
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>


<%@ page language="java" import="news.*"%>
不是用jsp:useBean



<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<%@ page language="java" import="news.sql_data"%>



<body>
<%
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
//sd.sql_data();
sql_data sd = new sql_data();
rs=sd.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________

<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|

<% } %>
<% out.print("数据库操作成功,恭喜你556677888"); %>
</body>



还是不对啊

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NullPointerException
org.apache.jsp.sql_005ftest_jsp._jspService(org.apache.jsp.sql_005ftest_jsp:62)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)




rs=sqlbean.executeQuery(sql);
while(rs.next()) { %>

while语句前要判断rs是否是null吧,改成while(rs!=null && rs.next())试试看


哎,哪位大可能解决我的问题,立即给分!!
顶上去!!


兄弟,我把你的代码copy过来。试了一下完全问题!!!


本人也是初学,调试了一下:

String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";//目前我只用这方法连接,没有问题
String url="jdbc:odbc:test";
String user="sa";
String password="sa";




<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>

//发现你1楼的里面scope没有写



<body>
<%

try
{
sqlbean.sql_data();
String sql="select * from student";
ResultSet rs=sqlbean.executeQuery(sql);

while(rs.next()){
out.println(rs.getInt(1));
out.println(rs.getString(2));
out.println(rs.getString(3));
out.println(rs.getString(4));
//注意与数据库类型相符



}
}catch(Exception ee)
{}


//rs.close();
//stmt.close();
//conn.close();
%>
</body>


自己测试了下成功显示的,SQL语句也没有问题。
希望能帮你解决问题~!



请把tomcat work目录下sql_005ftest_jsp文件的第72行贴出来,还有,你的session或者request请求里面有sql_data的实例么???
请不要把数据库连接与释放放到javabean里面去,在servlet的每个业务逻辑中请用一个connection,在业务结束的时候transaciton commit,finally里面connection close。


这样就是有可能你在页面上申请的rs对象由于你给它赋值为null,但是返回的纪录集对象也还是为null你却无条件使用了,所以就报出了空指针(java.lang.NullPointerException)的错误

最好用调试工具进行调试


写一个非网页的应用程序测试吧:
Test.java:
package news;
import java.sql.*;
public Class Test{
public static void main(String args[]){
String strSQL=="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
Sql_data sd = new Sql_data();
rs=sd.executeQuery(strSQL);
if(rs.next())
System.out.println("OK!");
}
}
跑一下,看看哪里会出问题。
另外,你的bean有一些问题,首先,Class的首字母最好大写:Sql_data;其次,executeQuery方法的返回值是ResultSet,但是在你的类中该方法实际上是对sql_data类的私有数据成员rs赋值!而你又不为它写getter方法,所以这样写根本没有用。直接把rs做成executeQuery()的局部变量好了




好的,谢谢大家,我试一下,如果好用了,立即结贴!


↑返回目录
前一篇: 请问用什么方法能防止用户直接从地址栏登陆管理界面呢???
后一篇: 256内存就能跑的很爽的IDE~~求助 119 110 120