孜孜不倦的程序员:SQLite 内幕
2010-09-08 00:00:00 来源:WEB开发网面向 C/C++ 的 P/Invoke API 具有非常高的保真性,这使得该过程变得相对简单;SQLite API 使用原始指针来表示数据库本身,这在 P/Invoke 中通过 System.IntPtr 实现,并且 SQLite API 经常会将指向 int 的指针作为参数,这样可以使用 C#“out”关键字修改 P/Invoke 描述的内容。 (有关 P/Invoke 的详细信息,请参阅 pinvoke.codeplex.com)。
若要了解有关如何使用 SQLite API 的大部分详细信息,建议您访问 SQLite 网站;但若要快速了解如何打开数据库,执行查询,然后关闭数据库这一过程,请参阅图 2,其中显示了类似的内容。
图 2 打开数据库,执行查询,然后关闭数据库
static void NativeMain()
{
// Open the database--db is our "handle" to it
IntPtr db;
if (SQLiteNative.sqlite3_open(@"cities.sqlite", out db)
== SQLiteNative.SQLITE_OK)
{
// Prepare a simple DDL "CREATE TABLE" statement
string query =
"CREATE TABLE City " +
"(name TEXT, state TEXT, population INTEGER)";
IntPtr stmHandle;
if (SQLiteNative.sqlite3_prepare_v2(db, query, query.Length,
out stmHandle, IntPtr.Zero) != SQLiteNative.SQLITE_OK)
{
// Something went wrong--find out what
var err = SQLiteNative.sqlite3_errmsg(db);
}
if (SQLiteNative.sqlite3_step(stmHandle) !=
SQLiteNative.SQLITE_DONE)
{
// Something went wrong--find out what
var err = SQLiteNative.sqlite3_errmsg(db);
}
if (SQLiteNative.sqlite3_finalize(stmHandle) !=
SQLiteNative.SQLITE_OK)
{
// Something went wrong--find out what
var err = SQLiteNative.sqlite3_errmsg(db);
}
// ... Now that we've created a table, we can insert some
// data, query it back and so on
// Close the database back up
SQLiteNative.sqlite3_close(db);
}
}
赞助商链接