<%
try 

//以下几项请自行修改 
String spath="myprog\\DataBase\\db1.mdb";   //注意由网站根到文件的路径 
String dbpath = application.getRealPath(spath); //转化成物理路径 
String dbname = ""; //Acess 数据库用户名,没有则为空 
String user = ""; //Acess 数据库密码,没有则为空 //数据库连接字符串  
String url ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+dbpath;  
//加载驱动程序 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
//建立连接 
Connection conn= DriverManager.getConnection(url);  
//创建语句对象 
Statement stmt=conn.createStatement 
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); Statement stmt1=conn.createStatement 
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); Statement stmt2=conn.createStatement 
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String SelectStr = "";
String sql1,sql2,sql3;int i1,i2,i3; //一级分类开始
sql1 = "select c1id,c1name from class1";
ResultSet rs1 = stmt.executeQuery(sql1); 
i1 = 0; while (rs1.next())
{
if (i1 > 0 )
{SelectStr = SelectStr + "||";}
else
    {SelectStr = SelectStr + rs1.getString("c1name") + "{{";}
//显示与值不同时,用下面一行
//SelectStr = SelectStr + rs1("c1name") + "@"+ rs1("c1id") +"{{" //二级分类开始
sql2 = "select c2id,c2name from class2 where c1name = '"+ rs1.getString("c1name") +"'";
ResultSet rs2 = stmt1.executeQuery(sql2);
i2 = 0;
while (rs2.next())
{
if (i2 > 0)
{SelectStr = SelectStr + "**";}
else
{SelectStr = SelectStr + rs2.getString("c2name") + "((";}
//显示与值不同时,用下面一行
//SelectStr = SelectStr + rs2("c2name") + "@"+ rs2("c2id") +"(("
//三级分类开始
sql3 = "select c3id,c3name from class3 where c2name = '"+ rs2.getString("c2name")+"'";
ResultSet rs3 = stmt2.executeQuery(sql3);
i3 = 0;
while (rs3.next())
{
if (i3 > 0 )
{SelectStr = SelectStr + "^";}
else
{SelectStr = SelectStr + rs3.getString("c3name");}
//显示与值不同时,用下面一行
//SelectStr = SelectStr + rs3("c3name") + "@" + rs3("c3id") i3 = i3 + 1;

}
rs3.close();

//三级分类结束
i2 = i2 + 1;

}
rs2.close();

//二级分类结束
i1 = i1 + 1;
}
rs1.close();
stmt.close(); //关闭语句对象 
conn.close(); //关闭连接对象 
out.println(SelectStr);
}
catch(Exception e){ 
 out.print("数据库连接错误!,错误信息如下:<br>"); 
 out.print(e.getMessage()); 
} //一级分类结束
%><SCRIPT LANGUAGE="JavaScript">
<!--
var aa="<% =SelectStr%>"
</SCRIPT>
为什么总是报错呢var aa="<% =SelectStr%>";

解决方案 »

  1.   

    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 267 in the jsp file: /myprog/test1.jspGenerated servlet error:
        [javac] Compiling 1 source fileC:\Program Files\Apache Software Foundation\Tomcat 4.1\work\Standalone\localhost\_\myprog\test1_jsp.java:157: illegal start of expression
           =SelectStr
           ^
    1 error
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:248)
    at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:343)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:427)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:142)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:198)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:138)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2459)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:132)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:593)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:593)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:126)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:534)错误提示
      

  2.   

    代码太乱了。出错的原因是SelectStr定义在try块里面了,程序执行发生异常时,SelectStr就不存在了,导致illegal start of expression错误。
    像你这样使用jdbc话,程序都得死掉。在结果集里面嵌套数据库操作是非常糟糕的思想。
    应该把数据从结果集中取道List中,然后在List中做循环遍历操作。
    另外Connection、Statement、ResultSet等JDBC接口都要在try外定义并初始化null
    在finally里关闭或者释放
    这样你的程序发生异常时才不会浪费数据库资源
      

  3.   

    <% =这里,你%和=之间有一个空格,不要有那个空格,否则会将“=SelectStr”认为是一个变量,当然会报错了
    <%=这种表示方法才对,这种地方不可以为了程序美观而加空格的
    就像“==”不可以写成“= =”一样,