b.jsp:
<%@ page import="java.sql.*" %> <jsp:useBean id = "myBean" class = "n.M" scope = "application" />
<%
ResultSet rs = myBean.execute("select * from b");
out.println(rs.getString(1));
%> M.java: package n;
import java.sql.*;public class M
{
String DBDriver = "sun.jdbc.odbc.JdbcOdbcDirver";
String url = "jdbc:odbc:MS Access Database;DBQ=d:\\b.mdb";
Connection conn = null;
ResultSet rs = null;public ResultSet execute(String sql)
{
try
{
Class.forName(DBDriver).newInstance();
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(Exception e){}
return rs;
} }
运行的时候就显示一张白板,什么结果都没有,我就是想只要能连接到数据库并且显示内容就可以,请问是哪里出问题了?
<%@ page import="java.sql.*" %> <jsp:useBean id = "myBean" class = "n.M" scope = "application" />
<%
ResultSet rs = myBean.execute("select * from b");
out.println(rs.getString(1));
%> M.java: package n;
import java.sql.*;public class M
{
String DBDriver = "sun.jdbc.odbc.JdbcOdbcDirver";
String url = "jdbc:odbc:MS Access Database;DBQ=d:\\b.mdb";
Connection conn = null;
ResultSet rs = null;public ResultSet execute(String sql)
{
try
{
Class.forName(DBDriver).newInstance();
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(Exception e){}
return rs;
} }
运行的时候就显示一张白板,什么结果都没有,我就是想只要能连接到数据库并且显示内容就可以,请问是哪里出问题了?
b 表中一共有几个字段哦?
一、JAVA基础培训
1.孙鑫Java无难事(共108集 SWF格式)
2.张孝祥Java就业培训(共56集 RM/RMVB格式)
3.翁凯Java语言视频培训(共30讲 CSF格式)
二、JAVA进阶培训
1.吉林大学远程JSP培训(共32讲 AVI格式)
2.西安电子科技大学JSP在线课程(共35讲 AVI格式)
3.JSP数据库系统开发培训( ISO格式 内含电子书及相关源代码)
4.刘晓涛JAVA UML核心基础(共6集 RM/RMVB格式 )
5.J2EE专题系列讲座之Struts(共5讲 AVI格式 )
6.赛迪网校J2EE软件工程师培训(J2EE基础13集 高级17集 案例7集)
7.J2EE Web程序开发(共38集)
8.天峰培训J2EE快速进阶培训视频(共33讲 AVI格式)
三、JAVA实战项目培训录像
1.北京尚学堂科技_马士兵老师_项目实战手把手java视频教程-坦克大战
2.北京尚学堂科技_马士兵老师_项目实战手把手j2se视频教程-Chat
3.北京尚学堂科技_马士兵老师_项目实战手把手BBS教程
四、数据库方面
1.Oracle 9i DBA中文视频远程班培训录像(共64集 AVI格式)
*1Z0-007 Introduction to Oracle9i SQL
*1Z0-031 Oracle9i DBA Fundamentals I
*1Z0-032 Oracle9i DBA Fundamentals II
*1Z0-033 Oracle9i Performance Tuning
另附全套PPT培训讲稿。
2.中科院Oracle 10G 数据库培训录像(共18集 rmvb格式)联系方式:
QQ:421130479
MSN:[email protected]
E-mail:[email protected]
测试 一下连接数据库System.out.println(conn);<jsp:useBean id = "myBean" class = "n.M" scope = "application" />
<%
ResultSet rs = myBean.execute("select * from b");
if(rs.next())
{
out.println(rs.getString(1));
}
%>
String DBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
<%@ page import="java.sql.*" %><jsp:useBean id = "myBean" class = "n.M" scope = "application" />
<%
try{
ResultSet rs = myBean.execute("select * from b");
while(rs.next()) //if(rs.next())也不行
out.println(rs.getString(1));
}
catch(Exception e){}
%>
这里如果不catch异常,会报如下的错:
org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)下面是M.jsp:
package n;
import java.sql.*;public class M
{
String DBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:MS Access Database;DBQ=d:\\b.mdb";
Connection conn = null;
ResultSet rs = null;public ResultSet execute(String sql)
{
try
{
Class.forName(DBDriver).newInstance();
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(Exception e){}
return rs;
}
}
catch(Exception e){
throw new Exception(e);}
return rs;
}
}
你可以单元测试一下M.java的execute()方法是否能正常工作,如果正确,之后你可以把JSP改成如下,把捕获的异常堆栈信息输出来,这样应该可以知道是哪里出了问题
<%@ page import="java.sql.*" %><jsp:useBean id = "myBean" class = "n.M" scope = "application" />
<%
try{
ResultSet rs = myBean.execute("select * from b");
while(rs.next()) //if(rs.next())也不行
out.println(rs.getString(1));
} catch(Exception e){e.printStackTrace();}
%>这样可以把问题具体定位在JavaBean还是JSP或者数据库上面
另外,M.execute()方法也要把异常堆栈信息输出来,改动如下:
public ResultSet execute(String sql)
{
try
{
Class.forName(DBDriver).newInstance();
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(Exception e){e.printStackTrace();}}
return rs;
}
这样有利于调试
<jsp:useBean id = "myBean" class = "n.M" scope = "application" />
<%
try{
ResultSet rs = myBean.execute("select * from b");
---out.println(myBean.getSql());---//我在jsp文件中加入了这句
while(rs.next())
out.println(rs.getString(1));} catch(Exception e){e.printStackTrace();}
%>
在bean的public ResultSet execute(String sql)里赋值this.sql=sql;用getSql()返回,
把this.sql=sql;这句依次放在下面这四句的中间,
Class.forName(DBDriver).newInstance(); (1)
conn = DriverManager.getConnection(url); (2)
Statement stmt = conn.createStatement(); (3)
rs = stmt.executeQuery(sql);
放在(1)(2)中间的时候能网页能正常打印出sql的值(也就是"select * from b"这句),放到(2)(3)中间的时候就只打印null,也就是说bean从这句(2)句开始就出错了吧,可是这句应该没有任何问题,我把他放到别的程序里就能正常运行,而且数据库也应该没问题,我用单独的java程序连接这个表就能正常显示结果,怎么就找不到原因呢?
还有我加入这句e.printStackTrace();后,编译器也没有任何提示,直接就编译通过,邪门了
try{
ResultSet rs = myBean.execute("select * from b");//经过上面的测试证明这句应该也没什么问题.
while(rs.next())
out.println(rs.getString(1));
}
catch(Exception e){e.printStackTrace();}
请问jsp的异常堆栈信息是在哪显示出来的?是在我每次重起tomcat,并且刷新网页之后显示在网页上的吗?可我现在刷新网页的时候仍然是白板
还有,在调试程序的时候,一样一样的调试,比如说,先确定数据库的连接有没有连上,然后再确实SQL语句是否正确,然后再确实执行结果有没有返回,然后再回到JSP页面里面看看JSP语法等其它问题
这样解决起来就快多了
一个字段怎么能用
out.println(rs.getString(1))啊
out.println(rs.getString(0))吧