如何在两个sqlite的内存数据库之间进行复制?

如何在Qt的2 sqlite的内存数据库之间复制。 像这样:

QSqlDatabase db1 = QSqlDatabase::addDatabase ("QSQLITE", "db1"); QSqlDatabase db2 = QSqlDatabase::addDatabase ("QSQLITE", "db2"); db1.setDatabaseName (":memory:"); db2.setDatabaseName (":memory:"); db1.open(); db2.open(); //add Data to db1 //do sth to copy db1's data to db2 [How]

--------------解决方案-------------

前一段时间我有类似的问题(但MySQL数据库复制到SQLite的)。 我用下面的代码(未测试,完整的代码,LL。40-167)

QString table("mytable");
QSqlDatabase srcDB=QSqlDatabase::addDatabase("QSQLITE", "db1");
QSqlDatabase destDB=QSqlDatabase::addDatabase("QSQLITE", "db2");

QSqlQuery srcQuery(srcDB);
QSqlQuery destQuery(destDB);

// get table schema
if (!srcQuery.exec(QString("SHOW CREATE TABLE %1").arg(table)))
return false;

QString tableCreateStr;

while(srcQuery.next())
tableCreateStr=srcQuery.value(1).toString();

// drop destTable if exists
if (!destQuery.exec(QString("DROP TABLE IF EXISTS %1").arg(table)))
return false;

// create new one
if (!destQuery.exec(tableCreateStr))
return false;

// copy all entries
if (!srcQuery.exec(QString("SELECT * FROM %1").arg(table)))
return false;

while (srcQuery.next()) {
QSqlRecord record=srcQuery.record();
QStringList names;
QStringList placeholders;
QList<QVariant > values;

for (int i = 0; i < record.count(); ++i) {
names << record.fieldName(i);
placeholders << ":" + record.fieldName(i);

QVariant value=srcQuery.value(i);

if (value.type() == QVariant::String)
values << "\"" + value.toString() + "\"";
else
values << value;
}

// build new query
QString queryStr;
queryStr.append("INSERT INTO " + table);
queryStr.append(" (" + names.join(", ") + ") ");
queryStr.append(" VALUES (" + placeholders.join(", ") + ");");

destQuery.prepare(queryStr);

foreach(QVariant value, values)
destQuery.addBindValue(value);

if (!destQuery.exec())
return false;
}

分类:QT 时间:2012-01-01 人气:0
本文关键词: sqlite的,内存数据库
分享到:

相关文章

  • 如何在Qt的sqlite的内存数据库和文件数据库之间的备份/存储? 2014-05-09

    什么是备份最简单的方法/恢复sqlite内存数据库中文件数据库Qt . --------------解决方案------------- 我想你会需要使用SQLite的工作直接做到这一点. SQLite的有一个在线备份API,第一个例子是备份的内存数据库到文件数据库中,所以它应该可以做你需要做的事情. 要获得sqlite3*数据库句柄,获取驱动程序( QSqlDatabase::driver从数据库中),然后获得句柄( QSqlDriver::handle ). 在Qt的文档中的示例代码显示了如何

  • SQLite的内存数据库和NHibernate 2014-02-04

    我有NHibernate的与Oracle数据库的工作,而我试图使用SQLite内存中数据库来测试我们的查询逻辑. 我相信我已阅读,了解并确认关于这个问题在网络上每一个答案,他们有的几次:) 我正在SQLite的错误没有这样的表:我还没有看到通过SchemaExport调用任何DDL命令 下面是我觉得是我的相关设置的位. 此代码是全部来自相同的方法 cfg = new Configuration() .SetProperty(Environment.ReleaseConnections, "on_

  • SQLite的:磁盘VS内存数据库 2015-01-16

    我们正试图整合的SQLite在我们的应用程序,并试图填充作为高速缓存. 我们计划把它作为一个在内存数据库. 使用它的第一次. 我们的应用程序是基于C ++的. 与主数据库我们的应用程序进行交互以获取数据,并执行许多操作. 这些操作通常涉及一个表,该表的规模相当庞大. 我们复制此表中的SQLite和以下是意见: 场数:记录60号:1,00,000 随着人口的数据开始,该应用程序的内存,极大地拍摄到〜1.4 GB的120MB. 在这个时候我们的应用程序处于空闲状态,并且没有做任何重大行动. 但通常情

  • 良好的可扩展容错内存数据库与.NET的LINQ支持 2012-01-15

    是否有一些支持LINQ和SQL Server的持久性良好的内存交易数据库? 我想在内存中创建一个大型数据存储的完整代表性和有它承诺在一个慵懒的时尚SQL Server数据库,但仍然通过缩放出来水平保持容错一定水平. 我不想依靠像CouchDB的非关系型数据报. --------------解决方案------------- SQLite支持内存数据库具有事务支持,并有LINQ提供程序以及. 而对于SQL Server的持久性,我认为你会在你自己的代码点东西做懒传输到后台SQL Server数据库

  • NSArray的与SQLite的关于iPhone复杂查询 2012-06-17

    为iPhone开发,我有我需要在复杂查询点的集合. 例如:"多少分有10 y坐标"和"与返回所有分3和5的7 y坐标的X坐标". 目前,我只是通过一个NSArray中的每个元素循环和检查,以查看是否每个元素我的查询相匹配. 这是虽则写查询痛苦. SQLite的会更好. 我不知道,因为SQLite数据库驻留在磁盘上,而不是在内存(我的理解),这会更有效,但. 将SQLite的被视为有效或更有效吗? 还是有更好的方式来做到这一点比我都没有想过这些方法等? 我需要与多组分

  • sqlite的sqlite3_close()不释放内存收购 2012-09-14

    我们正试图整合的SQLite在我们的应用程序,并试图填充作为高速缓存. 我们计划把它作为一个在内存数据库. 使用它的第一次. 我们的应用程序是基于C ++的. 与主数据库我们的应用程序进行交互以获取数据,并执行许多操作. 这些操作通常涉及一个表,该表的规模相当庞大. 我们复制此表中的SQLite和以下是意见: 场数:记录60号:1,00,000 随着人口的数据开始,该应用程序的内存,极大地拍摄到〜1.4 GB的120MB. 在这个时候我们的应用程序处于空闲状态,并且没有做任何重大行动. 但通常情

  • SQLite的异常内存使用 2013-11-10

    我们正试图整合的SQLite在我们的应用程序,并试图填充作为高速缓存. 我们计划把它作为一个在内存数据库. 使用它的第一次. 我们的应用程序是基于C ++的. 与主数据库我们的应用程序进行交互以获取数据,并执行许多操作. 这些操作通常涉及一个表,该表的规模相当庞大. 我们复制此表中的SQLite和以下是意见: 场数:记录60号:1,00,000 随着人口的数据开始,该应用程序的内存,极大地拍摄到〜1.4 GB的120MB. 在这个时候我们的应用程序处于空闲状态,并且没有做任何重大行动. 但通常情

  • PHP:数据库缓存(在内存中的SQLite) 2014-06-28

    我工作的基础上PDO的数据库类,使用的数据库是MySQL数据库,但我想缓存数据库,以获得更多的性能. 难道是缓存在一个SQLite内存数据库的数据库,并执行SELECT对这个(和更新一个INSERT,UPDATE,...的DB)DB是一个好主意? 但是,当我写"缓存=新PDO('sqlite的:存储');"它创建一个新的还是它使用存在的分贝? 同样,如果一个服务器承载多个网站,怎么可能使用不同的内存数据库? --------------解决方案------------- 每个SQLit

  • 在PHP会话间变 2012-02-24

    我相信,全局和超全局死一次的脚本或会话结束. 什么是存储在PHP的会话变量间的最佳方法是什么? 换句话说,我想每一个会话访问一个变量. (这将是同步访问服务器上的资源为目的的boolean值.)是否有除了刚才存储在一个文件中的值的解决方案? 这将是很好保持变量记忆... 编辑: 我只是希望能够做到这一点: while ($beingused) sleep(5); $beingused = true; // Do something 解: 谢谢大家这么多的帮助. 下面是根据您的输入我的解决方案.

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.167 (s). 10 q(s)