见鬼了,急急急,100分!!!SQLite从数据库中读取数据特别奇怪的现象,请高手指教下!

softwarexiang120 2011-01-04 03:07:04
使用SSH在开发项目中使用了一条查询语句:数据库为SQLite

select * from method where name like '%delete%';
把这条语句直接在工具中执行时数据为:
name id modulename tmp sign format

delete_all 5002 IP::Interface::Ne delete_all 0 "undo interface %name%"

但是从程序中执行后打印的数据为:
name id modulename tmp sign format

delete_all 5002 IP::Interface::Ne delete_all 0 0


format 这列的值总是0,输出到页面上当然也是0;

真不知道是为什么,请高手指教。还有谁遇到相似的问题了吗?


...全文
145 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
vc_zj 2011-01-11
  • 打赏
  • 举报
回复
最近也要研究这个问题了
iihero_ 2011-01-05
  • 打赏
  • 举报
回复
应该是表结构定义的问题,表中定义的可能是整型,插入了字符串,SSH试图取出整数,于是杯具。。。。
WWWWA 2011-01-05
  • 打赏
  • 举报
回复
估计是自动进行转换的
wwwwb 2011-01-05
  • 打赏
  • 举报
回复
检查两表FORMAT列类型是否一致,
update method set format = (select format from ctmpinfo where ctmpinfo.name=method.tmp);
执行后FORMAT列内容是否正确,
你是怎样取FORMAT列内容的
softwarexiang120 2011-01-05
  • 打赏
  • 举报
回复
不会的进来看看也无妨啊,进来都有分得。。。
这种问题最好不要遇到!!!
softwarexiang120 2011-01-05
  • 打赏
  • 举报
回复
问题还未解决,大家帮忙顶下啊!!!
softwarexiang120 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 iihero 的回复:]
应该是表结构定义的问题,表中定义的可能是整型,插入了字符串,SSH试图取出整数,于是杯具。。。。
[/Quote]

真是杯具,今天问题还未解决。我在提供些信息给大家吧,可能会对解决问题有所帮助。

问题是这样产生的:
我有一张表ctmpinfo,format这列本身是属于它的,但是我现在需要把format这列的数据根据条件插入到表method中,于是我给method中先增加了一列format数据类型和ctmpinfo表中format类型一致,然后执行下面这条SQL。
update method set format = (select format from ctmpinfo where ctmpinfo.name=method.tmp);

然后我数据按照条件都插入了,但是查询method表时format这列的数据打印出来就是0,从数据库中查实际值是一串字符串。

希望大侠们想想有什么办法解决。

我自己认为可能是这条SQL插入数据时出现类型的问题,现在想到解决办法是通过程序执行update语句对method表中format列插入数据,不使用这条SQL了。
白云飘飘飘 2011-01-04
  • 打赏
  • 举报
回复
sqlite采用动态数据类型,不同记录的同一字段可能存储的是不同的类型,比如format声明为integer,如果存入的是整数,则会按预期的存为integer类型,如果存入的是字符串且不能转换为整数,则存为blob类型,这时如果按整数的方法去读,字符串的内容就无法读出了。如果问题是这样的话,把format声明为TEXT或BLOB。
softwarexiang120 2011-01-04
  • 打赏
  • 举报
回复
这种现象太奇怪了。请大侠们看下啊。
softwarexiang120 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 acmain_chm 的回复:]
与保留字,或SQL语句没有关系。 从你一开始的问题描述就可以知道。记录是返回了,只不过是其中一个字段你取得的内容不对。
最大的可能是你的C语句把数据类型判断错了。

建议你显示的转换一下这个字段的数据类型。
[/Quote]
可能真是数据类型有问题了,format这列值数据类型是Integer的,如果这列的数据都是整形就可以正常显示,但是如果是字符串就会出现为0的现象。
但是更奇怪的是我打印的format列数据中有些也是字符串的就可以读出来有些却为0;
WWWWA 2011-01-04
  • 打赏
  • 举报
回复
返回的字段类型与变量类型是否一致
ACMAIN_CHM 2011-01-04
  • 打赏
  • 举报
回复
与保留字,或SQL语句没有关系。 从你一开始的问题描述就可以知道。记录是返回了,只不过是其中一个字段你取得的内容不对。
最大的可能是你的C语句把数据类型判断错了。

建议你显示的转换一下这个字段的数据类型。
softwarexiang120 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwa 的回复:]
delete是SQLITE的保留字,更换1个变量名 OR 字符串试试,比如ABC
String sql = "select * from method where name like '%ABC%' ";
[/Quote]

字符串换成其它的字符也是一样的,应该不是这个问题。
WWWWA 2011-01-04
  • 打赏
  • 举报
回复
语句在SQLITE中执行没有任何问题:SQL语句没有问题,应该是代码问题
ACMAIN_CHM 2011-01-04
  • 打赏
  • 举报
回复
显然不是你的SQL语句的问题。应该是你的代码中的问题。检查一下obj[k]的数据类型。
WWWWA 2011-01-04
  • 打赏
  • 举报
回复
delete是SQLITE的保留字,更换1个变量名 OR 字符串试试,比如ABC
String sql = "select * from method where name like '%ABC%' ";
softwarexiang120 2011-01-04
  • 打赏
  • 举报
回复
从控制台打印的结果中format这列的值就为0了。
softwarexiang120 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwa 的回复:]
直接在SQLITE中执行,是否有问题,你的程序代码是什么
[/Quote]

语句在SQLITE中执行没有任何问题,format这列的值可以正常呈现。

程序中代码段:
String sql = "select * from method where name like '%delete%' ";
SQLQuery sQuery=session.createSQLQuery(sql);
for(Iterator iterator=sQuery.list().iterator();iterator.hasNext();)
{
Object[] obj=(Object[])iterator.next();
System.out.println(sQuery.list().size());
System.out.println(obj.length);
for(int k=0;k<obj.length;k++)
{
System.out.print(obj[k]+"\t");
}
System.out.println();
}
}

我做的是模糊查询,delete是任意输入的一个变量名,我在这里写死了测试下。
白云飘飘飘 2011-01-04
  • 打赏
  • 举报
回复
程序中的取读代码是什么?
WWWWA 2011-01-04
  • 打赏
  • 举报
回复
delete是变量?
加载更多回复(2)

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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