如何用android sqlite数据库中的新文件替换旧文件?

时间:2013-05-02 12:21:47

标签: android android-sqlite

我已经构建了一个应用程序,我从服务器获取文件和文件夹(使用.net Web服务),我有类广播接收器,我想在其中实现一个方法,其中应用程序调用服务检查新版本是否存在或不,如果是,那么在本地sqlite数据库中替换为新的,这是我创建的... 我的问题是如何用从服务器到本地sqlite数据库的新文件替换旧文件?

编辑:用旧的手机存储空间替换新文件。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您正尝试使用从Web服务器检索到的新文件更新本地手机存储上的本地文件,是吗?

要在本地更新文件,我假设您有两个文件路径数组oldFilePaths和newFilePaths

我只是迭代并删除旧的并将新的东西放在这样的东西:

foreach(var oldFilePath in foldFilePaths)
{
    var oldFileName = Path.GetFileName(oldFilePath);
    // This assumes that your files (old and new Ones have the same name). 
    // And that you are saving your new files in a temporary folder.
    var newFilePath = newFilePaths.ToList().FirstOrDefault(f => Path.GetFileName(f) == oldFileName);
    if (newFilePath != null)
    {
        File.Delete(oldFilePath);
        File.Copy(newFilePath, oldFilePath);
    }
}

现在您还可以更新数据库中的文件路径。假设你有一个唯一的标识符 数据库中的文件名。为此,您可以执行以下操作:

const string selectSqlQuery = "SELECT FileID, FilePath FROM FILES";
var updateSqlQuery = "UPDATE FILES SET FilePath = '{0}' WHERE FileID = '{1}'"; 
var oldFilesList = new List<MyFile>(); // assuming you have object of MyFile {Id, FilePath};

using(var connection = new SqliteConnection(connectionString))
{
    connection.Open();

    // reading old files from Database
    using (var command = connection.Command())
    {
      command.CommandText = selectSqlQuery;
       IDataReader reader = dbcmd.ExecuteReader();
       while(reader.Read()) 
       {
            oldFilesList.Add(new MyFile { Id = reader["Id"], FilePath = reader["FilePath"] });
       }
    }

    // updating new filePaths, assuming that you have newFilesList from calling the web service
    foreach(var oldFile in oldFilesList)
    {
        var newFile = newFilesList.ToList().FirstOrDefault(f => f.Id == oldFile.Id);
        if (newFile != null)
        {
            using (var command = connection.CreateCommand())
            {
                command.CommandText = string.Format(updateSqlQuery, newFile.Id, newFile.FilePath);
                command.ExecuteNonQuery();
            }       
        }
    }
}

//上面的代码是在C#(MonoDroid)中,因为这是我使用的,我不认为它远离Java