前言:上一篇讲解了linux下使用命令行操作数据库,这篇继续讲解怎么使用c语言实现linux数据库的操作。

使用c语言实现环境搭建:既然我们要使用c语言实现linux数据库操作,那么首先我们得先把数据库源码的文件打包成库文件.so放到ubuntu函数库(/bin)目录下,并且把linux数据库sqlite中的.sh文件拷贝到/usr/include目录中。

第一步:把.c文件生成.o文件

gcc -fPIC -o sqlite3.o -c sqlite3.c -lpthread -ldl

第二步:把.o文件生成.so文件

gcc -shared -fPIC -o libsqlite3.so sqlite3.o -lpthread -ldl

第三步:把生成的.so文件拷贝都ubuntu的/lib目录下,方便以后使用

sudo cp libsqlite3.so /lib/

第四步:把.sh文件拷贝到/usr/include/目录下,如果前面已经做过这一步了,可以不做

sudo cp *.h /usr/include/

到这里我们使用c语言实现linux数据库操作的环境就搭建好。

下面我们来看看用c语言实现linux数据库操作要用到的几个主要的接口,当然我们还可以上sqlite的官网去看更多的API接口。

1、打开数据库

int sqlite3_open(

const char *filename, /* 数据库名 ,如果数据库不在同一目录下请写上绝对路径*/

sqlite3 **ppDb /* 数据库句柄 */

);

返回值:成功:SQLITE_OK

失败:SQLITE_ERROR

2、执行操作指令(可实现回调查询,前提是第三个参数不能为空)

int sqlite3_exec(

sqlite3*, /* 数据库句柄 */

const char *sql, /* 执行的语句(执行的命令行) */

int (*callback)(void*,int,char**,char**), /* 回调函数(可设为NULL) */

void *, /* 1st argument to callback(可设为NULL) */

char **errmsg /* 错误信息(可设为NULL)*/

);

返回值:成功:SQLITE_OK

失败:SQLITE_ERROR

3、回调函数查询(自定义实现)

int callback(void*,int,char**,char**)

参数:

void* --由sqlite3_exec函数的第四个参数

int---查询的数据有多少列

char** ----每一列的值

char**----每一列的名字

4、非回调查询

int sqlite3_get_table(

sqlite3 *db, /* 数据库句柄 */

const char *zSql, /* 查询指令 */

char ***pazResult, /* 存储查询到的结果 */

int *pnRow, /* 存储查询到的行数*/

int *pnColumn, /* 存储查询到的列数 */

char **pzErrmsg /* 存储错误信息 */

);

5、释放所占用空间

void sqlite3_free_table(char **result);

//result为调用了sqlite3_get_table后pazResult中的数据

6、关闭表格

int sqlite3_close(sqlite3*);

下面是代码示例

#include

#include

#include

/*定义此宏时使用回调函数查询,否则使用非回调函数查询*/

#define CALLBACK

//如果查询到多行数据, 那么这个函数就会调用多次(每一行调用一次)

int callback(void *arg, int col, char **value, char **name)

{

int i=;

for(i=;i

{

printf("%s\t", value[i]);

}

printf("\n");

return ;

}

int main(void)

{

//1.打开数据库

sqlite3 *ppdb = NULL;

int ret = sqlite3_open("./mysql.db", &ppdb); //打开一个当前目录下名为mysql.db的数据库

if(ret != SQLITE_OK)

{

perror("open fail");

return -;

}

//执行sql语句,创建一个表格

char *sql="create table IF not EXISTS myname(id integer primary key, name text)";

ret = sqlite3_exec(ppdb, sql, NULL, NULL, NULL);

if(ret != SQLITE_OK)

{

perror("create fail");

sqlite3_close(ppdb);

return -;

}

//插入数据

char name[] ={};

int id = ;

while()

{

printf("please input name and id:"); scanf("%s %d", name, &id);

if(id == )break; //输入q退出插入数据

char *insert = "insert into myname values(%d, '%s')";

char insql[strlen(insert) + strlen(name) + ];

sprintf(insql, insert, id, name);

ret = sqlite3_exec(ppdb, insql, NULL, NULL, NULL);

if(ret != SQLITE_OK)

{

perror("exec fail");

sqlite3_close(ppdb);

return -;

}

}

#ifdef CALLBACK

//回调查询

char *selectsql = "select * from myname";

ret = sqlite3_exec(ppdb, selectsql, callback, NULL, NULL);

if(ret != SQLITE_OK)

{

perror("create fail");

sqlite3_close(ppdb);

return -;

}

//非回调查询

#else

char *sql2 = "select * from myname";

char **result = NULL;

int row = ;

int col = ;

char *error = NULL;

ret = sqlite3_get_table(ppdb,sql2,&result,&row,&col,&error);

if(ret != SQLITE_OK)

{

perror("get table fail");

return -;

}

int i=, j=;

for(i=;i

{

for(j=;j

{

printf("%s\t",result[j+i*col]);

}

printf("\n");

}

sqlite3_free_table(result);//释放结果

#endif

sqlite3_close(ppdb);

return ;

}

编译代码:

gcc -o mysqlite3 mysqlite3.c -lsqlite3

先创建一个叫mysql.db的库

sqlite3 mysql.db

运行结果如下:

C语言对mysql数据库的操作

原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正 ...

Linux centos 7/ubantu下: 用 C 语言连接 MySQL数据库

前言:最近用IPC.socket做ATM.聊天项目,考虑到需要用到数据库,所以总结一下centos.ubantu环境下怎么用C语言操作数据库,例如常见的增删改查等! 一.Centos环境安装mysql ...

新手学python(2):C语言调用完成数据库操作

继续介绍本人的python学习过程.本节介绍如何利用python调用c代码.内容还是基于音乐信息提取的过程,架构如图一.Python调用c实现的功能是利用python访问c语言完成mysql数据库操作 ...

linux c编程操作数据库(sqlite3应用)

首先pThread 不是linux系统默认库,连接的时候需要使用库libpthread.a. 加入-lpthread参数.另外会有lopen什么找不到的情况.加入-ldl 指定目录.Project_ ...

利用workbench对linux/Ubuntu系统中的mysql数据库进行操作

在上一篇文章中,我分享了在linux中如何安装mysql数据库,但是这只是安装了mysql的服务,并没有图形化管理界面,所以这样子操作起来并没有那么方便,那么现在我们就来实现如何利用在window中安 ...

【Linux】Ubuntu下C语言访问MySQL数据库入门

使用的系统是Ubuntu 11.10.数据库是MySQL. MySQL数据库环境配置 首先需要安装MySQL客户端和服务器,命令行安装方式为: sudo apt-get install mysql-s ...

linux下的mongodb数据库原生操作

mongodb,是一种结构最像mysql的nosql mysql中的数据库,mongodb中也有,区别在于, myql中数据库下的是表,字段和数据的形式存在 mongodb数据库下的是叫集合(和pyt ...

Java语言访问Redis数据库之Set篇

如果想通过Java语言对Redis数据库进行访问. 首先,需要安装Redis数据库,可以是Windows系统,或者Linux系统.(本文以Windows系统的本地Redis数据库为例,代码说明如何操作 ...

C语言连接MySql数据库

C语言连接MySql数据库(CodeBlocks) 操作系统:Windows7(32位)编译软件:Code::Blocks 10.05数 据 库:mysql-5.1.62-win32 数据库内的数据: ...

随机推荐

{二逼小青年的记事簿}为什么treelist不会显示子节点的文字?

...

ObjC宏定义小细节

Macros A definition that takes arguments, particularly more than one, is often known as a macro: #de ...

手持机(Android)开发应用总结

对于首次接触android的我,刚接到android开发的命令时,自己完全不懂任何android技术,可是由于项目的开发时间周期很短,必须强迫自己即学即用,到了最后才发现,技术其实只是工具,重要的是一 ...

MYSQL判断某个表是否已经存在

方法一.You don't need to count anything. SELECT 1 FROM testtable LIMIT 1; If there's no error, table ex ...

Qt tip 网络请求 QNetworkRequest QJason 处理 JSON

http://blog.csdn.net/linbounconstraint/article/details/52399415 http://download.csdn.net/detail/linb ...

CSS代码写出的各种形状图形

做网页设计时经常要用到各种形状的图形,对于规则的图形很简单,但是对于不规则的图形,一般我们都是用图片,今天就在这里教大家怎样用css代码写出各种规则不同的图形 1.正方形 #square {width ...

BZOJ 3698: XWW的难题 [有源汇上下界最大流]

3698: XWW的难题 题意:(1)A[N][N]=0:(2)矩阵中每行的最后一个元素等于该行前N-1个数的和:(3)矩阵中每列的最后一个元素等于该列前N-1个数的和.给A中的数进行取整操作(可以是 ...

js弹出对话框的三种方式(转)

linux用c创建数据库,使用c语言实现linux数据库的操作相关推荐

  1. python语言数据库规模_Python语言访问MySQL数据库

    4.使用python语言访问MySQL 1)pymysql库:Python语言访问MySQL接口 -安装: 在线:pip install pymysql 离线: 第一步:下载安装包,下载地址: htt ...

  2. linux安装manjaro创建分区失败,如何安装Manjaro Linux [最强指南]? 看完就知道了

    Manjaro是一种流行的基于拱的初学者友好Linux发行版. 本分步教程介绍了如何安装Manjaro Linux.我是Manjaro的忠实拥护者,我完全同意我的同事John Paul关于他为什么喜欢 ...

  3. c语言vs开发小型数据库,用C语言开发小型数据库管理系统代码

    注意是代码 #include #include typedef struct count{ /*保存记录条数结构体*/ char name[10]; int num; }count; typedef ...

  4. c语言linux系统时间,【整理】C语言设置Linux系统时间 | 勤奋的小青蛙

    今晚完成一个小功能,C语言设置下Linux系统时间.代码如下: #include #include #include #include using namespace std; using std:: ...

  5. 在linux系统中 创建用户账户的同时,在Linux系统中大批量建立帐户

    在Linux系统中大批量建立帐户 企业如果想在Linux操作系统上部署文件的话,可能需要一次性建立大量的帐户.如为了加强文件的管理力度,需要为每个员工配置一个帐户.如此的话,就可以针对员工进行权限控制 ...

  6. c 语言数据库.pdf,c语言连接sql数据库.pdf

    连接到 SAMPLE 数据库,查询 LASTNAME 为 JOHNSON 的FIRSTNAME 信息. #include #include #include #include "util.h ...

  7. c语言 mysql_bind,C语言连接SQLSERVER数据库

    第一步:配置ODBC.在配置ODBC时有用户DSN.系统DSN.和文件DSN三种方法,为了稳妥起见,采用系统DSN. DSN的名字叫LocalServer,帐号:sa,密码123456 第二步:打开V ...

  8. C语言与sqlserver数据库

    C语言与sqlserver数据库 原文:C语言与sqlserver数据库 1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作.  ste ...

  9. Linux Command parted 创建分区

    Linux Command parted 创建分区 tags: lvm 文章目录 Linux Command parted 创建分区 1. 简介 2. 交互模式 2.1 常见命令 2.2 查看分区表 ...

最新文章

  1. linux shell 执行 几种方式区别 bash source .
  2. 关于NodeJS配置HTTPS服务、阿里云申请HTTPS证书
  3. 为您详细解析防火墙的工作原理
  4. openwrt安装蒲公英_网速不给力?双宽带叠加,立马消除卡顿
  5. a标签点击跳转失效--IE6、7的奇葩bug
  6. 1003 我要通过!(20)(20 分)
  7. 高精地图技术专栏 | 基于空间连续性的异常3D点云修复技术
  8. [转载] 用Java语言实现对十六进制字符串异或运算
  9. ajax一步调用,ajax异步调用
  10. 标准c语言有几个关键字,C语言有多少个关键字
  11. HBase 的(伪)分布式安装
  12. Mycat跨库join实现方式总结
  13. http code 000
  14. ctfmon是什么启动项_启动项里找不到ctfmon
  15. 微博舆情挖掘需求分析
  16. axure8 事件改变样式_AxureRP8实战手册-案例2(文本框:边框变色)
  17. 最新kali之medusa
  18. 北大计算机系女神每天必看必学的IT公众号
  19. python实现添加商品至购物车
  20. 如何买到便宜的云服务器?

热门文章

  1. phpstudy怎么开机启动mysql_phpstudy设置开机启动
  2. 《TCP/IP详解卷一》学习笔记
  3. OMP算法的matlab实现
  4. QNAP 安装SVN服务器
  5. 系统集成部和行业应用部的职责
  6. C# WinForm开发书店管理系统第一节
  7. python安装numpy、pandas
  8. 【系统架构设计师】计算机组成与体系结构 ① ( 计算机组成 | CPU | 存储器 | 总线 | IO 外设 | CPU 组成 | 运算器 | 控制器 )
  9. 真牛皮!java程序员面试宝典怎么样
  10. 不涉及到分页情况下导出PDF并下载