获取sqlite android中现有行的Insert语句

时间:2016-02-02 12:44:12

标签: java android sqlite

我有用于缓存的数据库 A 和服务器上的 B ,所以我想从 A B发送一行为此我需要为 A 中已存在的行生成插入语句。

以下是我想要完成的事情

get insert select * from table where myId = 5;

它应该返回

insert into table(myId,Col1,Col2,...) VALUES (5,'value1','value2',...);

http://odetocode.com/blogs/scott/archive/2005/01/25/funny-numbers-in-my-stack-trace.aspxI already had looked into this,这些都没有解决我的问题。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

sqlite3命令行shell可以为查询生成这样的输出,但没有列名:

sqlite> .mode insert MyTableName
sqlite> SELECT * FROM MyTable WHERE ID = 5;
INSERT INTO MyTableName VALUES(5,'value',NULL);

如果您想要列名,则必须手动生成它们:

SELECT 'INSERT INTO MyTable(a, b, c) VALUES (' ||
       quote(a) || ',' ||
       quote(b) || ',' ||
       quote(c) || ');'
FROM MyTable
WHERE ID = 5;
--> INSERT INTO MyName(a, b, c) VALUES (42,'value',NULL);

(可以用Java完成相同的字符串操作。)

如果您的程序不知道确切的数据库模式,您可以使用PRAGMA table_info读取每个表的列列表,并从中构建语句:

> create table MyTable(myId, Col1, Col2, [...]);
> pragma table_info(MyTable);
cid         name        type        notnull     dflt_value  pk        
----------  ----------  ----------  ----------  ----------  ----------
0           myId                    0                       0         
1           Col1                    0                       0         
2           Col2                    0                       0         
3           ...                     0                       0