最近几天老犯什么的错误,急死我了,大家来看看这是咋回事呀.
这是一个log4j配置文件,高手们,请给我分析一下哪处错了,
log4j.logger.bookstoreLogger=ERROR,db
log4j.additivity.bookstoreLogger=falselog4j.rootLogger=ERROR,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.SimpleLayoutlog4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
log4j.appender.db.URL=jdbc:microsoft:sqlserver://localhost:1433;databaseName=bookstore
log4j.appender.db.user=sa
log4j.appender.db.password=log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.sql=insert into logs(log_date,log_logger,log_level,log_msg) values('%d','%c','%p','%m')
数据库里的字段定义是:
create table logs(
log_date datetime not null,
log_logger varchar(20) not null,
log_level varchar(5) not null,
log_msg varchar(200) not null);
运行tomcat后出现如下错误:
ERROR - 数据库操作失败!java.sql.SQLException: [Microsoft][SQLServer 2000 Driver
for JDBC][SQLServer]DELETE 语句与 COLUMN REFERENCE 约束 'FK__employee__job_id__1
BFD2C07' 冲突。该冲突发生于数据库 'pubs',表 'employee', column 'job_id'。(注:这是由根日志产生的输出)
log4j:ERROR Failed to excute sql
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第
1 行: 'FK__employee__job_id__1BFD2C07' 附近有语法错误。
        at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
        at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
        at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown
 Source)
        at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown
 Source)
        at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(
Unknown Source)
        at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Sour
ce)
        at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType
(Unknown Source)
        at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown
 Source)
        at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)        at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
        at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown S
ource)
        at com.microsoft.jdbc.base.BaseStatement.executeUpdate(Unknown Source)
        at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:178)
        at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:250)        at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:146)
        at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)        at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders
(AppenderAttachableImpl.java:65)
        at org.apache.log4j.Category.callAppenders(Category.java:203)
        at org.apache.log4j.Category.forcedLog(Category.java:388)
        at org.apache.log4j.Category.error(Category.java:302)
        at DBException.doGet(DBException.java:40)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:214)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:825)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:738)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:526)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
        at java.lang.Thread.run(Thread.java:595)
是哪里出了问题啊,知道的告诉我一下啊.

解决方案 »

  1.   

    可是我建的那个表里没有与这个'FK__employee__job_id__1BFD2C07' 有相关的字段呀,
    ”ERROR - 数据库操作失败!java.sql.SQLException: [Microsoft][SQLServer 2000 Driver
    for JDBC][SQLServer]DELETE 语句与 COLUMN REFERENCE 约束 'FK__employee__job_id__1
    BFD2C07' 冲突。该冲突发生于数据库 'pubs',表 'employee', column 'job_id'。“
    这个输出只是因为开始执行删除操作后,违反约束,而抛出的异常,用Logger来用控制台打印的。
    后来想把这个异常存放到娄据库,不知道,怎么一回事,上面那个错误中的说什么''FK__employee__job_id__1BFD2C07'在下面这个执行sql时也说犯这个错,我真是不明白了,
    因为我下面要插入的所建的表可是与“'FK__employee__job_id__1BFD2C07'可是一点关系没有啊。
    大家快来帮我解解惑啊。
      

  2.   

    我明白了,
    因为要插入的log_msg的%m中含有单引号('),所以在一定程度上才产生误导了.只要把它过滤或者其它代换的方式就行了.
    谢谢ladofwind(随风)您的参与!!