请教一个问题,字段内容看着是空的,但是有长度,奇怪。

jakenlian 2015-09-28 10:01:38

按字段内容的长度排序,有长度,而且使用nvl函数也能知道字段并不为空,可以就是看不到内容。有可能是什么原因啊?真实奇怪。
...全文
353 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jakenlian 2015-09-28
  • 打赏
  • 举报
回复
下边是我的java代码,读取文件插入数据库部分。 通过wmxcn2000 的帮助,知道存的是什么了。 之前把所有的日志文件都删了,现在增加了一个判断,如果app超长就不删除了。 稍后我再截获到错误文件了,我分析下是什么问题。 谢谢诸位!
public void saveLog2(File file) throws Exception {
		HashMap<String, Object> parameters = new HashMap<String, Object>();
		if (file.isFile() && file.exists()) { // 判断文件是否存在
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					file), "UTF-8");// 考虑到编码格式
			BufferedReader bufferedReader = new BufferedReader(read);
			String lineTxt = null;
			boolean isDel = true;
			while ((lineTxt = bufferedReader.readLine()) != null) {
				if(!StringUtil.isBlank(lineTxt)){
					parameters.clear();//清空参数map
					String[] details = lineTxt.split("#");
					if(details.length==5){
						parameters.put("app",details[0]);
						parameters.put("username",details[1]);
						parameters.put("cznr",details[2]);
						parameters.put("czlx",details[3]);
						parameters.put("rq",details[4]);
					}else{//如果该行记录的日志内容按#分割后 长度不是5 全部写入备注
						parameters.put("bz", lineTxt);
					}
					if(parameters.get("app").toString().length()<100){//由于字段长度莫名奇妙很长 这里加限制
						CommonDao.dao.insert("szdgj_log_insert",parameters);
					}else{
						System.out.println("错误文件:"+file.getName());
						isDel = false;
					}
				}
			}
			read.close();
			if(isDel){//如果没有错误数据 删除文件 2015-09-28 11:16:43
				file.delete();
			}
			renderText("ok");
		} else {
			renderText("未找到文件");
		}
	}
卖水果的net 2015-09-28
  • 打赏
  • 举报
回复
通过 dump 得出来的是一大堆 0 ,这个 0 就是空字符,可以把它替换掉。replace 或 translate 都可以。 看你第二行,还是 102 , 119 这些,你对照一下 ascii 表,就是 f、w 这些字符。
jakenlian 2015-09-28
  • 打赏
  • 举报
回复
引用 6 楼 wmxcn2000 的回复:

-- 查看一下 ascii ,看看是什么东西。
select dump(app) , app from t


/汗 不知道这是什么
估计是java解析txt日志文件的时候造成的 要么是文件有问题 要么就是解析的方式不对
我看看 3q
jakenlian 2015-09-28
  • 打赏
  • 举报
回复
引用 5 楼 mayanzs 的回复:
一般是空格,可以使用trim()函数清除空格
select length(trim(t.app)) from szdgj_log t

卖水果的net 2015-09-28
  • 打赏
  • 举报
回复

-- 查看一下 ascii ,看看是什么东西。
select dump(app) , app from t
mayanzs 2015-09-28
  • 打赏
  • 举报
回复
一般是空格,可以使用trim()函数清除空格 select length(trim(t.app)) from szdgj_log t
jakenlian 2015-09-28
  • 打赏
  • 举报
回复
由于原表数据太多,我建了一个临时表。

临时表还是有长度的,但是通过plsql导出表,到处的sql里边就成空的了。


我的这些数据都是网站的后台,使用java读取日志文件,再通过mybatis插入的。
jakenlian 2015-09-28
  • 打赏
  • 举报
回复
引用 2 楼 chenfeng1122 的回复:
回车换行,或者空格
这个条件查一下就知道了
(regexp_count(app,chr(10))>0 or regexp_count(app,chr(13))>0)


空的。
陈灬风 2015-09-28
  • 打赏
  • 举报
回复
回车换行,或者空格 这个条件查一下就知道了 (regexp_count(app,chr(10))>0 or regexp_count(app,chr(13))>0)
sifadmwy 2015-09-28
  • 打赏
  • 举报
回复
是‘’这个吧 要想空就直接update null一下

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧