第一步:
在vs2013下建立一个空的win32工程SQLite3Test,在工程的属性-链接-输入中添加sqlite3.lib的引用。添加新的文件main.cpp,写一个main函数,并编译一下。
好,接下来把sqlite3.h/def/exp/lib通通放进SQLite3Test\SQLite3Test\目录下,跟main.cpp在一起,如图:
把sqlite3.dll跟生成的exe放在一起。
第二步:
写下源代码:
-
-
-
-
static std:: string strName[] = { "土行孙", "哪咤", "杨戬", "金吒", "木吒", "雷震子"};
-
-
int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames);
-
-
int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames)
-
{
-
for ( int i = 0; i < nColumn; i++)
-
{
-
printf( "%s\t", colValues[i]);
-
}
-
printf( "\n");
-
-
return 0;
-
}
-
-
int main()
-
{
-
sqlite3 *conn = NULL;
-
char *err_msg = NULL;
-
char sql[ 200] = "";
-
-
//打开数据库,创建连接;
-
if(sqlite3_open( "test.db",&conn) != SQLITE_OK)
-
{
-
printf( "无法打开\n");
-
}
-
-
//执行SQL,创建一张表;
-
sprintf(sql, "CREATE TABLE test_for_cpp(id int,name varchar(20),age int)");
-
-
if(sqlite3_exec(conn,sql, NULL, NULL,&err_msg) != SQLITE_OK)
-
{
-
std:: string strErrMsg(err_msg);
-
std:: string::size_type pos = 0;
-
pos = strErrMsg.find( "already exists");
-
if( std:: string::npos != pos)
-
{
-
//数据表已存在,删除表中数据;
-
sprintf(sql, "delete from test_for_cpp");
-
if(sqlite3_exec(conn,sql, NULL, NULL,&err_msg) != SQLITE_OK)
-
{
-
printf( "操作失败,错误代码:%s",err_msg);
-
return -1;
-
}
-
}
-
else
-
{
-
printf( "操作失败,错误代码:%s",err_msg);
-
return -1;
-
}
-
}
-
-
//插入数据;
-
int nColumn = sizeof(strName) / sizeof(strName[ 0]);
-
for( int index = 0;index < nColumn;index++)
-
{
-
sprintf(sql, "INSERT INTO test_for_cpp (id, name, age) VALUES (%d, '%s', %d)", index, strName[index].c_str(), 20 + index);
-
if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK)
-
{
-
printf( "操作失败,错误代码: %s", err_msg);
-
return -1;
-
}
-
}
-
-
// 查询;
-
sprintf(sql, "SELECT * FROM test_for_cpp");
-
sqlite3_exec(conn, sql, &sqlite3_exec_callback, 0, &err_msg);
-
-
//关闭连接;
-
if(sqlite3_close(conn) != SQLITE_OK)
-
{
-
printf( "无法关闭,错误代码:%s\n",sqlite3_errmsg(conn));
-
return -1;
-
}
-
-
return 0;
-
}