虚心求教,关于捕获mysql的MySQLSyntaxErrorException,什是迷惑

Paripatetic 2006-04-08 11:56:18
我用JavaServlet动态查询mysql的表
当表不存在时则建立该表

我是先捕获MySQLSyntaxErrorException,然后再捕获SQLException (若不然系统报错,应该有继承关系吧)

但是当我用debug调试时(此时数据库中没有该表),直接跳到SQLException的catch里了,但是确显示异常是MySQLSyntaxErrorException

怎么回事?有类似经历的朋友赐教
...全文
1762 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzl32 2006-04-08
  • 打赏
  • 举报
回复
没见过这样的,你的程序会不会写得有问题
Paripatetic 2006-04-08
  • 打赏
  • 举报
回复
可是错误信息显示就是啊:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'bus.sysinfo' doesn't exist
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2822)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1536)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1626)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3031)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:943)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1049)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
at com.chinajsp.sunshine.bus.beans.InitDB.getUpdateInDB(InitDB.java:108)
at com.chinajsp.sunshine.bus.beans.InitDB.<init>(InitDB.java:60)
at org.apache.jsp.bus.ok_jsp._jspService(ok_jsp.java:54)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)
foxty 2006-04-08
  • 打赏
  • 举报
回复
MySQLSyntaxErrorException 汗,这个异常一看就知道是说语法错的。

不知道了搂住用的是什么版本的mysql驱动,我看了3.1.10的驱动包,里面根本没有这个异常。

建议你把代码贴出来看看。
ohbug 2006-04-08
  • 打赏
  • 举报
回复
是特定的数据库,你可以查询数据字典来判断有没有那个表,比你来捕获Exception要好多了。出现这样的情况,那个异常可能是系统异常,所以它会直接退出。
Paripatetic 2006-04-08
  • 打赏
  • 举报
回复
MySQLSyntaxErrorException 是mysql的jdbc驱动中的一个异常
没有表或字段就会抛出此异常
不知道为什么会忽略此异常
foxty 2006-04-08
  • 打赏
  • 举报
回复
MySQLSyntaxErrorException 这个信息应该是SQLException中的报错信息吧?

Paripatetic 2006-04-08
  • 打赏
  • 举报
回复
private void getUpdateInDB() {
PreparedStatement ps = null;
ResultSet rs = null;
String getInfoSql = "select * from sysinfo";
String createTableSql = "create table sysinfo(id int(6) unsigned not null auto_increment,stopnum int(6),linenum int(6),primary key(id)) type=InnoDB";

//读取表中的信息
try {
ps = conn.prepareStatement(getInfoSql);
rs = ps.executeQuery();
this.updateDate = Date.valueOf(rs.getString("update"));
this.stopNum = rs.getInt("stopnum");
this.lineNum = rs.getInt("linenum");
} catch(MySQLSyntaxErrorException e) {
//这里有问题,当表不存在时捕获SQLException,而不是MySQLSyntaxErrorException
//第一次运行,表不存在,建立新表
DatabaseManager.executeSql(createTableSql);

this.updateDate = Date.valueOf("1900-1-1");
} catch(SQLException e) {

e.printStackTrace();

}
finally {
try {
if(null != rs) rs.close();
if(null != ps) ps.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧