4.这是用来测试的JSP代码:
<%@ page contentType="text/html; charset=" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<jsp:useBean id="dissql" scope="page" class="balance.testBean"/>
<body>
<p>
<%
   String KHH="",KHM="",ADDR="";
%>
</p>
<%
  ResultSet rs = dissql.getdata();
  while(rs.next())
  {
     KHH=rs.getString("KHH");
     KHM=rs.getString("KHM");
     ADDR=rs.getString("ADDR");
 %>
         <td><%=KHH%></td>
        <td><%=KHM%></td>
        <td><%=ADDR%></td>
      <%
  }
  %>
</body>
</html>5.这是一个用来测试的BEAN:
package balancepack;import java.sql.*;public class testBean {
    public ResultSet  getdata(){
String sql="select KHH,KHM,ADDR from WL_KHCOD WHERE KHH='000000'";
sqlBean db= new sqlBean();
ResultSet rs = db.executeQuery(sql);
 return rs;
  }
}6.这是提示的问题:
org.apache.jasper.JasperException: Unsupported encoding: 
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:94)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:404)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:154)
org.apache.jasper.compiler.JspUtil.getReader(JspUtil.java:1062)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:149)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:135)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:243)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:437)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:555)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:291)
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)

解决方案 »

  1.   

    <%@ page contentType="text/html; charset=" language="java" 
    jsp的开头的地方写错,所以抱Unsupported encoding: 
    charset至少要付一个值
    <%@ page contentType="text/html; charset=" language="java" 
    ->
    <%@ page contentType="text/html; charset="UTF-8" language="java" 再试.国庆快乐^_^
      

  2.   

    呵呵,谢谢你的回复,也祝你国庆快乐啊!!!
    但是现在又提示了这样的错误:
    org.apache.jasper.JasperException: /testsql.jsp(1,48) equal symbol expected
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:83)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:402)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:126)
    org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:240)
    org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:190)
    org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:203)
    org.apache.jasper.compiler.ParserController.getPageEncodingForJspSyntax(ParserController.java:443)
    org.apache.jasper.compiler.ParserController.determineSyntaxAndEncoding(ParserController.java:413)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:197)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:149)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:135)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:243)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:437)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:555)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:291)
    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)
    还有,请您看看我的连接池写的有没有问题,这样处理对不对!因为这是第一次写,一点信心也没有,还有,这样写有没有问题,我刚看个文章,说不可以在连接池里直接把CON给CLOSE掉,是这样么?
      

  3.   

    错了,刚才是我写错了,呵呵,不好意思...请先帮我看下我的连接池BEAN那写的有没问题啊?这样写行么?
      

  4.   

    啊....总算只提示一个错误了??这是为什么啊????java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
      

  5.   

    可能用到了Connection,而这个Connection已经被关闭了,所以会报这个错误,连接池的conn不用关闭,直接设为null,返还给ConnectionPool就可以了。
      

  6.   

    public void CloseDataBase(){ 
         try{        
            //conn.close(); 
            conn = null; 
         }  
     catch(Exception end){ 
            System.err.println("执行关闭Connection对象有错误:"+end.getMessage( ) ); 
            System.out.print("执行执行关闭Connection对象有错误:有错误:"+end.getMessage()); //输出到客户端 
         } 
       } 
    }
      

  7.   

    public ResultSet executeQuery(String sql)你的javabean定义不对,返回结果集(ResultSet)。结果集总是依赖于它使用的连接(Connection)对象。因此当Connection在方法内被关闭后,你返回的ResultSet就没有用了。封装数据库操作,目的就是为了隐藏sql包内的类,因此不应该把ResultSet对象返回。所以如果希望直接操作ResultSet,你要么就不封装,要不然就不要返回ResultSet,返回List(你是论坛里第三个想返回ResultSet的了)。看看这个连接池例子:import java.sql.*;
    import java.util.*;public class CONN
    {
        public static Connection openConnection() throws Exception
        {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup("java:/comp/env");
            DataSource ds = (DataSource) envContext.lookup("jdbc/webbalance");
            return ds.getConnection();
        }
        
        public static void closeConnection(Connection conn) throws Exception
        {
            if ( conn != null )
            {
                conn.close();
            }
        }    public static int executeUpdate(String sql) throws Exception
        {
           int count = 0;
            
            Connection conn = null;
            Statement  stmt = null;
            
            try
            {
                conn = openConnection();
                stmt = conn.createStatement();
            
                count = stmt.executeUpdate(sql);
            }
            catch ( Exception e )
            {
                throw e;
            }
            finally
            {
                closeConnection(conn);
            }
            
            return count;
        }
        
        public static List executeQuery(String sql) throws Exception
        {
            List list = new ArrayList();
            
            Connection conn = null;
            Statement  stmt = null;
            ResultSet  rs   = null;
            
            try
            {
                conn = openConnection();
                stmt = conn.createStatement();
                rs   = stmt.executeQuery(sql);
                
                ResultSetMetaData rsmd = rs.getMetaData();
            
                while ( rs.next() )
                {
                    Map map = new HashMap();
                    
                    for ( int i = 1; i <= rsmd.getColumnCount(); i++ )
                    {
                        map.put(rsmd.getColumnName(i), rs.getString(i));
                    }
                    
                    list.add(map);
                }        }
            catch ( Exception e )
            {
                e.printStackTrace();
            }
            finally
            {
                if ( rs != null ) rs.close();
                closeConnection(conn);
            }
            
            return list;
        }
    }使用:
    1.对于insert, update, delete语句,用
    int count = CONN.executeUpdate(sql);2.对于selete语句// 使用前记得import java.util.*;List list = CONN.executeQuery(sql);// 方法一:按名字取值
    for ( int i = 0; i < list.size(); i++ )
    {
        Map map = (HashMap)list.get(i);    out.println((String)mag.get("xx"));
    } // 方法二:遍历取值
    for ( int i = 0; i < list.size(); i++ )
    {
        Map map = (HashMap)list.get(i);    for (Iterator it = map.keySet().iterator(); it.hasNext();) 
        {
            String column_name = (String)it.next();
            out.println("column name = " + column_name);
            out.println("column value = " + (String)map.get(column_name));
        }
    } p.s. 
    1.conn = null 和 conn.close(); 是一样的。
    2.在上面的executeQuery方法中,将ResultSet中的值转储到List对象,因此对性能有影响。
      

  8.   

    我那段代码得改一下,处理rs.getString(i)可能为null的状况。map.put(rsmd.getColumnName(i), rs.getString(i) == null ? "" : rs.getString(i));
      

  9.   

    同意 sagittarius1979(缤纷眩目的世界里 是否拥有自己的色彩) 的看法。如同JDBC 当你return rs; 前调用CloseDataBase()已经将联接断开,所以结果集肯定不存在了。
    因为取数据时并不一次从数据库取出,而是在rs.next()时一条一条的取的。
      

  10.   

    目前发现一个bug,对不起。连接池DataSource那段,只需要初始化一次public class CONN
    {  
        // 定义为静态变量,将一直存在,直到工作目录关闭。
        private static DataSource ds = null;    public static Connection openConnection() throws Exception
        {
            // 只需要初始化1次
            if ( ds == null )
            {
                Context initContext = new InitialContext();
                Context envContext = (Context) initContext.lookup("java:/comp/env");
                DataSource ds = (DataSource) envContext.lookup("jdbc/webbalance");
            }        return ds.getConnection();
        }