jdk,tomcat,sql server2000都已经装好并测试成功.
小弟在另一个测试中却碰到了问题,请各位师兄指教.
%@ page contentType="text/html; charset=gb2312" %>
<%@ page info="database handler"%> 
<%@ page import="java.io.*"%> 
<%@ page import="java.util.*"%> 
<%@ page import="java.sql.*"%> 
<%@ page import="javax.servlet.*"%> 
<%@ page import="javax.servlet.http.*"%> 
<!--导入结束--> 
<html>
<head>
<title>数据库连接实验</title>
</head>
<body>
<% 
    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";  
    String sConnStr = "Jdbc:Odbc:try";//“try”的意思就是与刚才设置的数据源名对应; 
    Connection Con = null;
    Statement Stmt = null;
try 

     try          /*加载驱动程序*/
    {
    Class.forName(sDBDriver); 
     }
    catch(java.lang.ClassNotFoundException e)
    { 
   out.print("Connect to Database error: " + e.getMessage());
     }
  //catch(Exception e){}
   try          /*建立连接*/
    {
   Con = DriverManager.getConnection(sConnStr,"sa","sa"); 
     }
   catch(SQLException e)
   {
   out.print(e.toString());
    }
  //catch(Exception e){}        Stmt = Con.createStatement();    /*创建JDBC声明*/ 
        String query="CREATE TABLE GUEST" +           /*在数据库中创建新的表*/
                     "(NUM VARCHAR(32),"+ 
                     "USERNAME TEXT,"+ 
                     "CONTENT TEXT,"+ 
                     "PASSWORD INTEGER,"+ 
                     "TOTAL INTEGER,"+
                     "REALNAME TEXT)"; 
        Stmt.executeUpdate(query);         /*更新数据库*/

catch (Exception e) {} 
out.println("恭喜,表连接创建成功!"); 
%> 
<%
ResultSet RS= Stmt.executeQuery("SELECT * FROM EMPLOYEE WHERE eage<25");     /*连接到数据库中的表EMPLOYEE上*/
String tt;                                                  /**号表示选择表中所有的列*/
String link;                                                /*若选择其中的某几列可以将*号换成列标号*/  
String makeStr;                                             /*WHERE语句表示条件选择*/
out.print("<table border=2 style=color:blue >");
while (RS.next()) {
  out.print("<tr><td>");
       tt = RS.getString("ename");              /*查询表中NUM字段的内容,字段内容可能使数组,默认列输出*/
       out.print(tt);
   out.print("</td><td>");
   tt = RS.getString("esex");
   out.print(tt);
   out.print("</td><td>");
   tt = RS.getString("eage");
   out.print(tt);
   out.print("</td><td>");
   tt=RS.getString("egrade");
   out.print(tt);
   out.print("</td><td>");
 } 
out.print("</table>");
RS.close();
out.println("数据查询成功!");
%>
<%                                                                        /*在数据库中添加数据*/
        String sql="INSERT INTO EMPLOYEE VALUES ('5','aaa','m',54,'hehe')"; 
        Stmt.executeUpdate(sql);
        out.println("添加数据成功!");
%>
</body>
</html>
提示的错误是:exception org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.NullPointerException
    org.apache.jsp.dbprogram_jsp._jspService(dbprogram_jsp.java:107)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

解决方案 »

  1.   

    我觉得你用的SQL2000时应该用的是这个语句:
    Class.forName("com.microsoft.jdbc.sqlserver.QSLServerDriver");
    这样就应该可以了哈!
      

  2.   

    也许是Con 没有初始化成功(还为null值的时候)就引用了它!
      

  3.   

    没有异常的位置大家怎么给你看啊,先把异常的位置贴出来。建议在使用con之前进行非空判断。而且程序最后con和stmt等没有关闭,会发生泄漏的。
      

  4.   

    小弟在用con之前进行了判断结果还是不行.请看:
    <%@ page contentType="text/html; charset=gb2312" %>
    <%@ page info="database handler"%> 
    <%@ page import="java.io.*"%> 
    <%@ page import="java.util.*"%> 
    <%@ page import="java.sql.*"%> 
    <%@ page import="javax.servlet.*"%> 
    <%@ page import="javax.servlet.http.*"%> 
    <!--导入结束--> 
    <html>
    <head>
    <title>数据库连接实验</title>
    </head>
    <body>
    <% 
        String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";  
        String sConnStr = "Jdbc:Odbc:try1";//“try”的意思就是与刚才设置的数据源名对应; 
        Connection Con = null;
        Statement Stmt = null;
    try 

         try          /*加载驱动程序*/
        {
        Class.forName(sDBDriver); 
         }
        catch(java.lang.ClassNotFoundException e)
        { 
       out.print("Connect to Database error: " + e.getMessage());
         }
      
       try          /*建立连接*/
        {   Con = DriverManager.getConnection(sConnStr,"sa","sa"); 
         }
       catch(SQLException e)
       {
       out.print(e.toString());
        }    
        if(Con!=null)       { Stmt = Con.createStatement();   } else
          out.println("Sorry!"); /*创建JDBC声明*/ 
            String query="CREATE TABLE GUEST" +           /*在数据库中创建新的表*/
                         "(NUM VARCHAR(32),"+ 
                         "USERNAME TEXT,"+ 
                         "CONTENT TEXT,"+ 
                         "PASSWORD INTEGER,"+ 
                         "TOTAL INTEGER,"+
                         "REALNAME TEXT)"; 
            Stmt.executeUpdate(query);         /*更新数据库*/
    } out.println("恭喜,表连接创建成功!"); 
    %> 
    <%
    ResultSet RS= Stmt.executeQuery("SELECT * FROM EMPLOYEE WHERE eage<25");     /*连接到数据库中的表EMPLOYEE上*/
    String tt;                                                  /**号表示选择表中所有的列*/
    String link;                                                /*若选择其中的某几列可以将*号换成列标号*/  
    String makeStr;                                             /*WHERE语句表示条件选择*/
    out.print("<table border=2 style=color:blue >");
    while (RS.next()) {
      out.print("<tr><td>");
           tt = RS.getString("ename");              /*查询表中NUM字段的内容,字段内容可能使数组,默认列输出*/
           out.print(tt);
       out.print("</td><td>");
       tt = RS.getString("esex");
       out.print(tt);
       out.print("</td><td>");
       tt = RS.getString("eage");
       out.print(tt);
       out.print("</td><td>");
       tt=RS.getString("egrade");
       out.print(tt);
       out.print("</td><td>");
     } 
    out.print("</table>");
    RS.close();
    out.println("数据查询成功!");
    %>
    <%                                                                        /*在数据库中添加数据*/
            String sql="INSERT INTO EMPLOYEE VALUES ('5','aaa','m',54,'hehe')"; 
            Stmt.executeUpdate(sql);
            out.println("添加数据成功!");
    Stmt.close();
    Con.close();%>
    </body>
    </html>提示还是:
    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause java.lang.NullPointerException
    org.apache.jsp.dbprogram_jsp._jspService(dbprogram_jsp.java:115)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.
      

  5.   

    而且我觉得问题应该不是"也许是Con 没有初始化成功(还为null值的时候)就引用了它!"
    因为在con被初始化的时候已经进行了try catch 捕捉.那么应该不会出现上面那位大哥说的这种情况,所以后来进行判断我觉得也是没有必要的.问题应该不是出在这.