SQLiteConnection was leaked!

A SQLiteConnection object for database '/data/data/.../databases/....db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed

获取数据库对象改成单例模式,项目运行中只保证唯一一个对象即可。


public class TestDbHelper extends SQLiteOpenHelper {
    private static TestDbHelper instance;
    TestDbHelper(Context context) {
    (context, CommonUtilities., , );
    }

TestDbHelper getInstance(Context context) {
        (== ) {
            (TestDbHelper.) {
                (== ) {
                    = TestDbHelper(context.getApplicationContext());
                }
            }
        }
        ;
    }
}




转载于:https://my.oschina.net/u/2505531/blog/533365

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们可以把一些重复的代码提取出来,比如获取数据库名和创建目录的部分,可以写成一个单独的方法,代码如下: ```csharp private string GetDbNameAndCreateDirectory(string connectionString) { var dbName = connectionString.Substring(connectionString.IndexOf("=") + 1); var dirPath = Path.GetDirectoryName(dbName); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } dbName = dbName.Substring(0, dbName.LastIndexOf(@"\") == -1 ? 0 : dbName.LastIndexOf(@"\") + 1); dbName = $"{dbName}MigrateDb_{DateTime.Now:yyyyMMddHHmmss}.db"; return dbName; } ``` 然后,我们可以将获取连接字符串和更新配置文件的部分也提取出来,写成一个方法: ```csharp private void UpdateConnectionString(string newConnectionString) { string json = File.ReadAllText("appsettings.json"); var setting = JsonSerializer.Deserialize<SettingProperties>(json); setting.SqliteConnection = newConnectionString; var serialize = JsonSerializer.Serialize(setting); using var stream = new FileStream("appsettings.json", FileMode.Create, FileAccess.ReadWrite); using StreamWriter streamWriter = new StreamWriter(stream); streamWriter.WriteLine(serialize); } ``` 最后,我们可以将 Reload 方法中的代码进行重构,将每个步骤都提取出来,使代码更加清晰易懂,代码如下: ```csharp public void Reload() { var connectionString = _configurationRoot.GetSection("SqliteConnection").Value; var newConnectionString = GetDbNameAndCreateDirectory(connectionString); UpdateConnectionString(newConnectionString); _context?.Dispose(); _context = new MigrateDbContext(); _context.Database.EnsureCreatedAsync(); } ``` 这样,我们就将代码进行了优化,使其更加清晰易懂、易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值