SQLITE3过程中,是否遇到过模糊查询(Like)的麻烦
发布时间:2020-12-12 23:39:49 所属栏目:百科 来源:网络整理
导读:字号 树型 打印 收藏 帖子主题:大家在用SQLITE3过程中,是否遇到过模糊查询(Like)的麻烦?... tty1a 等级:略有小成 积分:289 金钱:150 帖数:26 注册:2007-9-14 第 11 楼 问题已经解决,不是出在查询方面,是出在插入方面,不能直接用sqlite3_exec( db,s
。。。 char *sql = "INSERT INTO /"ca01/" VALUES( '001',?,'2222211','222');" ; sqlite3_stmt * stmt; sqlite3_prepare ( db,strlen ( sql),&stmt,NULL ); sqlite3_bind_text(stmt,1,"深圳市宝安区爱华产品经销部",256,SQLITE_TRANSIENT); sqlite3_step ( stmt ); 。。。 非常感谢各位热心的朋友。 淡去的烟味 2007-11-2 19:02:21 myb123
我照你的做了,但还是查不到,急啊,帮帮忙啊。最好贴出完整的代码啊。 2007-11-5 0:05:15 myb123
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,&errmsg); char *sql = "INSERT INTO /"ca01/" VALUES( '001',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 tty1a
以下的方式可以查到: 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 ),NULL ); sqlite3_bind_text( stmt,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 myb123
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,SQLITE_TRANSIENT); sqlite3_step ( stmt ); // AnsiString temp = "%爱华%"; char temp[100] = "'%爱华%'"; // 换成"%%爱华%%" 或 " '%%爱华%%' " 都不行 char * SQLstr = "SELECT * FROM ca01 where a002 like ?"; sqlite3_prepare ( db,NULL ); // sqlite3_bind_text( stmt,SQLITE_TRANSIENT ); sqlite3_bind_text( stmt,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),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 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 myb123
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |