(二)不同数据库间的交叉数据查询插入等操作实现
2016-04-19 22:15
711 查看
在项目开发中,有时需要在两个数据库之间进行数据的操作,下面给出一例程来实现上述操作。
有这样两个数据库 MyDatabase.db 和 YourDatabase.db
MyDatabase.db中建立表test,如下:
YourDatabase.db中表test1和表test2,分别插入数据如下:
和
执行的SQL语句如下:
接下来是程序的实现过程:
执行结果为:
SQL语句:
有这样两个数据库 MyDatabase.db 和 YourDatabase.db
MyDatabase.db中建立表test,如下:
YourDatabase.db中表test1和表test2,分别插入数据如下:
和
插入
(1)下面把上述YourDatabase.db两表中TestName插入到 MyDatabase.db 的test表中。执行的SQL语句如下:
DELETE FROM TEST; ATTACH DATABASE 'd:\YourDatabase.db' As 'ChildDatabase'; INSERT INTO test(ID,Test1Name,Test2Name) VALUES(1,(SELECT TestName from ChildDatabase.[test1] where id==1),(SELECT TestName from ChildDatabase.[test2] where id==1)); DETACH DATABASE ChildDatabase;
接下来是程序的实现过程:
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i=0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db1,*db2; char *zErrMsg = 0; int rc1=0,rc2=0; char *sql; /* Open database */ rc1 = sqlite3_open("D:\\YourDatabase.db", &db1); rc2 = sqlite3_open("D:\\MyDatabase.db", &db2); if( rc1) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db1)); exit(0); } else { fprintf(stdout, "Opened database successfully\n"); } if( rc2) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db2)); exit(0); } else { fprintf(stdout, "Opened database successfully\n"); } sql ="DELETE FROM TEST;ATTACH DATABASE 'D:\\YourDatabase.db' As 'ChildDatabase';INSERT INTO test(ID,Test1Name,Test2Name) VALUES(1,(SELECT TestName from ChildDatabase.[test1] where id==1),(SELECT TestName from ChildDatabase.[test2] where id==1));DETACH DATABASE ChildDatabase;"; /* Execute SQL statement */ rc2 = sqlite3_exec(db2, sql, callback, 0, &zErrMsg); if( rc2 != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Table created successfully\n"); } sqlite3_close(db1); sqlite3_close(db2); system("pause"); return 0; }
执行结果为:
查询
在表test的Test1Name查找表test1里的TestName名称相同的条目SQL语句:
ATTACH DATABASE 'd:\YourDatabase.db' As 'ChildDatabase'; SELECT *FROM test WHERE Test1Name==(SELECT TestName FROM ChildDatabase.[test1]); DETACH DATABASE ChildDatabase;执行结果:
相关文章推荐
- mysql 查询,切换数据库
- MySQL常用函数
- Redis数据持久化
- Redis与Memcached的区别
- 数据库实验2
- oracle数据库安装1
- oracle应该注意的细节
- 局域网内sqldeveloper客户端连接oracle服务器
- mysql学习笔记(二)
- sql语句优化
- C#数据库编程---事务回滚
- oracle数据库创建用户,并且给用户授权
- mysql常用语句
- linux下oracle 11.2.0.1升级到11.2.0.4
- mysql解压之后的安装
- redis基本数据类型和常用命令操作
- mysqldump使用方法(MySQL数据库的备份与恢复)
- Oracle-SQL03
- 向ACESS数据库中添加商品信息和更新数据库(源代码在百度盘)
- MySQL约束操作