我用log4j写入文件都正常,但写入数据库老是失败
大家看我有配置文件有什么问题,希望大家
jdbc.properties
#log4j.logger.bookstoreLogger=ERROR,db
#定义一个名字为db的Appender,它的类型是JDBCAppender。
#log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
#指定MySQL数据库的JDBC驱动。
#log4j.appender.db.driver=com.mysql.jdbc.Driver
#指定数据库连接的URL。
#log4j.appender.db.URL=jdbc:mysql://localhost:3306/bookstore
#指定连接数据库的用户名。
#log4j.appender.db.user=root
#指定连接数据库的用户密码。
#log4j.appender.db.password=123456
#指定被log4j执行的插入日志信息的SQL语句。
#log4j使用为这个Appender指定的Layout,依次用实际的值来替换SQL语句中的模式匹配。
#log4j.appender.db.sql=insert into logs(log_date,log_logger,log_level,log_msg) values('%d', '%c', '%p', '%m')
#db Appender使用的Layout的是PatternLayout。
#log4j.appender.db.layout=org.apache.log4j.PatternLayout
java文件
package org.sunxin.lesson.jsp.ch21;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.*;
public class DBExceptionServlet extends HttpServlet
{
static Logger logger=Logger.getRootLogger();
static Logger bookLogger=Logger.getLogger("bookstoreLogger");
public void init() throws ServletException
{
String prefix=getServletContext().getRealPath("/");
String file=getInitParameter("log4j-init-file");
System.out.println("success1!");
System.out.println(prefix);
System.out.println(file);
if(file != null)
{
PropertyConfigurator.configure(prefix+file);
System.out.println("success2!");
}
try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("success3!");
}
catch(ClassNotFoundException ce)
{
throw new UnavailableException("加载数据库驱动失败!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException
{
Connection conn=null;
Statement stmt=null;
try
{
System.out.println("success4!");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore","root1","123456");
stmt=conn.createStatement();
System.out.println("success5!");
//stmt.executeUpdate("insert into bookinfo values(1,'JSP深入编程','李四','李四出版社','2004-10-1',56.00,20,null)");
System.out.println("success6!");
}
catch(SQLException se)
{ System.out.println("success7!");
logger.error("数据库操作失败! "+se);
System.out.println("success8!");
bookLogger.error("数据库操作失败! "+se);
System.out.println("success9!");
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"数据库操作出现问题,请联系管理员。");
}
finally
{
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException se)
{
bookLogger.error("关闭Statement失败!",se);
}
stmt=null;
}
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException se)
{
bookLogger.error("关闭数据库连接失败!",se);
}
conn=null;
}
}
}
}
说明用户为root我故意写成root1造成错误
tomact错误提示在success8!与success9!之间
success8!
log4j:ERROR Failed to excute sql
com.mysql.jdbc.exceptionl.jdbc4..........for the right syntax to use near 'root1'@'localhost' <using password:YES>'>'at line 1
at ....
.....
ERROR - 数据库操作失败!java.slq.SQLException:Access dnied for user 'root1'@'localhost'<useing password:YES>
13 个解决方案
#1
连接数据库的用户名不是错了么?
都连接不上数据库
还谈什么插入日志记录?
都连接不上数据库
还谈什么插入日志记录?
#2
配置文件中的是对的,log4j用是的配置文件中信息
就是让java程序出错,然后把出错信息插入数据库中
就是让java程序出错,然后把出错信息插入数据库中
#3
说的不是很清楚,再解释一下
#4
log4j写的那个数据库能连接上吗?如果不能也插不进去
#5
//stmt.executeUpdate("insert into bookinfo values(1,'JSP深入编程','李四','李四出版社','2004-10-1',56.00,20,null)");
程序看起来没有问题,我就看你这注释掉了,是不是执行的时候注释没有去掉,所以没有插入数据?
程序看起来没有问题,我就看你这注释掉了,是不是执行的时候注释没有去掉,所以没有插入数据?
#6
Access dnied for user
数据库没连上啊
数据库没连上啊
#7
谢谢大家我找出错误的地方了,但是我想不通为什么会这样
就是这个地方:bookLogger.error("数据库操作失败! "+se);
把+se去掉就正常了,但这样就没有意义了,我就是想让出错相关信息加入到数据库,
就是这个地方:bookLogger.error("数据库操作失败! "+se);
把+se去掉就正常了,但这样就没有意义了,我就是想让出错相关信息加入到数据库,
#8
你显示的调用se.toString()试下?
#9
up
#10
谢谢你,我知道原因了,se中有一些特殊符号'都,我没有处理,mysql插入时报错
#11
数据库没有连上
#12
刚看到谢谢指导!
#13
不会用log4j,学习
#1
连接数据库的用户名不是错了么?
都连接不上数据库
还谈什么插入日志记录?
都连接不上数据库
还谈什么插入日志记录?
#2
配置文件中的是对的,log4j用是的配置文件中信息
就是让java程序出错,然后把出错信息插入数据库中
就是让java程序出错,然后把出错信息插入数据库中
#3
说的不是很清楚,再解释一下
#4
log4j写的那个数据库能连接上吗?如果不能也插不进去
#5
//stmt.executeUpdate("insert into bookinfo values(1,'JSP深入编程','李四','李四出版社','2004-10-1',56.00,20,null)");
程序看起来没有问题,我就看你这注释掉了,是不是执行的时候注释没有去掉,所以没有插入数据?
程序看起来没有问题,我就看你这注释掉了,是不是执行的时候注释没有去掉,所以没有插入数据?
#6
Access dnied for user
数据库没连上啊
数据库没连上啊
#7
谢谢大家我找出错误的地方了,但是我想不通为什么会这样
就是这个地方:bookLogger.error("数据库操作失败! "+se);
把+se去掉就正常了,但这样就没有意义了,我就是想让出错相关信息加入到数据库,
就是这个地方:bookLogger.error("数据库操作失败! "+se);
把+se去掉就正常了,但这样就没有意义了,我就是想让出错相关信息加入到数据库,
#8
你显示的调用se.toString()试下?
#9
up
#10
谢谢你,我知道原因了,se中有一些特殊符号'都,我没有处理,mysql插入时报错
#11
数据库没有连上
#12
刚看到谢谢指导!
#13
不会用log4j,学习