一个表的一个字段url(text)的数据太长导致update这个字段发生错误如下 SQL Exception: Data truncation: Data too long for column 'url' at row 1
java.sql.BatchUpdateException: Data truncation: Data too long for column 'url' at row 1
由于没有加上log日志,导致珍贵的错误数据无法再现。
现在想在我的java +mysql 代码 加上log4j的错误异常写到日志里 。
具体我不知道如何配置,如何在java代码的try catch里抓到这个
update a set url=‘。’语句的错误表达。(我查看官方文档 text达到65536应该不是长度限制 我估计还是其他原因造成的)。如何使用java的文本日志来catch里抓到这个无法执行的sql语句。
解决方案 »
- 请问各位这个import s2Jsp.sg.ch03ConnectionManager;他是想导入什么东西啊??
- java socket 长连接问题
- 怎么定制自己的NetBeans中JDialog的左上角图片?请问大虾啊!急问阿!
- java 制作托盘 图标闪烁实现
- HttpServletRequest里的getParameterValues用法?(request.getParameterValues)
- 一个日期格式转换的问题??
- 考过SCJP的大哥请进!!跟帖有分
- help1.3!!!
- 有个.toCharArray()的问题
- 数据迁移问题,求大家给建议
- FrameListener
- 又一个关于数组查询
不用在url里写
action直接可以用request.getP。
获取到
PreparedStatement prep = conn.prepareStatment("update a set url=?...");
StringReader reader = new StringReader(url);
prep.setCharacterStream(1, reader, url.length());
prep.executeUpdate();这样才是最好的写法,拼SQL语句最好能不用就不用。否则SQL注入等一堆问题
log.info(sql); system.out.println(sql);
}
前面是update a set nam=? and dis=? and startdate=? and enddate=?
ps.setLong(psIndex++, event.getId());
ps.setObject(psIndex++, event.getName());
ps.setLong(psIndex++, event.get());
ps.setObject(psIndex++, event.getStartDate());
ps.setObject(psIndex++, event.getEndDate());
ps.execute();
并不是那种 给个sql 之后ps.execute(sql)方式的(如果那样 就好了 实际情况要复杂很多倍);
请问这种方式可以获得sql语句吗???
ps.setLong(psIndex++, event.getId());
ps.setObject(psIndex++, event.getName());
ps.setLong(psIndex++, event.get());
ps.setObject(psIndex++, event.getStartDate());
ps.setObject(psIndex++, event.getEndDate());
ps.execute();
这个sql 语句如何可以得到? (我得到以后 才能写到日志文本)
是如何得到这个sql的问题
就没有 SQL 语句了。如果你要求不是很高的话可以试着使用其他的方法,这种方法只能看看,并不是真正意义上的 SQL,
需要 JDK 5 或以上的版本:import org.apache.log4j.Logger;public class Test6 {
private final static Logger LOG = Logger.getLogger(Test6.class);
public static void main(String[] args) {
String sql = "update a set nam=? and dis=? and startdate=? and enddate=?";
Long id = 1L;
String name = "abc";
Long get = 5L;
Date startDate = new Date();
Date endDate = new Date();
if(LOG.isInfoEnabled()) {
putLog(LOG, "SQL:", sql, id, name, get, startDate, endDate);
}
}
public static void putLog(Logger log, String prefix, String sql, Object... objs) {
if(log.isInfoEnabled()) {
log.info(prefix + " " + String.format(sql.replace("?", "%s"), objs));
}
}
}
得到数据也可以的