在jsp中我通常是将JDBC部分封装在一个bean中,然后jsp通过标签导入bean,然后通过该bean的实例使用JDBC连接,这个方法对于任何jsp/servlet都可以通用。而且可以复用。

解决方案 »

  1.   

    一个具体的实例:
    import java.sql.*;
    import java.io.*;public class BaseBean {   protected String dbURL;
       protected String dbDriver;
       protected String userName;
       protected String passwd;
       protected String tableName;
       protected Connection dbCon;
       protected String codeTableName;
       protected PreparedStatement preStatement;   public BaseBean() {
          super();
       }   public boolean connect() throws ClassNotFoundException, SQLException {
          Class.forName(dbDriver);
          dbCon = DriverManager.getConnection(this.getDbURL(),userName,passwd);
          return true;
       }
       public boolean isConnect() {
        if (dbCon!=null) {return true;}
        else {return false;}
       }   public void close() throws SQLException {
          dbCon.close();
       }   public ResultSet execSQL(String sql) throws SQLException {
          Statement st = dbCon.createStatement();
          return st.executeQuery(sql);
       }
       public void preparedUpdateSQL(String sql) throws SQLException {
        preStatement=dbCon.prepareStatement(sql);   
       }
       public int execUpdateSQL(String sql) throws SQLException {
        if (sql==null) return -1;
        Statement st=dbCon.createStatement();
        return st.executeUpdate(sql);
       }
       public String getDbDriver() {
          return this.dbDriver;
       }   public void setDbDriver(String newValue) {
          this.dbDriver = newValue;
       }   public String getDbURL() {
          return this.dbURL;
       }   public void setDbURL(String newValue) {
          this.dbURL = newValue;
       }
       public void setPasswd(String passwd) {
        this.passwd=passwd;
       }
       public void setUserName(String userName) {
        this.userName=userName;
       }
       public String getUserName() {
        return userName;
       }
       public String getTableName() {
        return tableName;
       }
       public void setTableName(String tableName) {
        this.tableName=tableName;
       }   
       public String getCodeTableName() {
        return codeTableName;
       }
       public void setCodeTableName(String codeTableName) {
        this.codeTableName=codeTableName;
       }    }jsp:
    <%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*"%>
    <jsp:useBean id="query" scope="request" class="BaseInforBean" />
    <%
    if (!query.isConnect()) {
    try {
    query.getCode();
    } catch (ClassNotFoundException e) {
    throw new ServletException("Database driver not available",e);
    } catch (SQLException e) {
    throw new ServletException("Database URL is wrong",e);
    }
    }
    if (request.getParameter("query")==null&&request.getParameter("id")==null) {
    %>
    <script language="javascript">
    <!--
    function showAdvanceOption(total) {
    for (j=1;j<=total;j++) {
    if (eval("option_"+j+".style.display=='none'")) {
    eval("option_"+j+".style.display=''");
    }
    else { 
        eval("option_"+j+".style.display='none'");
    }
    }
    if (hides.style.display=='none') {
    hides.style.display='';
    shows.style.display='none';
    }
    else {
    hides.style.display='none';
    shows.style.display='';
    }
    }
    //-->
    </script><B>日期的格式可以使用简写,即可以只输入年,年和月</B>
    <HR>
    <table>
    <tr><td>
    <form action="query.jsp" method="post" name="queryInfor">
    <TABLE border=0 align="left" width="400" cellpadding="1" cellspacing="0" >
    <TR align="left">
    <TD><input type="checkbox" name="byName" checked><%= BaseInforRecord.NAME %>:</TD>
    <TD><input type="text" name="name" size=8></TD>
    </TR>
    <TR>
    <TD><input type="checkbox" name="bySex""><%= BaseInforRecord.SEX %>:</TD>
    <TD><select name="sex" size=1>
    <% for (int i=0;i<query.sex.length;i++) { %>
    <OPTION VALUE="<%=query.sex[i][0] %>"><%=query.sex[i][1] %></OPTION>
    <% } %>
    </select></TD>
    </TR>
    <TR>
        <td><input type="checkbox" name="byMarriage"><%= BaseInforRecord.MARRIAGE %>:</TD>
        <td><SELECT NAME="marriage" SIZE="1">
    <% for (int i=0;i<query.marriage.length;i++) { %>
    <OPTION VALUE="<%=query.marriage[i][0] %>"><%=query.marriage[i][1] %></OPTION>
    <% } %>
      </SELECT>
    </TD>
    </TR>
    <TR>
    <TD><input type="checkbox" name="byBirthdate"><%= BaseInforRecord.BIR_DATE %>:</TD>
    <TD><input type="text" name="bir_date" size=10"><input type="radio" name="birthdate_option" value="equ" checked>等于<input type="radio" name="birthdate_option" value="grt">大于<input type="radio" name="birthdate_option" value="lst">小于</TD>
    </TR>
    <TR id="option_1" style="DISPLAY:none">
        <td><input type="checkbox" name="byNation"><%= BaseInforRecord.NATION %>:</TD>
        <td><SELECT NAME="nation" SIZE="1">
    <% for (int i=0;i<query.nation.length;i++) { %>
    <OPTION VALUE="<%=query.nation[i][0] %>"><%=query.nation[i][1] %></OPTION>
    <% } %>
      </SELECT>
    </TD>
    </TR>
    <TR id="option_2" style="DISPLAY:none">
        <td><input type="checkbox" name="byLanguage"><%= BaseInforRecord.FOREIGNLANGUAGE1 %>:</TD>
        <td><SELECT NAME="language" SIZE="1">
    <OPTION VALUE="英语">英语</OPTION>
    <OPTION VALUE="日语">日语</OPTION>
    <OPTION VALUE="其它">其它</OPTION>
      </SELECT>
    </TD>
    </TR>
    <TR id="option_3" style="DISPLAY:none">
        <td><input type="checkbox" name="byDepartment"><%= BaseInforRecord.DEPARTMENT %>:</TD>
        <td><SELECT NAME="department" SIZE="1">
    <% for (int i=0;i<query.department.length;i++) { %>
    <OPTION VALUE="<%=query.department[i][0] %>"><%=query.department[i][1] %></OPTION>
    <% } %>
      </SELECT>
    </TD>
    </TR>
    <TR id="option_4" style="DISPLAY:none">
        <td><input type="checkbox" name="byDuty"><%= BaseInforRecord.EM_DUTY %>:</TD>
        <td><SELECT NAME="duty" SIZE="1">
    <% for (int i=0;i<query.em_duty.length;i++) { %>
    <OPTION VALUE="<%=query.em_duty[i][0] %>"><%=query.em_duty[i][1] %></OPTION>
    <% } %>
    </SELECT>
    </TD>
    </TR>
    <TR id="option_5" style="DISPLAY:none">
        <td><input type="checkbox" name="byEducation"><%= BaseInforRecord.EDU_LEVEL %>:</TD>
        <td><SELECT NAME="education" SIZE="1">
    <% for (int i=0;i<query.edu_level.length;i++) { %>
    <OPTION VALUE="<%=query.edu_level[i][0] %>"><%=query.edu_level[i][1] %></OPTION>
    <% } %>
    </SELECT>
    </TD>
    </TR>
    <TR id="option_6" style="DISPLAY:none">
        <td><input type="checkbox" name="byBlood"><%= BaseInforRecord.BLOODTYPE %>:</TD>
        <td><SELECT NAME="blood" SIZE="1">
    <% for (int i=0;i<query.bloodtype.length;i++) { %>
    <OPTION VALUE="<%=query.bloodtype[i][0] %>"><%=query.bloodtype[i][1] %></OPTION>
    <% } %>
    </SELECT>
    </TD>
    </TR>
    <TR  id="option_7" style="DISPLAY:none">
    <TD><input type="checkbox" name="byComeDate"><%= BaseInforRecord.IN_DATE %>:</TD>
    <TD><input type="text" name="in_date" size=10"><input type="radio" name="comedate_option" value="equ" checked>等于<input type="radio" name="comedate_option" value="grt">大于<input type="radio" name="comedate_option" value="lst">小于</TD>
    </TR>
    </TABLE>
    </tr></td>
    <tr><td align=center><input type="submit" name="query" value="查询">&nbsp<input type="reset" name="unquery" value="重设"></td></tr>
    </form><tr><td cols=100><a onClick=showAdvanceOption(7) style="cursor:hand"><table cellspacing=0 cellpadding=0><tr><td id=shows align=right ><font color="#0000ff">显示</font></td><td id=hides align=right style="display:none"><font color="#0000ff">隐藏</font></td><td><font color="#0000ff">高级选项</font></td></tr></table></a></tr></td>
    </table>
    <% 
    }
    else if (request.getParameter("id")==null){
    %>
    <% StringBuffer sql=new StringBuffer(2048);
    String table;
    Vector options=new Vector();
    if (request.getParameter("byName")!=null) {
    options.add("name like '%"+request.getParameter("name")+"%' ");
    }
    if (request.getParameter("bySex")!=null) {
    options.add("sex='"+request.getParameter("sex")+"' ");
    }
    if (request.getParameter("byMarriage")!=null) {
    options.add("marriage='"+request.getParameter("marriage")+"' ");
    }
    if (request.getParameter("byBirthdate")!=null) {
    if (request.getParameter("birthdate_option").equals("equ")) {
    options.add("bir_date='"+request.getParameter("bir_date")+"' ");
    }
    else if (request.getParameter("birthdate_option").equals("grt")) {
    options.add("bir_date>'"+request.getParameter("bir_date")+"' ");
    }
    else if (request.getParameter("birthdate_option").equals("lst")) {
    options.add("bir_date<'"+request.getParameter("bir_date")+"' ");
    }
    }
    if (request.getParameter("byNation")!=null) {
    options.add("nation='"+request.getParameter("nation")+"' ");
    }
    if (request.getParameter("byLanguage")!=null) {
    options.add("foreignlanguage1='"+request.getParameter("language")+"' ");
    }
    if (request.getParameter("byDepartment")!=null) {
    options.add("department='"+request.getParameter("department")+"' ");
    }
    if (request.getParameter("byDuty")!=null) {
    options.add("em_duty='"+request.getParameter("duty")+"' ");
    }
    if (request.getParameter("byEducation")!=null) {
    options.add("edu_level='"+request.getParameter("education")+"' ");
    }
    if (request.getParameter("byBlood")!=null) {
    options.add("bloodtype='"+request.getParameter("blood")+"' ");
    }
    if (request.getParameter("byComeDate")!=null) {
    if (request.getParameter("comedate_option").equals("equ")) {
    options.add("in_date='"+request.getParameter("in_date")+"' ");
    }
    else if (request.getParameter("comedate_option").equals("grt")) {
    options.add("in_date>'"+request.getParameter("in_date")+"' ");
    }
    else if (request.getParameter("comedate_option").equals("lst")) {
    options.add("in_date<'"+request.getParameter("in_date")+"' ");
    }
    }
    int option_size=options.size();
    if (option_size>0) {
    sql.append(" where ");
    for (int i=0;i<option_size-1;i++) {
    sql.append((String)options.get(i)+"AND ");
    }
    sql.append((String)options.get(option_size-1));
    }try {
    out.println(new String(sql.toString().getBytes("ISO-8859-1"),"gb2312"));
    table=query.getTableByOption(new String(sql.toString().getBytes("ISO-8859-1"),"gb2312"));
    } catch (SQLException e) {
    throw new ServletException("query have wrong!",e);
    }
    %>
    <center><h3>查询结果为:</h3></center>
    <hr>
    <% 
    if (table==null) {out.println("数据库中没有匹配结果");}
    else {
    %>
    <%= table %>
    <br>
    <%
    }
    }
    else {
    %>
    <% String id=request.getParameter("id");
    String table;
    %>
    <% try {
    table=query.getTableByID(id);
    } catch (SQLException e) {
    throw new ServletException("query have wrong!",e);
    }%>
    <center><h3>个人详细信息</h3></center>
    <hr>
    <% 
    if (table==null) {table="数据库中没有匹配结果";}
    else {
    %>
    <%= table %>
    <br>
    <% }
    }
    %>
      

  2.   

    一般不提倡在JSP写业务逻辑,应该把它写到BEAN里在JSP里调用!!
      

  3.   

    你们说的意思我明白,我现在是这样的,找了很多的sqlserver的jdbc没有找到,但是在jrun的设置中找到了这个设置的,建立后 测试成功,但是我不知道应该如何在bean或者jsp中去使用这个 jdbc,还有他这个jdbc是怎么回事?(也就是说这个服务器应该是自带jdbc for database的,可是我不知道他的库文件在那里,没有找到,也不知道如何去使用)
      

  4.   

    数据源应该有个名字dsname,程序发布的时候应该为数据源指定一个引用名
    然后用JNDI获取DataSourced对象,再调用DataSource.getConnection
      

  5.   

    InitialContext context = new InitialContext();
    DataSource  dataSource  
    =(DataSource)context.lookup("java:com/env/jdbc/dsname"); 
    Connection connection = dataSource.getConnection();
      

  6.   

    也就是说 
    Class.forName("allaire.jrun.jdbc.JRunDriver");

    Connection newCon=DriverManager.getConnection("jdbc:jrun:sqlserver://127.0.0.1:1433;databaseName=work","sa","");
    是这样的吗?
    我明天去试试,今天太晚了,请大家继续帮忙!!!!
      

  7.   

    配置数据源的时候还要制定Driver的类名比如Oracle库应该指定为oracle.jdbc.driver.OracleDriver
    而且这个包含driver类的包应该包含在JRUN的classpath中
    pooling = true指这个数据源会适应连接池缓存数据库连接
      

  8.   

    Class.forName("allaire.jrun.jdbc.JRunDriver");
    不是数据源的用法!!