Sqlite “访问”;“记忆中”;来自其他线程的数据库

Sqlite “访问”;“记忆中”;来自其他线程的数据库,sqlite,Sqlite,我使用以下语句创建了内存中数据库: rc = sqlite3_open(":memory:", &db); 我需要在其他线程中访问此数据库(用于读取数据)。 有没有办法在其他线程中访问这个内存数据库 文件说: 每个:内存:数据库彼此不同。那么,开始二 每个文件名为:memory:的数据库连接将创建两个 独立的内存数据库 如果我创建了多个内存中数据库,如何从其他线程访问这些数据库?代码中的db变量成为创建的SQLite db对象的指针: int sqlite3_open( const

我使用以下语句创建了内存中数据库:

rc = sqlite3_open(":memory:", &db);
我需要在其他线程中访问此数据库(用于读取数据)。 有没有办法在其他线程中访问这个内存数据库

文件说:

每个
:内存:
数据库彼此不同。那么,开始二 每个文件名为
:memory:
的数据库连接将创建两个 独立的内存数据库


如果我创建了多个内存中数据库,如何从其他线程访问这些数据库?

代码中的
db
变量成为创建的SQLite db对象的指针:

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
参考号:

这是您将在不同线程中用于执行语句的指针。例如,使用以下函数准备语句,并将
db
指针传递到该函数:

int sqlite3_prepare(
  sqlite3 *db,            /* Database handle */
  const char *zSql,       /* SQL statement, UTF-8 encoded */
  int nByte,              /* Maximum length of zSql in bytes. */
  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);
参考号:

编辑:

我不知道您是否可以更改使用
sqlite3\u open(“:memory:,…)
打开的内存数据库的名称,但它确实有一个名称。还可以附加其他内存中数据库

最初在内存中打开的数据库名称很可能是
main
。您可以通过运行语句
pragma database\u list
来验证这一点

您可以通过运行语句来附加更多内存中的数据库,例如
attachdatabase':memory:,如db2

下面是使用sqlite3客户端对上述内容的快速演示:

[someone@somewhere ~]$ sqlite3
SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .headers on
sqlite> pragma database_list;
seq|name|file
0|main|
sqlite> attach database ':memory:' AS db2;
sqlite> pragma database_list;
seq|name|file
0|main|
2|db2|
sqlite> create table main.foo (bar int);
sqlite> create table db2.foo (bar int);
sqlite> insert into main.foo values (5);
sqlite> insert into db2.foo select * from main.foo;
sqlite> select * from db2.foo;
bar
5

代码中的
db
变量成为指向创建的SQLite db对象的指针:

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
参考号:

这是您将在不同线程中用于执行语句的指针。例如,使用以下函数准备语句,并将
db
指针传递到该函数:

int sqlite3_prepare(
  sqlite3 *db,            /* Database handle */
  const char *zSql,       /* SQL statement, UTF-8 encoded */
  int nByte,              /* Maximum length of zSql in bytes. */
  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);
参考号:

编辑:

我不知道您是否可以更改使用
sqlite3\u open(“:memory:,…)
打开的内存数据库的名称,但它确实有一个名称。还可以附加其他内存中数据库

最初在内存中打开的数据库名称很可能是
main
。您可以通过运行语句
pragma database\u list
来验证这一点

您可以通过运行语句来附加更多内存中的数据库,例如
attachdatabase':memory:,如db2

下面是使用sqlite3客户端对上述内容的快速演示:

[someone@somewhere ~]$ sqlite3
SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .headers on
sqlite> pragma database_list;
seq|name|file
0|main|
sqlite> attach database ':memory:' AS db2;
sqlite> pragma database_list;
seq|name|file
0|main|
2|db2|
sqlite> create table main.foo (bar int);
sqlite> create table db2.foo (bar int);
sqlite> insert into main.foo values (5);
sqlite> insert into db2.foo select * from main.foo;
sqlite> select * from db2.foo;
bar
5

我们能命名一个内存数据库吗?我正在创建一个web应用程序,并发送从数据库获取数据的请求。我们如何访问这些数据库?我们可以命名一个内存数据库吗?我正在创建一个web应用程序,并发送从数据库获取数据的请求。我们如何访问这些数据库?