以下是LOG4J的配置文件:
log4j.rootLogger=DEBUG,DATABASE,A1
log4j.addivity.org.apache=true 
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/demo/ 
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver 
log4j.appender.DATABASE.user=root 
log4j.appender.DATABASE.password=000000
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') 
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n log4j:ERROR Failed to load driver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.apache.log4j.jdbc.JDBCAppender.setDriver(JDBCAppender.java:351)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:205)
at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:164)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:129)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:96)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:654)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:612)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:509)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:415)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:441)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:468)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:122)
at org.apache.log4j.Logger.getLogger(Logger.java:116)
at com.demo.gyl.Main.<clinit>(Main.java:9)
collectionRemovals=[] collectionUpdates=[]])
Hibernate: insert into person (name, password, age, id) values (?, ?, ?, ?)//这里明明已经把数据写数据库了。
测试代码:public class Main {
/**
 * Logger for this class
 */
private static final Logger logger = Logger.getLogger(Main.class); /**
 * @param args
 */
public static void main(String[] args) {
if (logger.isDebugEnabled()) {
logger.debug("main(String[]) - start"); //$NON-NLS-1$
} // TODO Auto-generated method stub
Operate o=new Operate();
Person p=new Person();
p.setAge(12);
p.setName("aaaa");
p.setPassword("aaaaaaa");
o.insert2(p); if (logger.isDebugEnabled()) {
logger.debug("main(String[]) - end"); //$NON-NLS-1$
}

}}

解决方案 »

  1.   

    沙发,没用过 MySQL 
    高手来解决
      

  2.   

    Operate o=new Operate();
    Person p=new Person();
    p.setAge(12);
    p.setName("aaaa");
    p.setPassword("aaaaaaa");
    o.insert2(p); 我的HIBERNATE插入没有问题。这个已经测试过了。而且,Hibernate: insert into person (name, password, age, id) values (?, ?, ?, ?)已经把PERSON对像保存。
    问题是,如果LOG4J的日志不能写入数据库。提示找不到DRIVER。
    我确认\lib里有驱动。mysql-connector-java-5.0.4-bin.jar
      

  3.   

    能将数据写入到数据库?
    看你的mysql的jar包是否导入,还有你的mysql jar包是否与其
    他jar包冲突了                                                   
      

  4.   

    楼主,你先建个类,试试,省点事,代码贴出来了,等你好消息import org.apache.log4j.Logger;   
      
    import javax.sql.DataSource;   
    import javax.naming.Context;   
    import javax.naming.InitialContext;   
    import java.sql.Connection;   
    import java.sql.SQLException;   
    import java.util.Vector;   
      
    /**  
    * 封装DataSource  
    *  
    * @version 1.0, 2005-9-16 11:18:44  
    */  
      
    public class DataSourcePackBean {   
         /**  
          * log4j  
          */  
         private Logger logger = Logger.getLogger(DataSourcePackBean.class);   
      
    //DataSourcePackBean.class日志记录器的名与类名相同;   
      
         /**  
          * 引用名  
          */  
         private String ref;   
      
         /**  
          * DataSource对象  
          */  
         private DataSource ds;   
      
         /**  
          * 保存当前DataSource对象中所有打开的Connection对象的引用。  
          */  
         private Vector openedConnections = new Vector();   
      
         /**  
          * 接收DataSource引用名,查找DataSource对象。  
          *  
          * @param ref DataSource引用名  
          */  
         protected DataSourcePackBean(String ref) {   
             this.ref = ref;   
             this.ds = lookup(ref);   
         }   
      
         public String getRef() {   
             return ref;   
         }   
      
         public int getActive() {   
             return openedConnections.size();   
         }   
      
         /**  
          * 打开一个连接  
          *  
          * @param username 连接数据库的登录用户名,如果为null,表示用默认用户连接  
          * @param password 连接数据库的登录密码  
          * @return  
          * @throws SQLException  
          */  
         public Connection getConnection(String username, String password) throws SQLException {   
             Connection conn = (username == null) ? ds.getConnection() : ds.getConnection(username, password);   
             // add to vector   
             openedConnections.add(conn);   
             // log   
             StringBuffer log = new StringBuffer();   
             log.append("Open").append(" a connection(").append(conn.hashCode()).append(") of [").append(ref).append("]\n");   
             log.append(openedConnections.size()).append(" connection").append(" in use");   
             logger.debug(log);   
             // return   
             return conn;   
         }   
      
         /**  
          * 关闭一个连接  
          *  
          * @param conn  
          * @throws SQLException  
          */  
         public void closeConnection(Connection conn) throws SQLException {   
             conn.close();   
             // remove from Vector   
             openedConnections.remove(conn);   
             // log   
             StringBuffer log = new StringBuffer();   
             log.append("Close").append(" a connection(").append(conn.hashCode()).append(") of [").append(ref).append("]\n");//添加内容到日志记录中   
             log.append(openedConnections.size()).append(" connection").append(" in use");   
             logger.debug(log);   
         }   
      
         /**  
          * close all Connection of this DataSource  
          * @throws SQLException  
          */  
         public void closeAll() throws SQLException {   
             for (int i = 0; i < openedConnections.size(); i++) {   
                 ((Connection)openedConnections.get(i)).close();   
             }   
             // clear Vector   
             openedConnections.removeAllElements();   
         }   
      
         /**  
          * get a DataSource  
          * @param ref the JNDI name of the DataSource  
          * @return  
          */  
         private DataSource lookup(String ref) {   
             DataSource dataSource = null;   
             // 查找ref数据源对象   
             try {   
                 Context env = new InitialContext();   
                 dataSource = (DataSource) env.lookup(ref);   
                 // 测试数据库有效性   
                 dataSource.getConnection().close();   
                 logger.debug(new StringBuffer().append("DataSource[").append(ref).append("] has been initialized successfully."));   
             } catch (Exception e) {   
                 e.printStackTrace();   
             }   
             // return   
             return dataSource;   
         }   
      
         public SQLRunnerIfc getSQLRunner(String username, String password) throws SQLException {   
             return new SQLRunner(username, password, this);   
         }   
      
         public SQLRunnerIfc getSQLRunner() throws SQLException {   
             return getSQLRunner(null, null);   
         }   
    }  
      

  5.   

    问题已经找到了。log4j.properties 里面关于DATABASE的配制里有多余的空格。
    在网上有很多人遇到了这个问题。但只有一个可以解决问题的贴子。希望大家不要犯同样的错了.但是新问题又来了.
    log4j:ERROR Failed to excute sql
    com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hibernate.c3p0.max_size' and c3p0-style property 'c3p0.max_size' have been set i' at line 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1316)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1235)
    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.log(Category.java:853)
    at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:216)
    at org.hibernate.connection.C3P0ConnectionProvider.warnPropertyConflict(C3P0ConnectionProvider.java:210)
    at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:125)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
    at com.demo.gyl.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31)
    at com.demo.gyl.Operate.insert2(Operate.java:53)
    at com.demo.gyl.Main.main(Main.java:25)
    SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
    Hibernate: insert into person (name, password, age, id) values (?, ?, ?, ?)
    SQL不能执行?
    但是我的数据库里已经有数据了.
    为什么报错?
      

  6.   

    仔细检查你的sql语句,提示sql语句有错了,把sql拿出来放到数据库执行一下
      

  7.   

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hibernate.c3p0.max_size' and c3p0-style property 'c3p0.max_size' have been set i'
    应该是你的配置出问题了
      

  8.   

    支持楼上的,现在的问题是hibernate的配置不正确。
      

  9.   

    如果不用LOG4J,只有HIBERNATE的话。是没有问题的。而且,我进行连续3000次插入测试也没有问题。只有用到LOG4J插入数据库时才报错,并且日志插入到表里了。
      

  10.   

    试试换一个高的版本mysql数据库驱动试试
      

  11.   

    http://www.dankomannhaupt.de/projects/index.htmlLog4j JDBCAppenderWhile searching for a Log4j appender that is capable of logging into a relational database, I first tried the org.apache.log4j.jdbc.JDBCAppender that ships with the Log4j distribution. Unfortunately, that one was not able to process logging messages that had characters like ' (single quote) and , (comma) in it, because of its simple nature. Looking further, I noticed an alternative JDBCAppender package from Thomas Fenner (Page empty). By providing interfaces for connection handling, table and column access and other goodies, it was able to log arbitrary messages. However, the version provided did not initially work with J2SE SDK 1.4 and the current Log4j version 1.2.9. After fixing the problems, the JDBCAppender works fine in our current project at arvato systems. I also changed the package names form com.klopotek.utils.log to org.apache.log4j.jdbcplus. The result is available to the public here. 
      

  12.   

    还没有解决吗?   >_<
      

  13.   

    1. 每行后面的确有很多空格;
    2. SQL语句里的单引号 是中文的  要换成英文的