免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2196 | 回复: 9
打印 上一主题 下一主题

关于sqlite的问题 linux下C编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-16 13:06 |只看该作者 |倒序浏览
  1. #include <stdio.h>
  2. #include <sqlite3.h>
  3. //查询的回调函数声明
  4. int select_callback (void * data, int col_count, char ** col_values, char ** col_Name);
  5. int main (int argc, char * argv[ ])
  6. {
  7.   const char * sSQL1 = "create table users(userid varchar(20) PRIMARY KEY, age int, birthday datetime);";
  8.   char * pErrMsg = 0;
  9.   int result = 0;
  10.   // 连接数据库
  11.   sqlite3 * db = 0;
  12.   int ret = sqlite3_open ("./test.db", &db);
  13.   if (ret != SQLITE_OK) {
  14.   fprintf (stderr, "无法打开数据库: %s", sqlite3_errmsg (db) );
  15.   return (1);
  16. }
  17.   printf ("数据库连接成功!\n");
  18.   // 执行建表SQL
  19.   sqlite3_exec ( db, sSQL1, 0, 0, &pErrMsg );
  20.   if (ret != SQLITE_OK ) {
  21.   fprintf (stderr, "SQL error: %s\n", pErrMsg);
  22.   sqlite3_free (pErrMsg);
  23. }
  24. // 执行插入记录SQL
  25.   result = sqlite3_exec ( db, "insert into users values('张三',20,'2011-7-23');", 0, 0, &pErrMsg);
  26.   if (result == SQLITE_OK) {
  27.   printf ("插入数据成功\n");
  28. }
  29.   result = sqlite3_exec ( db, "insert into users values ('李四',20,'2012-9-20') ;", 0, 0, &pErrMsg);
  30.   if (result == SQLITE_OK) {
  31.   printf ("插入数据成功\n");
  32. }
  33.   // 查询数据表
  34.    printf ("查询数据库内容\n");
  35.    sqlite3_exec ( db, "select * from users;", select_callback, 0, &pErrMsg);
  36.    // 关闭数据库
  37.    sqlite3_close (db) ;
  38.    db = 0;
  39.    printf ("数据库关闭成功!\n") ;
  40.    return 0;
  41. }
  42.    int select_callback (void * data, int col_count, char ** col_values, char ** col_Name)

  43. {
  44.    // 每条记录回调一次该函数,有多少条就回调多少次
  45.    int i;
  46.    for (i=0; i < col_count; i++);
  47.    printf ("%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i]);
  48. return 0;
  49. }


复制代码
这个程序编译运行后
为什么只显示:
root@ubuntu:~# ./hello
数据库连接成功!
查询数据库内容
数据库关闭成功!


中间的创建和插入数据怎么没了?  如何解决? 在sqlite中也查不到相应的表

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-05-16 13:12 |只看该作者
倒,第一眼就看到了 () 等全角字符

论坛徽章:
0
3 [报告]
发表于 2012-05-16 13:28 |只看该作者
回复 2# bruceteen

没太明白。。都用的是一样的啊
可是连接 查询和关闭部分可以运行啊
编译也没有报错了
只是创建表和插入数据部分没了。。。

论坛徽章:
0
4 [报告]
发表于 2012-05-16 13:31 |只看该作者
没有commit?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
5 [报告]
发表于 2012-05-16 13:32 |只看该作者
不明白?!我说简单点,把
();
换成
();

论坛徽章:
0
6 [报告]
发表于 2012-05-16 13:42 |只看该作者
bruceteen 发表于 2012-05-16 13:32
不明白?!我说简单点,把
();
换成


都是一样的 半角啊 只是有的前面加空格了
现在就是创建和插入还有返回数据那个显示不了。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
7 [报告]
发表于 2012-05-16 13:48 |只看该作者
zyx19891210 发表于 2012-05-16 13:42
都是一样的 半角啊

我看你这眼神和智商……,看不出来你就不能用编辑器搜索一下呀,“都是一样的”我没事逗你玩呀

我改好给你看看
  1. #include <stdio.h>
  2. #include <sqlite3.h>
  3. //查询的回调函数声明
  4. int select_callback (void * data, int col_count, char ** col_values, char ** col_Name);
  5. int main (int argc, char * argv[ ])
  6. {
  7.         const char * sSQL1 = "create table users(userid varchar(20) PRIMARY KEY, age int, birthday datetime);";
  8.         char * pErrMsg = 0;
  9.         int result = 0;
  10.         // 连接数据库
  11.         sqlite3 * db = 0;
  12.         int ret = sqlite3_open ("./test.db", &db);
  13.         if (ret != SQLITE_OK) {
  14.                 fprintf (stderr, "无法打开数据库: %s", sqlite3_errmsg (db) );
  15.                 return (1);
  16.         }
  17.         printf ("数据库连接成功!\n");
  18.         // 执行建表SQL
  19.         sqlite3_exec ( db, sSQL1, 0, 0, &pErrMsg );
  20.         if (ret != SQLITE_OK ) {
  21.                 fprintf (stderr, "SQL error: %s\n", pErrMsg);
  22.                 sqlite3_free (pErrMsg);
  23.         }
  24.         // 执行插入记录SQL
  25.         result = sqlite3_exec ( db, "insert into users values('张三',20,'2011-7-23');", 0, 0, &pErrMsg);
  26.         if (result == SQLITE_OK) {
  27.                 printf ("插入数据成功\n");
  28.         }
  29.         result = sqlite3_exec ( db, "insert into users values ('李四',20,'2012-9-20');", 0, 0, &pErrMsg);
  30.         if (result == SQLITE_OK) {
  31.                 printf ("插入数据成功\n");
  32.         }
  33.         // 查询数据表
  34.         printf ("查询数据库内容\n");
  35.         sqlite3_exec ( db, "select * from users;", select_callback, 0, &pErrMsg);
  36.         // 关闭数据库
  37.         sqlite3_close (db) ;
  38.         db = 0;
  39.         printf ("数据库关闭成功!\n") ;
  40.         return 0;
  41. }
  42. int select_callback (void * data, int col_count, char ** col_values, char ** col_Name)
  43. {
  44.         // 每条记录回调一次该函数,有多少条就回调多少次
  45.         int i;
  46.         for (i=0; i < col_count; i++);
  47.         printf ("%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i]);
  48.         return 0;
  49. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-05-16 14:05 |只看该作者
回复 2# bruceteen

额 我还是初学者 还望多多指教!

这回有了  但是怎么人名成表头了  值是空
root@ubuntu:~# ./hello
数据库连接成功!
插入数据成功
插入数据成功
查询数据库内容
张三 = NULL
李四 = NULL
数据库关闭成功!

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
9 [报告]
发表于 2012-05-16 16:17 |只看该作者
你觉得
  1.         for (i=0; i < col_count; i++);
  2.         printf ("%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i]);
复制代码
的排版奇怪吧?!
因为你的for语句后面多了个分号

论坛徽章:
0
10 [报告]
发表于 2012-05-16 16:20 |只看该作者
回复 9# bruceteen

可以了 非常感谢!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP