2.写一个JavaBeans放在WEB-INF\classes下,文件名为Conn.java,内容如下:import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;public class Conn {
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private String dataSource = "java:comp/env/jdbc/NowindDB";

// 1.构造函数,在其中进行初始化
public Conn() {
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(dataSource);
conn = ds.getConnection();
stmt = conn.createStatement();
  } catch(Exception e) {
   System.err.println(e.getMessage());
  }
} // 2.执行查询
public ResultSet executeQuery(String sql) throws Exception {
return stmt.executeQuery(sql);
} // 3.执行更新
public int executeUpdate(String sql) throws Exception {
return stmt.executeUpdate(sql);
} // 4.关闭各连接
public void close() {
try {
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null) 
conn.close();
} catch(Exception e) {
System.err.println(e.getMessage());
}
}
}编译成功,生成Conn.class文件

解决方案 »

  1.   

    3。写一个JSP文件,使用这个javaBean从数据库中取一些数据,内容如下:
    <%@ page contentType="text/html;charset=GBK" %>
    <%@ page import="java.sql.*" %>
    <%@ page import="Conn" %><jsp:useBean id="db" scope="page" class="Conn" />
    <table width=100% border=1 >
    <%
    String sql = "select * from records";
    ResultSet rs=db.executeQuery(sql);
    while(rs.next()) {
    out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
    }
    %>
    </table>
    <%
    rs.close();
    db.close();
    %>成功显示,并且多次刷新,也没有出现问题。
      

  2.   

    @ 我的问题与困惑如下,真诚希望得到大家的帮助:在tomcat中数据源的配置中,有以下问题:1。 <parameter>
    <name>maxActive</name>
    <value>100</value>
    </parameter>
    <parameter>
    <name>maxIdle</name>
    <value>30</value>
    </parameter>
    <parameter>
    <name>maxWait</name>
    <value>10000</value>
    </parameter>上面的maxActive,maxIdle与maxWait分别是什么?
    它们之间的联系是怎样的?
    如果把它们设得很大,会不会对服务器或者数据库造成大的负担?
    对于不同规模的网站,它们设为多大为合适?2。<Resource name="jdbc/NowindDB" auth="Container" type="javax.sql.DataSource" />
       这句中的name为jdbc/NowindDB,name的值是否一定要为jdbc/*这样的形式?3。使用tomcat的数据源,是否能保证网站能承受较大的数据库操作请求?是否健壮?关于JavaBeans的问题1。private String dataSource = "java:comp/env/jdbc/NowindDB";
    这一句中,数据源为什么是java:comp/env/jdbc/NowindDB?我设的数据源明明是jdbc/NowindDB呀?2。 private Connection conn = null;
    private Statement stmt = null;
    private ResultSet rs = null;
    private String dataSource = "java:comp/env/jdbc/NowindDB";
    这几个定义,可不可以把它们都定义为static?如果变成static,会有什么影响?3。这个JavaBean哪些地方设计得很不合理,需要改正?4。这个JavaBean还缺少哪些必要的功能?关于JSP网页的问题
    1。<%
    rs.close();
    db.close();
      %>
      这里,rs执行close()后,db是否也必须调用close()?2。<jsp:useBean id="db" scope="page" class="Conn" />
    这里这个Conn的对象db的作用范围是page,意味着访问者离开这个页面后,db就没有用了。如果我没有用db.close()关闭数据库连接,db失效后,db产生的连接会不会自动关闭?
      

  3.   

    2。<jsp:useBean id="db" scope="page" class="Conn" />
    这里这个Conn的对象db的作用范围是page,意味着访问者离开这个页面后,db就没有用了。如果我没有用db.close()关闭数据库连接,db失效后,db产生的连接会不会自动关闭?这里的page就是楼主说的那样了,你在这里声明的db就没有用了。
    db.cloe()没有关闭的话在单用户操作时看不出来,如果多用户操作时,tomcat一会就死了。说明他不会自动关闭。我个人认为是不会关闭的。毕竟服务器不知道客户端的状态,他只有等待服务器使用淘汰算法时把连接释放。这当然是不可取的了。
      

  4.   

    2。<Resource name="jdbc/NowindDB" auth="Container" type="javax.sql.DataSource" />
       这句中的name为jdbc/NowindDB,name的值是否一定要为jdbc/*这样的形式?这个name你想叫什么就叫什么~
    你在后面用的时候就用这个名字,就好像初始化一个变量一样~
      

  5.   

    看错了,看成是JSP里的那个了~
    SPRRY
      

  6.   

    上面的maxActive,maxIdle与maxWait分别是什么?
    它们之间的联系是怎样的?
    如果把它们设得很大,会不会对服务器或者数据库造成大的负担?
    对于不同规模的网站,它们设为多大为合适?maxActive应该是最大连接数
    maxIdle好像是持有的
    maxWait是等待时间(如果连接满了,等多长时间,毫秒)
    一般不要设很大,具体多大,就看实际用的情况(还有,你数据库端相应的连接数也得支持,要不然没用的)
    这句中的name为jdbc/NowindDB,name的值是否一定要为jdbc/*这样的形式?
    你的DataSource ds = (DataSource)ctx.lookup(dataSource);时用的值,你想写什么?随你不过这个java:comp/env好像是必须的3。使用tomcat的数据源,是否能保证网站能承受较大的数据库操作请求?是否健壮?
    应该很健壮吧
    我上个项目用的postgres+apach
    大概能够并好100多个请求,每个请求插入10 - 100条数据不等
      

  7.   


    感谢高手eureka0891() 指点!But i need more!
      

  8.   

    建议不要返回ResuletSet,通过for语句把ResultSet中的值转移到Collection中,,然后马上关闭Connection,Statement,ResultSet对象。
      

  9.   

    好贴子,我真想直接在楼主的文章上加批注!可惜csdn没有这个功能。
    我现在还没连通tomcat的连接池,
    错误是
    org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of
    class '' for connect URL 'null'
    还没解决!
    只连通了resin的。
    我连resin的做分页测试(初学),
    if(intPageCount>0){
    out.println((intPage-1) * intPageSize + 1);//我看到输出是每个分页的输出是正确的
    rs.absolute((intPage-1) * intPageSize + 1);
    i = 0;
    while(i<intPageSize && rs.next()){ String names = rs.getString(1);
    String use_xi = rs.getString(2);
    %>
    <li><%=names%> - <%=use_xi%>
    <%
    i++;
    }
    }
    可是每个分页都显示的第一页的那些数据。
    各位高手能顺便看看吗对于搂主的问题,上面几位的回答,我基本同意,可是对于tomcat的稳定性的看法,我认为
    tomcat还是不太稳定,我用google搜了很多国外的贴子,他们普遍反映tomcat5。0以来配置发生很大变化,不太稳定。
    另外楼主提到用static的问题我也想知道。
      

  10.   

    jsp版好像很缺少web其他版中那种一堆星星又很热心的人,这么细致的问题为什么没人回答?版主都在干吗?
      

  11.   

    private Connection conn = null;
    private Statement stmt = null;
    private ResultSet rs = null;
    private String dataSource = "java:comp/env/jdbc/NowindDB";
    这几个定义,可不可以把它们都定义为static?如果变成static,会有什么影响?我认为还是不要用static,因为有同步的问题
      

  12.   


    应该再加一个返回conn的语句,今天就遇到了一个地方需要使用它。
      

  13.   

    TO:dddeee (dddeee) 
    我今天看见你的帖子很高兴,有一个问题一直困惑着我,我的jsp环境是jsdk1.4.2 + tomcat5.0 +mysql我现在在tomcat/webapps/下建了个虚拟目录myapp,jsp文件都是放在这里的即:tomcat/webapps/myapp我写了一个连接数据库的useban放在tomcat/webapps/WEB-INF/classes/mypak,其中mypak是包,也不知道是什么原因在jsp中调用总是不成功,我想请问一下你所说的设置server.xml是指把你给的代码放在server.xml的什么位置,另外我用的是虚拟目录也要在这里设置数据源吗?敬请各位大哥给予细解!
      

  14.   


    to ypl(追求) :javaBeans是不用在server.xml中设置的,直接在JSP中用jsp:useBean就可以了。不过,你是新建的tomcat/webapps/myapp目录,你需要在myapp/WEB-INF/下有一个web.xml文件,不然你的这个目录并不是一个真正的虚拟目录,所以你的类就找不到了。(你可以在启动tomcat的时候看一下提示信息,上面有没有显示myapp这个虚拟目录)或者在server.xml中显式地指出该目录是虚拟目录,如下:
    <Context path="/myapp" docBase="实际地址" debug="0" reloadable="true"></Context>
    把它放在</host>前。还有,我在server.xml里加数据源,是为了使用tomcat的连接池。你可以直接连接数据库而不加数据源,或者用第三方的连接池,就不需要在server.xml是加太多的东西了。
      

  15.   

    >>jsp版好像很缺少web其他版中那种一堆星星又很热心的人,这么细致的问题为什么没人回答?
    >>版主都在干吗?这些问题在tomcat的文档中大多有很详细的说明,而且这些问题在高手看来就是1+1的问题,为什么不自己在网上找找
    如果解决不了,再来问呢?呵呵,学习要自己先找答案然后在问其它人
      

  16.   

    不赞成在tomcat的server.xml设置数据源,不是每台服务器的server.xml都让你去修改的,假如你用的是虚拟空间呢,方法不通用性。
      

  17.   

    maxActive:指定数据库连接池处于活动状态的数据库连接的最大数目,取值为0表示不受限制maxIdle:指定数据库连接池处于空闲状态的数据库连接的最大数目,取值为0表示不受限制maxWait:指定数据库连接池处于空闲状态的最长时间(以毫秒为单位),超过这一时间将会抛  出异常中。取值为-1表示可以无限期等待