Web中遇到的几个问题

(一)mysql 中存放大的数据时字段类型

MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。

实际使用中根据需要存入的数据大小定义不同的BLOB类型。
需要注意的是:如果你存储的文件过大,数据库的性能会下降很多。

TINYBLOB

TINYTEXT
一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
BLOB


TEXT
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。

MEDIUMBLOB

MEDIUMTEXT
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
LONGBLOB

LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。



(二)log4j:ERROR Failed to excute sql


com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'messages' at row 1

      at com.mysql.jdbc.SQLError.convertShowWarningsToSQLWarnings(SQLError.java:717)

      at com.mysql.jdbc.MysqlIO.scanForAndThrowDataTruncation(MysqlIO.java:3031)

      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1812)

      at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)

      at com.mysql.jdbc.Connection.execSQL(Connection.java:3099)

      at com.mysql.jdbc.Statement.executeQuery(Statement.java:1169)

      at com.mysql.jdbc.SQLError.convertShowWarningsToSQLWarnings(SQLError.java:710)

      at com.mysql.jdbc.MysqlIO.scanForAndThrowDataTruncation(MysqlIO.java:3031)

      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1812)

      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:251)

      at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)

      at org.apache.log4j.Category.callAppenders(Category.java:206)

      at org.apache.log4j.Category.forcedLog(Category.java:391)

      at org.apache.log4j.Category.log(Category.java:856)

      at org.apache.commons.logging.impl.Log4JLogger.debug(Log4JLogger.java:137)

      at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:366)

      at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)

      at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1158)

      at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)

      at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)

      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)

      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

      at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)

      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)

      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)

      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)

      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

      at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)

      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)

      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)

      at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)

      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)

      at java.lang.Thread.run(Thread.java:595)



网上遇到此情况的解决方法:

   1. 我遇到的问题是使用mysql时候:插入中文时,插不进去显示:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column。所以,我统一的将所有的字符编码都改成utf-8,包括连接数据库的url和页面的编码都用utf-8 (我的意思是:要统一就都统一,也可都用gbk,当然如果你要国际化就都要用utf-8)包括my.ini里面的.而且在建立数据库的时候,也要设定为utf-8。因为我的mysql用的是图形化的界面,所以建立表的时候要设定Charset和Collation,这样就ok了。



   2. JDBC异常信息:Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'body' at row 1。确认数据不可能过长的情况下,应该是字符集的问题。Collation 项为 gbk_chinese_ci。因此,MYSQL JDBC连接参数要设置为一致:jdbc:mysql://localhost:3406/db?useUnicode=true&characterEncoding=gbk。



不过,我的问题应该是数据过长,存入大量的数据,所以应该把存放字段的类型改为LongText就解决问题了。



(三)log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).

log4j:WARN Please initialize the log4j system properly.


少一个log4j.properties文件,将log4j.properties放到 /WEB-INF/classes中。同时我也放在了src目录下。不过,如果日志中的级别为DEBUG时候,启动tomcat的过程相当慢,控制台有大量的输出。log4j属性文件如放置在WEB-INF/classes目录或WEB-INF等目录中最好改名,因为在加载此Servlet之前,服务器如 tomcat启动时会自动搜索WEB-INF目录和web-inf/classes目录中log4j.properties文件,如有则自动加载。更改log4j属性文件名字或者更改其存放位置,让其不能自动加载了,不过还是有两个警告。

(四)java.io.FileNotFoundException :properties (The system cannot find the file specified)

log4j参数中采用了相对路径的写法,自动加载配置便会出错。所以,推荐用全路径或是绝对路径。



(五)Eclipse中如何修改properties等文件的编码



window-->Preferences-->General-->Content Types-->text-->Java Properties File-->Default encoding-->输入utf-8

就支持在properties文件中写中文注释了! 其他类型文件的Default encoding同样设置!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值