linux C操作sqlite3

sqlite3_open

函数原型

int sqlite3_open(char *filename,sqlite3 **db);

首先介绍sqlite3类型,这个类型是一个表示打开的数据库句柄,函数的作用是打开一个数据库,并将数据库的句柄赋值给db,当数据库不存在时会自动创建一个新的数据库。

通常的使用方式:

sqlite3 *db;
char *filename="db.db"
sqlite3_open(filename,&db);

这个函数的返回值表示打开或者创建数据库是否成功,如果返回SQLITE_OK表示成功。

#include"head.h"
int main()
{
        sqlite3 *db;
        char *filname="newdb.db";
        if((SQLITE_OK==sqlite3_open(filname,&db)))
        {
                printf("create suscess\n");
        }
        return 0;
}
测试:
sun@ubuntu:~/project$ ./sqlite3_2
create suscess

sun@ubuntu:~/project$ ls
add.c  client1    db.db            head.h    mid.o     server1.c  sqlite3_1    sqlite3_2.c  str1.c  test1.c  test.o
add.o  client11   gethostbyname    Makefile  newdb.db  server2.c  sqlite3_1.c  sqlite3.c    test    test1.o  user
am.h   client1.c  gethostbyname.c  mid.c     server1   sqlite3    sqlite3_2    str1         test1   test.c
sun@ubuntu:~/project$ 
可以看到创建一个newdb.db的数据库

sqlite3_close函数

函数原型

int sqlite3_close(sqlite3 *db);

表示关闭一个数据库,关闭之后便不能根据这个句柄来操作数据库了。

sqlite3_exec函数

函数原型

int sqlite3_exec(
	sqlite3 *db, 				//表示打开的数据库句柄
	char *sql, 				//表示需要执行的sql语句
	sqlite_callback,		//回调函数
	void *  ,					//表示传递到回调函数的参数
	char **errmsg			//表示发送错误时返回的错误信息
);

当我们执行插入修改等没有返回的sql语句时可以这样使用这个函数

#include"head.h"
int main()
{
        sqlite3 *db;
        char *filename="newdb1.db";
        sqlite3_open(filename,&db);
        char *sql1="create table info(id int,name varchar(255),age int,sex varchar(255))";
        char *sql2="insert into info values(1,'sun',22,'man')";
        sqlite3_exec(db,sql1,NULL,NULL,NULL);
        sqlite3_exec(db,sql2,NULL,NULL,NULL);
        return 0;
}
这个程序的结果表示创建一个newdb1.db的数据库并且在这个数据库中创建一个info的表,在这个表中插入一行信息。
结果:
sun@ubuntu:~/project$ gcc sqlite3_3.c -o sqlite3_3 -lsqlite3
sun@ubuntu:~/project$ ./sqlite3_3
sun@ubuntu:~/project$ sqlite3 newdb1.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> select * from info;
1|sun|22|man
sqlite> 

sqlite3_get_table函数

函数原型

int sqlite3_get_table(
  sqlite3 *db,            //打开数据库的句柄
  const char *zSql,     //执行的查询的sql语句
  char ***pazResult,    	//将查询的结果保存到这里
  int *pnRow,           //查寻有多少条数据
  int *pnColumn,        //每条数据有多少项
  char **pzErrmsg    //如果出错会将错误保存到这个里
);

下面是一个例子来查询表中得数据

#include"head.h"
int main()
{
        sqlite3 *db=NULL;
        int row,column;
        char **result;
        char *sql="insert into info values(2,'zhang',32)";
        char *sql1="create table info(id int,name varchar(255),age int)";
        sqlite3_open("db.db",&db);
        sqlite3_exec(db,sql1,NULL,NULL,NULL);
        sqlite3_exec(db,sql,NULL,NULL,NULL);
        sql="select * from info";
        sqlite3_get_table(db,sql,&result,&row,&column,NULL);
        printf("row %d\ncolumn %d\n",row,column);
        int i,j;
        for(i=0;i<row;++i)
        {
                for(j=0;j<column;++j)
                        printf("%s  ",result[i*column+j]);
                printf("\n");
        }

        sqlite3_close(db);
        return 0;

}

结果:
sun@ubuntu:~/project$ gcc sqlite3_1.c -o sqlite3_1 -lsqlite3
sun@ubuntu:~/project$ ./sqlite3_1
row 1
column 3
id  name  age  
sun@ubuntu:~/project$ ./sqlite3_1
row 2
column 3
id  name  age  
2  zhang  32  
sun@ubuntu:~/project$ ./sqlite3_1
row 3
column 3
id  name  age  
2  zhang  32  
2  zhang  32  
sun@ubuntu:~/project$ ./sqlite3_1
row 4
column 3
id  name  age  
2  zhang  32  
2  zhang  32  
2  zhang  32  

参考博客:https://blog.csdn.net/zouleideboke/article/details/73649886

可以使用 SQLite3 的 C API 来操作 SQLite3 数据库。以下是一个简单的示例程序: ```c #include <stdio.h> #include <stdlib.h> #include <sqlite3.h> int main(int argc, char **argv) { sqlite3 *db; char *err_msg = ; int rc; rc = sqlite3_open("test.db", &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } char *sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);" "INSERT INTO users (name, age) VALUES ('Alice', 25);" "INSERT INTO users (name, age) VALUES ('Bob', 30);" "INSERT INTO users (name, age) VALUES ('Charlie', 35);"; rc = sqlite3_exec(db, sql, , , &err_msg); if (rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; } sqlite3_stmt *stmt; rc = sqlite3_prepare_v2(db, "SELECT * FROM users;", -1, &stmt, ); if (rc != SQLITE_OK ) { fprintf(stderr, "Failed to prepare statement: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) { int id = sqlite3_column_int(stmt, ); const unsigned char *name = sqlite3_column_text(stmt, 1); int age = sqlite3_column_int(stmt, 2); printf("id=%d, name=%s, age=%d\n", id, name, age); } if (rc != SQLITE_DONE) { fprintf(stderr, "Failed to fetch data: %s\n", sqlite3_errmsg(db)); } sqlite3_finalize(stmt); sqlite3_close(db); return ; } ``` 这个程序会创建一个名为 `test.db` 的 SQLite3 数据库,并在其中创建一个名为 `users` 的表,然后插入三条记录。最后,它会查询 `users` 表中的所有记录,并将它们打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值