为什么我在<%! %>中定义的方法中连接数据库页面就不能打开,一直处于等待中,而我把连接数据的代码放到<% %>中时页面就能打开呀!这是为什么呀,大家帮帮忙呀,我搞了半天了还没有搞懂为什么?
底下是在<%!%>的方法中连接数据库的代码!
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../conn/conn.jsp" %>
<html>
<head>
<title>这是一个测试</title>
</head>
<body>
<%!
String str=null; 
String connectdb()
{
String sql1="select * from message where id='1'";stmt=con.createStatement();
rs=stmt.executeQuery(sql1);
while(rs.next())
{
str=rs.getString("topic");}
rs.close();
stmt.close();
con.close();
return str;
}%>
<div align="center"><%=connectdb()%></div>
</body>
</html>下面是我把连接数据代码放到<%  %>中就能够打开!
代码如下:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../conn/conn.jsp" %>
<html>
<head>
<title>这是一个测试</title>
</head>
<body>
<%
String str=null; 
String sql1="select * from message where id='1'";stmt=con.createStatement();
rs=stmt.executeQuery(sql1);
while(rs.next())
{
str=rs.getString("topic");}
rs.close();
stmt.close();
con.close();
out.print(str);
%>
<div align="center"><%=str%></div>
</body>
</html>其中conn.jsp是
<%@ page contentType="text/html;charset=gb2312" %>
<link rel="stylesheet" href="../conn/laba.css" type="text/css">
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%Connection con;
Statement stmt;
ResultSet rs;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
con=java.sql.DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/OA?user=root&password=12345678&useUnicode=true&characterEncoding=gb2312");
/*DriverManager.registerDriver(new com.mysql.jdbc.Driver());
String dbUrl="jdbc:mysql://localhost:3306/OA?useUnicode=true&characterEncoding=GB2312";
String dbUser="root";
String dbPwd="12345678";
con=java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);*/stmt=con.createStatement();%>

解决方案 »

  1.   

    你把<%....%>间的代码放到javaBean里
    页面用<jsp:useBean..../>
    就行了.具体原因,我也说不上来.
    反正我以前也遇到此问题
      

  2.   

    谢谢楼上的了,那个样子我是做过了,是可以,但是为什么放在<!% %>里就不行了,实在想不通,是不是什么语法问题<%!%>这个里面定义的方法不能连接数据库还是别的呀!
      

  3.   

    不是,好象是Class.forName("org.gjt.mm.mysql.Driver").newInstance()
    出错,具体原因,等楼下的......
      

  4.   

    String connectdb()
    {
    String sql1="select * from message where id='1'";stmt=con.createStatement();
    rs=stmt.executeQuery(sql1);
    while(rs.next())
    {
    str=rs.getString("topic");}
    rs.close();
    stmt.close();
    con.close();
    return str;
    }
    总感觉这个函数应该加上throws SQLException等异常声明才顺眼
      

  5.   

    <%!%>声明的是一段java代码,它用来定义在产生的类文件中的类的属性和方法。
    <%%>是一段可以在处理请求时间执行的java代码,它可以产生输出,并发到客户端的输出流里
      

  6.   

    其实Exception处理应该不是原因!
    我加了还是一样打不开
    <%@ page contentType="text/html;charset=gb2312" %>
    <%@ include file="../conn/conn.jsp" %>
    <%@ page import="java.lang.Exception" %>
    <html>
    <head>
    <title>这是一个测试</title>
    </head>
    <body>
    <%!
    String str=null;
    public String connectiondb()
    {
     
    String sql1="select * from message where id='1'";
    try
    {
    stmt=con.createStatement();
    rs=stmt.executeQuery(sql1);
    if(rs.next())
    {
    str=rs.getString("topic");
    }
    }catch (Exception e)
    {
    e.printStackTrace();
    }
    finally
    {
    rs.close();
    stmt.close();
    con.close();
    }
    return str;
    }%>
    <div align="center"><%=connectiondb()%></div>
    </body>
    </html>
      

  7.   

    我试了一下,如果不加异常处理的话,jsp页根本就编译不过去(我用的是自己写的,但也抛出异常的)
    而且在我这里可以输出的:
    <%!
      String w=null;
      public String a()
      {
      //try{
      String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=room";
        String className="com.microsoft.jdbc.sqlserver.SQLServerDriver";
        String name="room";
        String pw="e";
        Connection con=ConnectionProvider.getConnection(url,className,name,pw);
     
      
       DbResuletSet op=new DbResuletSet();
       op.setCommand("select * from usertest");
       op.execute();
       if(op.next())
       {
        w=op.getString(2);
       }
       
       con.close();
      // }
      // catch (Exception e){}
       return w;
       
      }
    %>^^^^^^^^^^^^
    <%=a()%>
      

  8.   

    可是我加了异常处理还是不行的呀!我用的mysql难道是数据库的原因吗.我试试sqlserver
      

  9.   

    而且在<% %>中我也是不加异常处理的,但是能够输出的呀
      

  10.   

    <%!
    String str=null; 
    String connectdb()
    {
    String sql1="select * from message where id='1'";stmt=con.createStatement();
    rs=stmt.executeQuery(sql1);
    while(rs.next())
    {
    str=rs.getString("topic");}
    rs.close();
    stmt.close();
    con.close();
    return str;
    }%>
    这里是定义变量的地方,不是执行的地方。
      

  11.   

    楼上的意思就是说<%! %>这个里面不能够连接数据库了!
      

  12.   

    因为<%!%>是全局公用的.所以你的con,stmt,rs等都是公用的.只有一个.你close()了.那么他们就不可以再用了.所以.如果你去掉他们的close()应该是正常的.但是无法关闭连接了.所以不能把连接数据库写在<%!%>中.
      

  13.   

    <%! %>里当然可以连接数据库,不过你没有传递给它必要的信息,也没有申明对象,……
    连编译都通不过,还怎么跑啊。重复了,你自己的帖子:http://community.csdn.net/Expert/topic/4458/4458242.xml?temp=.8427545
      

  14.   

    楼上的我哪个对象没有申明或,连接数据库所需的对象我都在conn.jsp里申明的呀,!conn.jsp代码在底下呀,我不是贴在下面呀!
      

  15.   

    呵呵
    <%!%>中定义的是方法 你不调用他就不会起作用
    <%%>中是执行的内容