惶恐指数(75) -_-|可能跟数据库大小写有关。加点调试代码查看一下。修改
for ( int i = 0; i < rsmd.getColumnCount(); i++ )
{
    map.put(rsmd.getColumnName(i), rs.getString(i));
}

for ( int i = 0; i < rsmd.getColumnCount(); i++ )
{
    System.out.println("map.put( " + rsmd.getColumnName(i) + " , " + rs.getString(i));
    map.put(rsmd.getColumnName(i), rs.getString(i));
}这样就可以知道,往map中加入的ColumnName(i)是什么。如果为了省去注意大小写的麻烦,可以考虑全部加入大(或小)写字段名,比如:
//大写
map.put(rsmd.getColumnName(i).toUpperCase(), rs.getString(i));
//小写
map.put(rsmd.getColumnName(i).toLowerCase(), rs.getString(i));

解决方案 »

  1.   

    你到tomcat dos窗口,看看输出的字符串大小写状况。map.put(**** , ****
    map.put(**** , ****
    ...
      

  2.   

    怎样到tomcat dos窗口
    我是5。0的
      

  3.   

    在桌面右下角系统任务栏的tomcat图标上点右键,也有一个察看输出的选项,那里也能查看。
      

  4.   

    如果为了省去注意大小写的麻烦,可以考虑全部加入大(或小)写字段名,比如:
    //大写
    map.put(rsmd.getColumnName(i).toUpperCase(), rs.getString(i));
    //小写
    map.put(rsmd.getColumnName(i).toLowerCase(), rs.getString(i));取的时候
    //大写
    out.println(map.get("Name".toUpperCase()));
    //小写
    out.println(map.get("Name".toLowerCase()));
      

  5.   

    for ( int i = 0; i < rsmd.getColumnCount(); i++ )
    {   
        rs.next();
        map.put(rsmd.getColumnName(i), rs.getString(i));
    }
      

  6.   

    dos的报错是
    java.sql.SQLException:[Microsoft][ODBC Driver Manager]Invalid descriptor index
    各位大哥看看哪里错了
      

  7.   

    out.println(map.get("Name"));这里也需要改一下:out.println((String)map.get("Name"));
      

  8.   

    我考,你就不能在程序执行的过程中加上一点System.out.println()吗,那不是哪里出错都知道了?
      

  9.   

    当然加了,当还是不行现在好了我台式机上也看不到后台运行的东西了
     
    谁能告诉我,为什么我就不能在dos模式下运行,看服务器端的情况呢?
      

  10.   

    为什么我的startup.bat就运行不了,这是什么道理啊
    有谁知道?
      

  11.   

    读了startup.bat的代码,估计你要设定环境变量CATALINA_HOME。如何设定JAVA_HOME你应该知道吧。设定CATALINA_HOME的方法与此相同。1.设定环境变量CATALINA_HOME为tomcat安装目录。2.将 %CATALINA_HOME%\bin; 加入环境变量PATH完成后试试能否用startup.bat启动tomcat
      

  12.   

    不好意思,什么JAVA_HOME和CATALINA_HOME我都没有设过
    能否说的详细些?
      

  13.   

    [转贴]Windows下JAVA环境变量的设置祥解Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。JAVA_HOME指向的是JDK的安装路径,如x:\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……
    那么,下面的步骤和以后的应用你都要受累了,呵呵。设置方法:
    JAVA_HOME=x:\JDK_1.4.2PATH环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%\bin (注,如果你对DOS批处理不了解,你可能不明白%%引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成x:\JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入echo %JAVA_HOME%来看一下你的设置结果) :
    PATH=%JAVA_HOME%\bin;%PATH%
    同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。CLASSPATH环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80%以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。
    CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
    首先要注意的是最前面的".\;",如果你看不清,我给你念念——句点反斜杠分号。这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件——为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解(因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的) ,所以如果喜欢盘根究底的朋友不妨研究一下LINUX。
    为什么CLASSPATH后面指定了tools.jar这个具体文件?不指定行不行?显然不行,行的话我还能这么罗索嘛! 这个是由java语言的import机制和jar机制决定的,你可以查资料解决。
    呵呵,具体的设定方法: win2k\xp用户右键点击我的电脑->属性->高级->环境变量,修改下面系统变量那个框里的值就行了。
    win9x用户修改autoexec.bat文件,在其末尾加入: 
    set JAVA_HOME=x:\JDK_1.4.2
    set PATH=%JAVA_HOME%\bin;%PATH%
    set CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
    就可以了。
      

  14.   

    报错内容为:
    2004-10-1 0:36:04 org.apache.coyote.http11.Http11Protocol init
    信息: Initializing Coyote HTTP/1.1 on port 8080
    2004-10-1 0:36:04 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 1542 ms
    2004-10-1 0:36:04 org.apache.catalina.core.StandardService start
    信息: Starting service Catalina
    2004-10-1 0:36:04 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/5.0.19
    2004-10-1 0:36:04 org.apache.catalina.core.StandardHost start
    信息: XML validation disabled
    2004-10-1 0:36:04 org.apache.catalina.core.StandardHost getDeployer
    信息: Create Host deployer for direct deployment ( non-jmx )
    2004-10-1 0:36:04 org.apache.catalina.core.StandardHostDeployer install
    信息: Processing Context configuration file URL file:C:\Program Files\Apache Sof
    tware Foundation\Tomcat 5.0\conf\Catalina\localhost\admin.xml
    2004-10-1 0:36:05 org.apache.struts.util.PropertyMessageResources <init>
    信息: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=tru
    e
    2004-10-1 0:36:05 org.apache.struts.util.PropertyMessageResources <init>
    信息: Initializing, config='org.apache.struts.action.ActionResources', returnNul
    l=true
    2004-10-1 0:36:06 org.apache.struts.util.PropertyMessageResources <init>
    信息: Initializing, config='org.apache.webapp.admin.ApplicationResources', retur
    nNull=true
    2004-10-1 0:36:08 org.apache.catalina.core.StandardHostDeployer install
    信息: Processing Context configuration file URL file:C:\Program Files\Apache Sof
    tware Foundation\Tomcat 5.0\conf\Catalina\localhost\balancer.xml
    2004-10-1 0:36:09 org.apache.catalina.core.StandardHostDeployer install
    信息: Processing Context configuration file URL file:C:\Program Files\Apache Sof
    tware Foundation\Tomcat 5.0\conf\Catalina\localhost\manager.xml
    2004-10-1 0:36:09 org.apache.catalina.core.StandardHostDeployer install
    信息: Installing web application at context path /jsp-examples from URL file:C:\
    Program Files\Apache Software Foundation\Tomcat 5.0\webapps\jsp-examples
    2004-10-1 0:36:09 org.apache.catalina.core.StandardHostDeployer install
    信息: Installing web application at context path  from URL file:C:\Program Files
    \Apache Software Foundation\Tomcat 5.0\webapps\ROOT
    2004-10-1 0:36:09 org.apache.catalina.core.StandardHostDeployer install
    信息: Installing web application at context path /servlets-examples from URL fil
    e:C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\servlets-exampl
    es
    2004-10-1 0:36:09 org.apache.catalina.core.StandardHostDeployer install
    信息: Installing web application at context path /tomcat-docs from URL file:C:\P
    rogram Files\Apache Software Foundation\Tomcat 5.0\webapps\tomcat-docs
    2004-10-1 0:36:09 org.apache.catalina.core.StandardHostDeployer install
    信息: Installing web application at context path /webdav from URL file:C:\Progra
    m Files\Apache Software Foundation\Tomcat 5.0\webapps\webdav
    2004-10-1 0:36:10 org.apache.coyote.http11.Http11Protocol start
    信息: Starting Coyote HTTP/1.1 on port 8080
    2004-10-1 0:36:10 org.apache.jk.common.ChannelSocket init
    信息: JK2: ajp13 listening on /0.0.0.0:8009
    2004-10-1 0:36:10 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=30/60  config=C:\Program Files\Apache Software Founda
    tion\Tomcat 5.0\conf\jk2.properties
    2004-10-1 0:36:10 org.apache.catalina.startup.Catalina start
    信息: Server startup in 5918 ms
    YYYYY
    XXXXX
    ZZZZZ
    AAAAA
    BBBBB
    CCCCC
    java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的描述器索引
            at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
            at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
            at sun.jdbc.odbc.JdbcOdbc.SQLColAttributesString(JdbcOdbc.java:2668)
            at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getColAttributeString(JdbcOdb
    cResultSetMetaData.java:793)
            at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getColumnName(JdbcOdbcResultS
    etMetaData.java:355)
            at firm.confirm.executeQuery(confirm.java:48)
            at org.apache.jsp.aaa_jsp._jspService(aaa_jsp.java:89)
            at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
    .java:311)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
    01)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
    icationFilterChain.java:284)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
    ilterChain.java:204)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
    alve.java:257)
            at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
    eContext.java:151)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
    a:567)
            at org.apache.catalina.core.StandardContextValve.invokeInternal(Standard
    ContextValve.java:245)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
    alve.java:199)
            at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
    eContext.java:151)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
    a:567)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
    ava:184)
            at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
    eContext.java:151)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
    ava:164)
            at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
    eContext.java:149)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
    a:567)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
    ve.java:156)
            at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
    eContext.java:151)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
    a:567)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:20
    6)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
    :833)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
    ssConnection(Http11Protocol.java:732)
            at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
    :619)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
    ool.java:688)
            at java.lang.Thread.run(Thread.java:534)
      

  15.   

    ----------------------------------------------------------------------bean为:
    package firm;
    import java.sql.*;
    import java.lang.*;
    import java.util.*;public class confirm {
      String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
      String sConnStr = "jdbc:odbc:actonline";
      private Connection conn = null;
      private Statement stmt = null;
      ResultSet rs = null;
    //注册数据库驱动程序
    public confirm() {
          try{
          Class.forName(sDBDriver);
          }catch(java.lang.ClassNotFoundException e){
               System.err.println("confirm():" + e.getMessage());
                }
          catch(Exception ex){
           System.err.println("confirm():" + ex.getMessage());
                    }
      }
    //建立数据库连接及定义数据查询
    public List executeQuery(String sql)
    {
              List list = new ArrayList();
              Connection conn = null;
              Statement  stmt = null;
              ResultSet  rs   = null;
              try
              {
                  System.out.println("YYYYY");
                  Class.forName(sDBDriver);
                  System.out.println("XXXXX");
                  conn = DriverManager.getConnection(sConnStr);
                  System.out.println("ZZZZZ");
                  stmt = conn.createStatement();
                  System.out.println("AAAAA");
                  rs = stmt.executeQuery(sql);
                  System.out.println("BBBBB");
                  ResultSetMetaData rsmd = rs.getMetaData();
                  System.out.println("CCCCC");
                  while ( rs.next() )
                  {
                          System.out.println("DDDDD");
                          Map map = new HashMap();
                          for ( int i = 0; i < rsmd.getColumnCount(); i++ )
                          {
                              System.out.println("map.put("+rsmd.getColumnName(i)+","+rs.getString(i));
                              map.put(rsmd.getColumnName(i), rs.getString(i));
                          }
                          list.add(map);
                  }
              }
              catch ( Exception e )
              {
                  e.printStackTrace();
              }
              finally
              {
                  try
                  {
                    if (rs != null) rs.close();
                    if (stmt != null) stmt.close();
                    if (conn != null) conn.close();
                   }catch (Exception e) {
                     e.printStackTrace();
                   }
              }
              return list;
    }//定义数据操作
    public void executeUpdate(String sql){
        stmt = null;
        try{
          conn = DriverManager.getConnection(sConnStr);
          stmt = conn.createStatement();
          stmt.executeQuery(sql);
          stmt.close();
          conn.close();
        }catch(SQLException ex){
          System.err.println("aq.executeQuery:" + ex.getMessage());
        }
        }
    //关闭数据库连接
    public void closeStmt(){
        try{
          stmt.close();
        }catch(SQLException e){
          e.printStackTrace();
          }
    }
    public void closeConn(){
        try{
          conn.close();
        }catch(SQLException e){
          e.printStackTrace();
          }
    }
    }
    -----------------------------------------------------------
    jsp为:<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <%@ page import="java.sql.*" %>
    <%@ page import="java.util.*" %>
    <html>
    <head>
    <title>测试</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>
    <body>
    <jsp:useBean id= "confirm" scope="page" class="firm.confirm" />
    <%
    String name = request.getParameter("name");
           if(name==null)
            name="";       
           else
            name = new String(name.getBytes("ISO8859-1"));

    String password = request.getParameter("password");
           if(password==null)
            password="";       
           else
            password = new String(password.getBytes("ISO8859-1"));
           
            String type = request.getParameter("type");
           if(type==null)
            type="";        
           else
            type = new String(type.getBytes("ISO8859-1"));
           
    out.println(name);
    out.println(password);
    out.println(type);

    String sql= "select * from student;";
    List list = confirm.executeQuery(sql);
    if(list.size()==0)
    out.println("没有记录!");
    else
    {
        for ( int i = 0; i < list.size(); i++ )
         {
             Map map = (Map)list.get(i);
                  out.println(map.get("name"));
                  out.println(map.get("xuehao"));
                  out.println(map.get(""));
              }
        }
        %></body>
    </html>
      

  16.   

    你的程序是没有错误的,错误是在和数据库的链接上。  String sConnStr = "jdbc:odbc:actonline";可能是这个字符串不正确,相关文章:
    JDBC-ODBC桥
    http://dev.csdn.net/article/35/article/38/38344.shtm问题,actonlin这个连接池你设置了吗?
      

  17.   

    更进一步的讨论是,你用什么数据库?在odbc管理器中是怎么设置的?
      

  18.   

    我用的是sql2000
    actonline是我在sql2000中建的数据库名
    难道是加
    jdbc:odbc:sql2000?
      

  19.   

    我odbc中测试通过了,没什么错啊!
    能告诉我你的邮箱吗,我把odbc截屏发给你看看
      

  20.   

    我没有这样连接过数据库,所以对于这种连接很不熟悉,不过这肯定是错误所在,解决了他,程序就可以正常运行了。你先这样写试试,加上用户名和密码。conn = DriverManager.getConnection(sConnStr, username, password);
      

  21.   

    至少需要数据库管理员密码的。我想你换一下连接的方式,用微软的jdbc驱动好了,我正在搜索论坛。
      

  22.   

    microsoft sql server的jdbc驱动下载:http://download.microsoft.com/download/4/4/8/448af92b-e571-4bb2-810f-46be921a718c/setup.exe安装后把C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib目录下三个jar文件放到tomcat\common\lib目录连接字符串改为:
    // 使用微软的jdbc驱动
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    //数据库名, 用户名, 密码要改成你的数据库相应摄设置。
    conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名;SelectMethod=cursor", "用户名", "密码");
      

  23.   

    好像不是odbc的错
    我把代码改了一下,在for循环中加入两行,fffff和ggggg
    但是tomcat dos状态看到的是fffff,ggggg没有显示,说明可能System.out.println("map.put("+rsmd.getColumnName(i)+","+rs.getString(i));这句有错看看这句中rs.getString(i)有没有问题呢?
     while ( rs.next() )
                  {
                          System.out.println("DDDDD");
                          Map map = new HashMap();
                          System.out.println("EEEEE");
                          for ( int i = 0; i < rsmd.getColumnCount(); i++ )
                          {
                            System.out.println("FFFFF");
                              System.out.println("map.put("+rsmd.getColumnName(i)+","+rs.getString(i));
                            System.out.println("GGGGG"); 
                              map.put(rsmd.getColumnName(i), rs.getString(i));
                          }
                          list.add(map);
                  }
      

  24.   

    还有数据库用户名和密码,我觉的没有问题
    我以前用insert语句调用executeupdate函数的时候
    是可以连到数据库加数据的!
      

  25.   

    有点怀疑jdbc-odbc桥不支持rsmd.getColumnCount()方法(ft, 都是sun的东西-_-||)你可否换成我前面所说的微软jdbc驱动试试?
      

  26.   

    对不起,是我的错,应该从1开始而不是0,很久没写,忘了:for ( int i = 1; i <= rsmd.getColumnCount(); i++ )
    {
        map.put(rsmd.getColumnName(i), rs.getString(i));
    }
      

  27.   

    确实i的设置有错
    但是现在还没有完全正确,读这段代码时
    for ( int i = 1 ;i <= rsmd.getColumnCount(); i++ )
                          {
                            
                            System.out.println("FFFFF");
                              System.out.println("map.put("+rsmd.getColumnName(i)+","+rs.getString(i)+")");
                            System.out.println("GGGGG");
                              map.put(rsmd.getColumnName(i), rs.getString(i));
                            System.out.println("AAAAA");
                          }
    还是有错,dos中看这段代码是对的System.out.println("map.put("+rsmd.getColumnName(i)+","+rs.getString(i)+")");但是读到map.put(rsmd.getColumnName(i), rs.getString(i));这里时,报错
    我看put函数中加的两个都是object,但是两个get都是返回string,问题是不是在这里
    tomcat dos下报错是java.sql.SQLException:No data found
      

  28.   

    rs有getobject(i)函数
    但是rsmd我没有看到有类似能返回object的函数啊
    有没有返回object的函数啊???
      

  29.   

    No data found?难道拿到null数据?你用System.out.println(rsmd.getColumnName(i));
    System.out.println(rs.getString(i));看看是哪里得到null值。Map.put(Object, Object) 因为对象都会从Object类派生,是Object子类。所以任何对象都可以put进去。
      

  30.   

    想起来了,写成这样就可以:System.out.println("FFFFF");
    System.out.println("map.put(" + rsmd.getColumnName(i) + "," + (rs.getString(i)) == null ? "" : rs.getString(i)) + ")");
    System.out.println("GGGGG");
    map.put(rsmd.getColumnName(i), rs.getString(i) == null ? "" : rs.getString(i));
      

  31.   

    处理了rs.getString(i)为null的情况。
      

  32.   

    P兄,我的sqlserver坏了:(
    启动不起来了,光盘有放在公司,原来打算国庆做点东西的,埃
    看了只能等6号回去了不过还是十分感谢!
    过几天结贴送分.PS:你在哪里混啊
      

  33.   

    呵呵,如果你有宽带,可以下载。我在广州 :)SQL2000下载
    http://www.codestudy.net/download/list.asp?id=296
    http://www.codestudy.net/download/list.asp?id=287
    4合1
    http://www.bzmc.edu.cn/fdownload/Psql2k_4in1.iso
    ftp://youngcow.net/Special/Database/DatabaseServer/MSSQLServer/2000/SQL%20Server%202000%204in1en.iso
    ftp://219.138.202.212/codestudy/download/software/program/gbsqlserver.rar
    SQL SERVER 2000
    professional版
    http://cwb.crfeb5.com.cn/download/sql2000pro.rar
    server版
    http://www.fzgzs.com/download/SoftView/SoftView_122.html
    http://www.yc368.com/mdftr/view.asp?id=8SQL Server 2000 Service Pack 3a
    http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe补丁集
    http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766