SQLITE3过程中,是否遇到过模糊查询(Like)的麻烦

帖子主题:大家在用SQLITE3过程中,是否遇到过模糊查询(Like)的麻烦?...
帅哥,离线
  • 等级:略有小成
  • 积分:289
  • 金钱:150
  • 帖数:26
  • 注册:2007-9-14
第 11 楼
查看tty1a的资料 给tty1a发短信 加tty1a为好友 编辑 引用
问题已经解决,不是出在查询方面,是出在插入方面,不能直接用sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );,使用了如下方式插入数据就正常了。



。。。
char *sql = "INSERT INTO /"ca01/" VALUES( '001' , ? , '1111111' , '222');" ;
sqlite3_stmt * stmt;

sqlite3_prepare ( db, sql, strlen ( sql), &stmt, NULL );
sqlite3_bind_text(stmt, 1,"深圳市宝安区爱华产品经销部", 256, SQLITE_TRANSIENT);
sqlite3_step ( stmt );
。。。

非常感谢各位热心的朋友。


淡去的烟味
    2007-11-2 19:02:21
<script type="text/JavaScript"> var yahoo_pid="un_52773_769_19"; var yahoo_bgcolor="FFFFFF"; var yahoo_bordercolor="FFFFFF"; var yahoo_titlecolor="000000"; var yahoo_width=980; var yahoo_height=20; var yahoo_rows=1; var yahoo_cols=5; var yahoo_Halign="center"; var yahoo_Valign="middle"; var yahoo_simple=1; var yahoo_iniframe=1; </script> <script src="http://cm.p4p.cn.yahoo.com/inf.js" type="text/javascript"></script> border="0" marginwidth="0" marginheight="0" src="http://cm.p4p.cn.yahoo.com/cm?u=http%3A%2F%2Fwww.sqlite.com.cn%2Fbbs%2Ftopicdisp.asp%3Ftid%3D674%26topage%3D2&i=un_52773_769_19&w=980&h=20&t=&s=&bg=FFFFFF&bd=FFFFFF&tc=000000&dc=&lc=&am=&l=&ib=&ad=&tb=&db=&si=1&ro=1&co=5&ha=center&va=middle&kbg=&kc=&hlc=&hlt=&hld=&lbg=&rbg=&st=&had=&vad=&k=sqlite%E4%B8%AD%E6%96%87%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2&dt=%E5%9F%BA%E4%BA%8ESQLite%E7%9A%84%E7%BC%96%E7%A8%8B%20-%20%E5%A4%A7%E5%AE%B6%E5%9C%A8%E7%94%A8SQLITE3%E8%BF%87%E7%A8%8B%E4%B8%AD%2C%E6%98%AF%E5%90%A6%E9%81%87%E5%88%B0%E8%BF%87%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2(Like)%E7%9A%84%E9%BA%BB%E7%83%A6%EF%BC%9F...%20-%20%5BSQLite%E4%B8%AD%E6%96%87%E7%A4%BE%E5%8C%BA%5D&r=http%3A%2F%2Fwww.google.cn%2Fsearch%3Fhl%3Dzh-CN%26q%3Dsqlite%25E4%25B8%25AD%25E6%2596%2587%25E6%25A8%25A1%25E7%25B3%258A%25E6%259F%25A5%25E8%25AF%25A2%26meta%3D&mk=python%2Cpython%2C%E5%BC%80%E5%8F%91%2Cpython%E7%BC%96%E7%A8%8B%2Csqlite%2C%E5%BC%80%E6%BA%90%2Copenssl%2CSQLite%2C%E5%BC%80%E5%8F%91%2CSQLite%2C%E6%95%B0%E6%8D%AE%E5%BA%93%2CSQLite%2C%E4%B" frameborder="0" width="980" scrolling="no" height="20">
帅哥,离线
  • 等级:初窥门径
  • 积分:35
  • 金钱:19
  • 帖数:4
  • 注册:2007-5-11
第 12 楼
查看myb123的资料 给myb123发短信 加myb123为好友 编辑 引用
tty1a兄弟:
我照你的做了,但还是查不到,急啊,帮帮忙啊。最好贴出完整的代码啊。
    2007-11-5 0:05:15
<script type="text/JavaScript"> var yahoo_pid="un_52773_769_19"; var yahoo_bgcolor="FFFFFF"; var yahoo_bordercolor="FFFFFF"; var yahoo_titlecolor="000000"; var yahoo_width=980; var yahoo_height=20; var yahoo_rows=1; var yahoo_cols=5; var yahoo_Halign="center"; var yahoo_Valign="middle"; var yahoo_simple=1; var yahoo_iniframe=1; </script> <script src="http://cm.p4p.cn.yahoo.com/inf.js" type="text/javascript"></script> border="0" marginwidth="0" marginheight="0" src="http://cm.p4p.cn.yahoo.com/cm?u=http%3A%2F%2Fwww.sqlite.com.cn%2Fbbs%2Ftopicdisp.asp%3Ftid%3D674%26topage%3D2&i=un_52773_769_19&w=980&h=20&t=&s=&bg=FFFFFF&bd=FFFFFF&tc=000000&dc=&lc=&am=&l=&ib=&ad=&tb=&db=&si=1&ro=1&co=5&ha=center&va=middle&kbg=&kc=&hlc=&hlt=&hld=&lbg=&rbg=&st=&had=&vad=&k=sqlite%E4%B8%AD%E6%96%87%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2&dt=%E5%9F%BA%E4%BA%8ESQLite%E7%9A%84%E7%BC%96%E7%A8%8B%20-%20%E5%A4%A7%E5%AE%B6%E5%9C%A8%E7%94%A8SQLITE3%E8%BF%87%E7%A8%8B%E4%B8%AD%2C%E6%98%AF%E5%90%A6%E9%81%87%E5%88%B0%E8%BF%87%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2(Like)%E7%9A%84%E9%BA%BB%E7%83%A6%EF%BC%9F...%20-%20%5BSQLite%E4%B8%AD%E6%96%87%E7%A4%BE%E5%8C%BA%5D&r=http%3A%2F%2Fwww.google.cn%2Fsearch%3Fhl%3Dzh-CN%26q%3Dsqlite%25E4%25B8%25AD%25E6%2596%2587%25E6%25A8%25A1%25E7%25B3%258A%25E6%259F%25A5%25E8%25AF%25A2%26meta%3D&mk=python%2Cpython%2C%E5%BC%80%E5%8F%91%2Cpython%E7%BC%96%E7%A8%8B%2Csqlite%2C%E5%BC%80%E6%BA%90%2Copenssl%2CSQLite%2C%E5%BC%80%E5%8F%91%2CSQLite%2C%E6%95%B0%E6%8D%AE%E5%BA%93%2CSQLite%2C%E4%B" frameborder="0" width="980" scrolling="no" height="20">
帅哥,离线
  • 等级:初窥门径
  • 积分:35
  • 金钱:19
  • 帖数:4
  • 注册:2007-5-11
第 13 楼
查看myb123的资料 给myb123发短信 加myb123为好友 编辑 引用
tty1a兄弟: 我的代码如下,但还是只查到0条记录.

sqlite3 *db=NULL;
char *errmsg = 0;
int result;
result = sqlite3_open("my.db", &db);


char sz[] = "CREATE TABLE [ca01] ( [a] text NULL, [b] text NULL, [c] text NULL, [d] text NULL)";
result = sqlite3_exec(db, sz, NULL, NULL, &errmsg);

char *sql = "INSERT INTO /"ca01/" VALUES( '001' , ? , '1111111' , '222');" ;
sqlite3_stmt * stmt;

sqlite3_prepare ( db, sql, strlen ( sql), &stmt, NULL );
sqlite3_bind_text(stmt, 1,"深圳市宝安区爱华产品经销部", 256, SQLITE_TRANSIENT);
sqlite3_step ( stmt );

char **dbResult;
int nRow, nColumn, i , j, index;

result = sqlite3_get_table( db, "select * from ca01 WHERE b like '%%爱华%%' ", &dbResult, &nRow, &nColumn, &errmsg );

if ( SQLITE_OK == result )
{
index = nColumn;

TRACE( "查到%d条记录/n", nRow );

for( i = 0; i < nRow ; i++ )
{
TRACE( "第 %d 条记录/n", i+1 );
for( j = 0 ; j < nColumn; j++ )
{
TRACE("字段名:%s -> 字段值:%s/n", dbResult[j], dbResult [index] );
++index;
}
TRACE("-------/n" );
}
}

sqlite3_free_table( dbResult );
sqlite3_close(db);

    2007-11-5 0:35:00
<script type="text/JavaScript"> var yahoo_pid="un_52773_769_19"; var yahoo_bgcolor="FFFFFF"; var yahoo_bordercolor="FFFFFF"; var yahoo_titlecolor="000000"; var yahoo_width=980; var yahoo_height=20; var yahoo_rows=1; var yahoo_cols=5; var yahoo_Halign="center"; var yahoo_Valign="middle"; var yahoo_simple=1; var yahoo_iniframe=1; </script> <script src="http://cm.p4p.cn.yahoo.com/inf.js" type="text/javascript"></script>
帅哥,离线
  • 等级:略有小成
  • 积分:289
  • 金钱:150
  • 帖数:26
  • 注册:2007-9-14
第 14 楼
查看tty1a的资料 给tty1a发短信 加tty1a为好友 编辑 引用
近日忙,没能及时回来深感抱歉,你查不到,估计问题出在使用了sqlite3_get_table来查,请试着使用绑定的方式。对于sqlite3_get_table要慎用甚至不用。

以下的方式可以查到:

sqlite3 *db=NULL;
int rc = sqlite3_open("data.db", &db ); //打开指定的数据库文件
if( rc )
{
ShowMessage( sqlite3_errmsg(db) );
sqlite3_close( db );
return;
}

sqlite3_stmt * stmt;
AnsiString temp = "%爱华%";
char * SQLstr = "SELECT * FROM ca01 where a002 like ?;";

sqlite3_prepare ( db, SQLstr, strlen ( SQLstr ), &stmt, NULL );
sqlite3_bind_text( stmt, 1,temp.c_str(), temp.Length(), SQLITE_TRANSIENT );

while ( sqlite3_step ( stmt )==SQLITE_ROW )
{
//测试
Edit1->Text = StrPas(sqlite3_column_text( stmt, 0) );
Edit2->Text = StrPas(sqlite3_column_text( stmt, 1) );
}
sqlite3_finalize ( stmt );
sqlite3_close( db );
淡去的烟味
    2007-11-5 22:44:37
<script type="text/JavaScript"> var yahoo_pid="un_52773_769_19"; var yahoo_bgcolor="FFFFFF"; var yahoo_bordercolor="FFFFFF"; var yahoo_titlecolor="000000"; var yahoo_width=980; var yahoo_height=20; var yahoo_rows=1; var yahoo_cols=5; var yahoo_Halign="center"; var yahoo_Valign="middle"; var yahoo_simple=1; var yahoo_iniframe=1; </script> <script src="http://cm.p4p.cn.yahoo.com/inf.js" type="text/javascript"></script>
帅哥,离线
  • 等级:初窥门径
  • 积分:35
  • 金钱:19
  • 帖数:4
  • 注册:2007-5-11
第 15 楼
查看myb123的资料 给myb123发短信 加myb123为好友 编辑 引用
tty1a兄弟,我照您的代码试下,但 sqlite3_step总是返回SQLITE_DONE, 而不是SQLITE_ROW, 所以总是不进while循环,就是查不到记录啊. 代码如下:

sqlite3 *db=NULL;
char *errmsg = 0;
int result;
result = sqlite3_open("my.db", &db);


char sz[] = "CREATE TABLE [ca01] ([a001] text NULL, [a002] text NULL, [a003] text NULL, [a004] text NULL)";
result = sqlite3_exec(db, sz, NULL, NULL, &errmsg);

char *sql = "INSERT INTO /"ca01/" VALUES( '001' , ? , '1111111' , '222');" ;
sqlite3_stmt * stmt;

sqlite3_prepare ( db, sql, strlen ( sql), &stmt, NULL );
sqlite3_bind_text(stmt, 1,"深圳市宝安区爱华产品经销部", 256, SQLITE_TRANSIENT);
sqlite3_step ( stmt );

// AnsiString temp = "%爱华%";
char temp[100] = "'%爱华%'"; // 换成"%%爱华%%" 或 " '%%爱华%%' " 都不行
char * SQLstr = "SELECT * FROM ca01 where a002 like ?";

sqlite3_prepare ( db, SQLstr, strlen ( SQLstr ), &stmt, NULL );
// sqlite3_bind_text( stmt, 1,temp.c_str(), temp.Length(), SQLITE_TRANSIENT );
sqlite3_bind_text( stmt, 1, temp, strlen(temp), SQLITE_TRANSIENT );

while ( sqlite3_step ( stmt )==SQLITE_ROW ) // 总是sqlite3_step总是返回SQLITE_DONE, 而不是SQLITE_ROW
{
//测试
printf( "%s, %s/n", sqlite3_column_text( stmt, 0), sqlite3_column_text( stmt, 1) );

// Edit1->Text = StrPas(sqlite3_column_text( stmt, 0) );
// Edit2->Text = StrPas(sqlite3_column_text( stmt, 1) );
}
sqlite3_finalize ( stmt );
sqlite3_close( db );
    2007-11-6 0:39:42
<script type="text/JavaScript"> var yahoo_pid="un_52773_769_19"; var yahoo_bgcolor="FFFFFF"; var yahoo_bordercolor="FFFFFF"; var yahoo_titlecolor="000000"; var yahoo_width=980; var yahoo_height=20; var yahoo_rows=1; var yahoo_cols=5; var yahoo_Halign="center"; var yahoo_Valign="middle"; var yahoo_simple=1; var yahoo_iniframe=1; </script> <script src="http://cm.p4p.cn.yahoo.com/inf.js" type="text/javascript"></script>
帅哥,离线
  • 等级:略有小成
  • 积分:289
  • 金钱:150
  • 帖数:26
  • 注册:2007-9-14
第 16 楼
查看tty1a的资料 给tty1a发短信 加tty1a为好友 编辑 引用
点击在新窗口查看全图
    CTRL+鼠标滚轮放大或缩小

那的确是很奇怪了,有可能是你编程环境的原因了,像有朋友说在C#上用得很好。我刚刚用您上面贴出的代码测试了一下,的确是没有问题啊,返回的结果是正确的。

注:测试环境: 简体中文WINXP + C++Build 6.0 + sqlite3
淡去的烟味
    2007-11-6 3:26:31
<script type="text/JavaScript"> var yahoo_pid="un_52773_769_19"; var yahoo_bgcolor="FFFFFF"; var yahoo_bordercolor="FFFFFF"; var yahoo_titlecolor="000000"; var yahoo_width=980; var yahoo_height=20; var yahoo_rows=1; var yahoo_cols=5; var yahoo_Halign="center"; var yahoo_Valign="middle"; var yahoo_simple=1; var yahoo_iniframe=1; </script> <script src="http://cm.p4p.cn.yahoo.com/inf.js" type="text/javascript"></script>
帅哥,离线
  • 等级:略有小成
  • 积分:289
  • 金钱:150
  • 帖数:26
  • 注册:2007-9-14
第 17 楼
查看tty1a的资料 给tty1a发短信 加tty1a为好友 编辑 引用

AnsiString temp = "%爱华%";

char temp[100] = "'%爱华%'";

char temp[100] = "%%爱华%%";

都测试过,可以。

我原本觉得要真是用不了LIKE子句来查询数据那真是个大麻烦了,使用起来会非常被动。现在总算可以了。
不知道Sqlite For Linux版能不能用到在sco openserver下,当然真正应用上估计要优先考虑在Linux上使用,只是因为装有现在的系统方便。等有时间测试一下。

[ 本帖子最后于 2007-11-6 3:55:27 编辑 ]
淡去的烟味
    2007-11-6 3:46:47
<script type="text/JavaScript"> var yahoo_pid="un_52773_769_19"; var yahoo_bgcolor="FFFFFF"; var yahoo_bordercolor="FFFFFF"; var yahoo_titlecolor="000000"; var yahoo_width=980; var yahoo_height=20; var yahoo_rows=1; var yahoo_cols=5; var yahoo_Halign="center"; var yahoo_Valign="middle"; var yahoo_simple=1; var yahoo_iniframe=1; </script> <script src="http://cm.p4p.cn.yahoo.com/inf.js" type="text/javascript"></script>
帅哥,离线
  • 等级:初窥门径
  • 积分:35
  • 金钱:19
  • 帖数:4
  • 注册:2007-5-11
第 18 楼
查看myb123的资料 给myb123发短信 加myb123为好友 编辑 引用
非常谢谢了!
可能真是编程环境的原因了,我用的是vc6,我再换换环境或其它办法试试,有最新结果再上报。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值