这个问题有两种可能,一种是我范了低级错误,另一种是确实存在这种奇怪的现像在windows下用Tomcat6.0 + myeclipse 6.0 +jdk 6.0开发的jsp网站,导出war文件,配置到linux上面后下现以下异常org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)从上面的异常根本看不出什么信息,所以我查看了tomcat的logs文件,发现以下错误tomcat的logs文件com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'dmt.Article' doesn't exist
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2934)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3178)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1203)
at db.CommonAccess.Query(CommonAccess.java:103)
at business.ArticleOperater.GetArticleById(ArticleOperater.java:50)很明显,是因为数据库中不存在Article表,我检查了一下数据库,确实不存在Article表,只有article表,因为linux下的msyql是严格区分大小写的,所以报了找不到Article表这个错误,
而且从异常中可以看到错误是出现在方法GetArticleById里面,以下是 Article GetArticleById(int articleId)的实现代码
public Article GetArticleById(int articleId)
{
CachedRowSetImpl rs=CommonAccessFactory.GetCommonAccess().Query("select * from Article where ArticleId="+Integer.toString(articleId));
Article article=new Article();
try
{
while(rs.next())
{
article.SetArticleId(rs.getInt("ArticleId"));
article.SetArticleContent(rs.getString("ArticleContent"));
article.SetArticleClass(rs.getInt("ArticleClass"));
article.SetArticleDatetime(rs.getString("ArticleDate"));
article.SetArticleTitle(rs.getString("ArticleTitle"));
}
}
catch(SQLException ex)
{
ex.printStackTrace();
}
return article;
}心想,只要把select * from Article中的Article改成article应该问题就解决了,修改之后重新生成工程,再export到war文件,上传至linux服务器,重启tomcat,问题依然存在
,为了确定不是因为ie存在缓存,我清空了ie的一切缓存和历史文件,问题依旧.为了确定不是因为没有完成生成,因为GetArticleById方法是在ArticleOperater.java文件里面的,所以我在linux服务器上查看了这个文件生成后的\WEB-INF\classes\business\ArticleOperater.class文件,内容如下GetArticleById (I)Lentity/Article; e java/lang/StringBuilder g &select * from article where ArticleId=
 d i   ;
 k m l java/lang/Integer  n o toString (I)Ljava/lang/String;
 d q  r s append -(Ljava/lang/String;)Ljava/lang/StringBuilder;
 d u  n v ()Ljava/lang/String;  articleId I 
SourceFile ArticleOperater.java !               /    
虽然里面很多是二进制,但是从中还是可以看出这句话" g &select * from article where ArticleId=
 d i   ;
 ",这证明了我的article表的表名已经成功改成小写了现在问题是为什么我的表名现在已经改成小写了,还是会把报Table 'dmt.Article' doesn't exist这个错误呢?难道linux硬是把我的小写转成大写再报大小写错误,雷人.如果是我的低级错误,请兄弟门帮我找出来,如果是确实存在这种现像,请高手解释解释,小小分数,不成敬意.

解决方案 »

  1.   

    你TomCat下的那个文件夹清空了吗。
      

  2.   

    work\Catalina下的,不过你后一次工程还是用的原来的名字吗,不是一个名字就肯定不会是这里的问题。
      

  3.   

    work\Catalina下面的对应目录已尝试清空,但问题依旧
      

  4.   


    已尝试过重新编译,而且我在linux服务器上查看了这个文件生成后的\WEB-INF\classes\business\ArticleOperater.class文件,内容如下 GetArticleById (I)Lentity/Article; e java/lang/StringBuilder g &select * from article where ArticleId= 
    d i  ; 
    k m l java/lang/Integer n o toString (I)Ljava/lang/String; 
    d q r s append -(Ljava/lang/String;)Ljava/lang/StringBuilder; 
    d u n v ()Ljava/lang/String; articleId I 
    SourceFile ArticleOperater.java !             /    
    虽然里面很多是二进制,但是从中还是可以看出这句话" g &select * from article where ArticleId= 
    d i  ; 
    ",这证明了我的article表的表名已经成功改成小写了