4

どうすればエラーを修正できますか?

log4j.properties

    # Define the root logger with appender file
log4j.rootLogger = ALL, DB

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/youtube

# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver

# Set database user name and password
log4j.appender.DB.user=root
log4j.appender.DB.password=root

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO logs VALUES('%x','%d','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

jdbcAppender.java

public class jdbcAppender{
  /* Get actual class name to be printed on */
  static Logger log = Logger.getLogger(jdbcAppender.class.getName());

  public static void main(String[] args) throws IOException,SQLException{

     log.debug("Debug");
     log.info("Info");
  }
}

データベース

ここに画像の説明を入力してください

エラー

ここに画像の説明を入力してください

4

4 に答える 4

3

使用している MySQL のバージョンによっては、フィールドを定義して、秒未満の値をDATED受け入れることができるようにする必要があります。DATETIMEデフォルトでは、DATETIME値を として受け入れますYY-MM-DDDD HH:MM:SS

ここでそれについて読んでください:http://dev.mysql.com/doc/refman/5.6/en/date-and-time-literals.html#date-and-time-standard-sql-literals

遭遇する可能性のあるもう 1 つの問題は、MySQL が分数の区切り文字が.コンマではなくドット () であることを想定しているという事実です。例外のスタック トレースは、システムのロケールから派生したと思われる区切り記号としてコンマを示しています。

于 2012-11-17T21:24:41.280 に答える
2

insert ステートメントを変更して、日付文字列を次のような適切な日時に変更できます。

log4j.appender.DB.sql=INSERT INTO logs VALUES('%x',STR_TO_DATE( '%d', '%Y-%M-%d %H:%i' ),'%C','%p','%m')

これは適切な形式ではありませんが、別のアプローチのアイデアにすぎません。

私は mysql のミリ秒処理を調べていますが、日付文字列は次のようになっています: '2012-11-17 16:07:29,995', 995 の部分はミリ秒ですか、それとも 29,995 の部分は 10 進数の秒ですか?

于 2012-11-17T22:14:24.410 に答える
1
log4j.appender.DB.sql=INSERT INTO logs VALUES('%x','%d','%C','%p','%m')

の中へ

log4j.appender.DB.sql=INSERT INTO logs VALUES('%x','%d{yyyy-MM-dd HH:mm:ss}','%C','%p','%m')
于 2015-02-04T05:44:24.310 に答える