加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite常用函数

发布时间:2020-12-13 00:13:54 所属栏目:百科 来源:网络整理
导读:Sqlite常用函数: 1、打开数据库: 说明:打开一个数据库,文件名不一定要存在,如果此文件不存在,sqlite会自动创建。第一个参数指文件名,第二个参数则是定义的sqlite3 **结构体指针(关键数据结构),这个结构底层细节如何,您不用管它。 int sqlite3_ope

Sqlite常用函数:

1、打开数据库:
说明:打开一个数据库,文件名不一定要存在,如果此文件不存在,sqlite会自动创建。第一个参数指文件名,第二个参数则是定义的sqlite3 **结构体指针(关键数据结构),这个结构底层细节如何,您不用管它。
int sqlite3_open(

const char *filename,/* Database filename (UTF-8) */

sqlite3 **ppDb /* OUT: SQLite db handle */

);
返回值:表示操所是否正确(SQLITE_OK操作正常)

2、关闭数据库:
说明:如果用sqlite3_open开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。

int sqlite3_close(sqlite3*); //参数就是刚才的结构体,也就是数据库句柄


3、执行SQL语句:
说 明:这个函数的功能是执行一条或者多条SQL语句,SQL语句之间用“;”号隔开。建议在执行一条或者多条SQL语句得时候,指定第三个参数回调函数,在 回调函数中可以获得执行Sql得详细过程,如果所有Sql执行完毕则应该返回0,否则,则说明这次执行并没有完全成功。第五个参数:如果执行失败(没有返回0)则可以查看第五个阐述得值。来查看详细错误信息。
int sqlite3_exec(
sqlite3*,/*已经打开的数据库句柄*/
const char *sql,/*要执行的Sql语句*/
sqlite_callback,/*回调函数*/
void *,/*传递给回调函数的参数*/
char **errmsg /*保存错误信息*/
);
通常sqlite3_callback和它后面的void*这两个位置都可以填NULL,表示不需要回调。比如您做insert操作,做delete操作,就没有必要使用回调。而当作select时,就要使用回调,因为sqlite3把数据查出来,得通过回调告诉你查出了什么数据。

4、exec的回调

typedef int (*sqlite3_callback)(void*,int,char**,char**);

说明:你的回调函数必须定义为上面这个函数的类型。
例如:

int LoadMyInfo( void * para,int n_column,char ** column_value,char ** column_name )
{
//para是你在sqlite3_exec里传入的void *参数

//通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。然后操作这些数据

//n_column是这一条记录有多少个字段(即这条记录有多少列)

// char ** column_value是个关键值,查出来的数据都保存在这里,它实际上是个1维数组(不要以为是2维数组),每一个元素都是一个char *值,是一个字段内容(用字符串来表示,以结尾)

//char ** column_name跟column_value是对应的,表示这个字段的字段名称


5、取当前插入位置:
功能:返回你前一次插入得位置,从1开始,sqlite3*为你打开数据库所得到得句柄。
long long int sqlite3_last_insert_rowid(sqlite3*);

6、非回调select查询:
功能:执行一次查询Sql并且返回得到一个记录集。
int sqlite3_get_table(
sqlite3*,/*要执行的Sql语句*/
char ***resultp,/*保存返回记录集的指针*/
int *nrow,/*返回记录数(及查出多少行)*/
int *ncolumn,/*返回字段数(多少列)*/
char **errmsg /*返回错误信息*/
)

说明:第三个参数是查询结果,它是一维数组,内存布局为:第一行是字段名称,后面是紧接着是每个字段的值。
实例:

int main( int,char ** )
{
sqlite3 * db;
int result;
char * errmsg = NULL;

char **dbResult;

int nRow,nColumn;

int i,j;

int index;

result = sqlite3_open( “c:Dcg_database.db”,&db );
if( result != SQLITE_OK )
{
return -1;
}

//数据库操作代码

//假设前面已经创建了MyTable_1表

//开始查询,传入的dbResult已经是char **,这里又加了一个&取地址符,传递进去的就成了char ***

result = sqlite3_get_table( db,“select * from MyTable_1”,&dbResult,&nRow,&nColumn,&errmsg );

if( SQLITE_OK == result )
{
//查询成功
index = nColumn; //前面说过dbResult前面第一行数据是字段名称,从nColumn索引开始才是真正的数据
printf( “查到%d条记录n”,nRow );

for( i = 0; i < nRow ; i++ )
{
printf( “第%d条记录n”,i+1 );
for( j = 0 ; j < nColumn; j++ )
{
printf( “字段名:%s ?>字段值:%sn”,dbResult[j],dbResult [index] );
++index; // dbResult的字段值是连续的,从第0索引到第nColumn - 1索引都是字段名称,从第nColumn索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
printf( “-------n” );

}
}

//到这里,不论数据库查询是否成功,都释放char**查询结果,使用sqlite提供的功能来释放
sqlite3_free_table( dbResult );
//关闭数据库
sqlite3_close( db );

return 0;
}


7、释放查询结果:
功能:释放当前查询的记录集所占用的内存
void sqlite3_free_table(char **result);

实例:(SQLite数据库使用回调函数的简单C语言实例)

1.#include <stdio.h>

2.

3.#include <sqlite3.h>

4.

5.

6.

7.static int callback(void *NotUsed,int argc,char **argv,char **azColName)

8.

9.{

10.

11. int i;

12.

13. for(i=0; i<argc; i++)

14.

15. {

16.

17. printf("%s = %sn",azColName[i],argv[i] ? argv[i] : "NULL");

18.

19. }

20.

21. printf("n");

22.

23. return 0;

24.

25.}

26.

27.

28.

29.int main(int argc,char **argv)

30.

31.{

32.

33. sqlite3 *db;

34.

35. char *zErrMsg = 0;

36.

37. int rc;

38.

39.

40.

41. if( argc!=3 )

42.

43. {

44.

45. fprintf(stderr,"Usage: %s DATABASE SQL-STATEMENTn",argv[0]);

46.

47. return 1;

48.

49. }

50.

51. rc = sqlite3_open(argv[1],&db);

52.

53. if( rc )

54.

55. {

56.

57. fprintf(stderr,"Can't open database: %sn",sqlite3_errmsg(db));

58.

59. sqlite3_close(db);

60.

61. return 1;

62.

63. }

64.

65. rc = sqlite3_exec(db,argv[2],callback,&zErrMsg);

66.

67. if( rc!=SQLITE_OK )

68.

69. {

70.

71. fprintf(stderr,"SQL error: %sn",zErrMsg);

72.

73. sqlite3_close(db);

74.

75. return 1;

76.

77. }

78.

79. sqlite3_close(db);

80.

81. return 0;

82.

83.}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读