它在第二个(目标).db数据库中正确创建Users表,但是它不会使用原始.db数据库的Users表的数据填充它。这两个表是相同的。他们实际上甚至都没有主键设置。我需要将原始表中的数据复制到目标表。
我尝试了以下内容,但没有成功复制部分:
public class DatabaseAccess
{
private static string _connDatabaseStringUsers = "URI=file:c:/TSV3/TS" + "DemoUsers" + ".db; Version=3; Journal Mode=Off; Synchronous=Off;";
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Linq;
using Mono.Data.Sqlite;
using System.IO;
using System.Data;
using System;
public class GameInstance : Singleton<GameInstance> {
private SqliteConnection _conn4;
private SqliteConnection _conn5;
public void Start()
{
CreateTable();
}
public void CreateTable()
{
_conn4 = new SqliteConnection(DatabaseAccess.ConnDatabaseStringUsers);
_conn4.Open();
try
{
SqliteCommand cmd4 = new SqliteCommand("CREATE TABLE IF NOT EXISTS Users ('ID' INTEGER, 'FileNumber' TEXT, 'FamilyName' TEXT, 'Name' TEXT, 'ParentFolderID' INTEGER, 'AvatarSex' INTEGER, 'Role' INTEGER)", _conn4);
cmd4.ExecuteNonQuery();
}
catch (UnityException e)
{
Debug.LogError(e);
}
finally
{
_conn4.Close();
}
CopyTable();
}
public void CopyTable()
{
_conn5 = new SqliteConnection(DatabaseAccess.ConnDatabaseStringUsers);
_conn5.Open();
try
{
SqliteCommand cmd5 = new SqliteCommand("SELECT * INTO Users IN 'TSDemo.db' FROM Users", _conn5);
cmd5.ExecuteNonQuery();
}
catch (UnityException e)
{
Debug.LogError(e);
}
finally
{
_conn5.Close();
}
}
}
我希望来自第一个.db数据库的表Users的数据从第二个.db数据库复制到表Users,但事实并非如此。但是,Unity不会给我任何错误。正在创建表,但不会将数据填充到其中。
由于SQLite不支持select into
,如果表不存在,您可以使用create table as select
:
create table dest as select * from source
或者insert into select
如果表存在或您创建它:
insert into dest select * from source