#include <stdio.h>
#include <sqlite3.h>
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 * 值,是一个字段内容(用字符串来表示,以/0结尾)
//char ** column_name 跟 column_value是对应的,表示这个字段的字段名称
//这里,我不使用 para 参数。忽略它的存在.
int i;
for (i = 0; i < n_column; i++)
{
printf ("%8s : %-8s ", column_name[i], column_value[i]);
}
printf ("\n");
return 0;
}
int main()
{
sqlite3 * db = NULL;
int result = sqlite3_open("student.db", &db);
if (result != SQLITE_OK)
{
printf ("1open student.db error!\n");
return -1;
}
char *errmsg;
result = sqlite3_exec(db, "create table test(ID INTEGER, name TEXT, sex TEXT, age INTEGER, primary key(ID))", NULL, NULL, &errmsg);
if (result != SQLITE_OK && result != 1)
{
printf ("create test table error : %d(%s)!\n", result, errmsg);
return -1;
}
/* int id;
char name[20];
char sex[20];
int age;
printf ("please insert a record\n");
printf ("please input ID:");
scanf ("%d", &id);
printf ("please input name:");
scanf ("%s", name);
printf ("please input sex:");
scanf ("%s", sex);
printf ("please input age:");
scanf ("%d", &age);
char buff[200]; */
/* result = sqlite3_exec(db, "update test set age=90 where name='Zhang'", NULL, NULL, &errmsg);
if (result != SQLITE_OK)
{
printf ("insert test table error : %d(%s)!\n", result, errmsg);
//return -1;
} */
sprintf (buff, "insert into test values(%d,'%s', '%s', %d)", id, name, sex, age);
result = sqlite3_exec(db, buff, NULL, NULL, &errmsg);
if (result != SQLITE_OK)
{
printf ("insert test table error : %d(%s)!\n", result, errmsg);
return -1;
}
result = sqlite3_exec(db, "select ID,name from test where sex='F'", LoadMyInfo, NULL, &errmsg);
if (result != SQLITE_OK)
{
printf ("insert select table error : %d(%s)!\n", result, errmsg);
return -1;
}
sqlite3_close(db);
return 0;
}
#include <sqlite3.h>
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 * 值,是一个字段内容(用字符串来表示,以/0结尾)
//char ** column_name 跟 column_value是对应的,表示这个字段的字段名称
//这里,我不使用 para 参数。忽略它的存在.
int i;
for (i = 0; i < n_column; i++)
{
printf ("%8s : %-8s ", column_name[i], column_value[i]);
}
printf ("\n");
return 0;
}
int main()
{
sqlite3 * db = NULL;
int result = sqlite3_open("student.db", &db);
if (result != SQLITE_OK)
{
printf ("1open student.db error!\n");
return -1;
}
char *errmsg;
result = sqlite3_exec(db, "create table test(ID INTEGER, name TEXT, sex TEXT, age INTEGER, primary key(ID))", NULL, NULL, &errmsg);
if (result != SQLITE_OK && result != 1)
{
printf ("create test table error : %d(%s)!\n", result, errmsg);
return -1;
}
/* int id;
char name[20];
char sex[20];
int age;
printf ("please insert a record\n");
printf ("please input ID:");
scanf ("%d", &id);
printf ("please input name:");
scanf ("%s", name);
printf ("please input sex:");
scanf ("%s", sex);
printf ("please input age:");
scanf ("%d", &age);
char buff[200]; */
/* result = sqlite3_exec(db, "update test set age=90 where name='Zhang'", NULL, NULL, &errmsg);
if (result != SQLITE_OK)
{
printf ("insert test table error : %d(%s)!\n", result, errmsg);
//return -1;
} */
sprintf (buff, "insert into test values(%d,'%s', '%s', %d)", id, name, sex, age);
result = sqlite3_exec(db, buff, NULL, NULL, &errmsg);
if (result != SQLITE_OK)
{
printf ("insert test table error : %d(%s)!\n", result, errmsg);
return -1;
}
result = sqlite3_exec(db, "select ID,name from test where sex='F'", LoadMyInfo, NULL, &errmsg);
if (result != SQLITE_OK)
{
printf ("insert select table error : %d(%s)!\n", result, errmsg);
return -1;
}
sqlite3_close(db);
return 0;
}