我有 3 行的 SQLite 数据库,当我从行中删除数据时,数据会丢失但行仍然会,我怎样才能删除那个空白行?

Posted

技术标签:

【中文标题】我有 3 行的 SQLite 数据库,当我从行中删除数据时,数据会丢失但行仍然会,我怎样才能删除那个空白行?【英文标题】:I have SQLite db with 3 rows, when i delete data from row, data will lost but row will still, how can i delete that blank row? 【发布时间】:2021-05-16 00:48:14 【问题描述】:

我有 xamarin 应用程序并且我使用 SQLite 来保存数据,如果我有 3 行并删除第二行,那么数据将被删除但行将是空白的并且它仍然在这里,问题是我需要加载一列从每一行。我正在使用循环和计数来为其设置最大值。但是计数说我有两行,所以循环加载只是第一行而不是第二行,因为第二行在第三行,第二行是空白的。 我需要删除空白行或发现如何加载它的另一种解决方案。如何删除空白数据库? 计数算法:

public int GetNumberPhotos()
                
        var db = new SQLiteConnection(_dbPath);
        db.CreateTable<Airplane>();
        int count = 0;
        if (db.Table<Airplane>().FirstOrDefault(l => l.Id == 1) != null)
            count = db.Table<Airplane>().Count();
        
        return count;
    

正在加载:

public int BetterUniReg()
    
        int numberPhotos = GetNumberPhotos();
        string[] allReg = new string[numberPhotos];
        string[] uniReg = new string[numberPhotos];
        int uniRegCnt = 0;
        var db = new SQLiteConnection(_dbPath);
        //db fill
        for (int i = 0; i <= numberPhotos; i++)
        
            if (db.Table<Airplane>().FirstOrDefault(b => b.Id == i) != null)
            
                var rowData = db.Table<Airplane>().FirstOrDefault(c => c.Id == i);                    
                i--;
                allReg[i] = rowData.Registration;
                i++;
                            
        

这里是删除代码:

private async void deleteButton_Clicked(object sender, EventArgs e)
    
        var action = await DisplayAlert("Delete", "Do you want delete picture?", "Cancel", "Delete");
        if (action)
                        
           
        else
        
            var butto = sender as Button;
            var frame = butto.Parent.Parent.Parent.Parent as Frame;
            await frame.FadeTo(0, 600);
            var button = (Button)sender;                
            var plane = (Airplane)button.BindingContext;                
            var db = new SQLiteConnection(_dbPath);
            db.Delete<Airplane>(plane.Id);
            Refresh();
        
    

【问题讨论】:

当您从数据库中删除数据时,您需要重新加载数据,请使用您的加载方法 BetterUniReg() 我该怎么做? 但是如何重新加载该数据库? BetterUniReg() 在你的情况下 这样啊,不过这不是问题,我就是这样做的 【参考方案1】:

我已经完成了通过添加如果它的最后一行和它的 null 然后再做一个循环。 这是代码:

for (int i = 1; i <= numberPhotos; i++)
        
            if (db.Table<Airplane>().FirstOrDefault(c => c.Id == i) != null)
            
                var rowData = db.Table<Airplane>().FirstOrDefault(c => c.Id == i);
                allReg[regnumber] = rowData.Registration;
                regnumber++;
            
            if (db.Table<Airplane>().FirstOrDefault(c => c.Id == i) == null && i == numberPhotos)
            
                numberPhotos = numberPhotos + 1;
            
        

【讨论】:

以上是关于我有 3 行的 SQLite 数据库,当我从行中删除数据时,数据会丢失但行仍然会,我怎样才能删除那个空白行?的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite - 从行“专辑”中获得不同的结果 - python

如果满足某些条件,则从行中获取信息

DataTable 从行中获取修改后的数据

从行中删除表格附件指示器

根据同一行中的另一个值从行中选择某个值

T:SQL:从行中选择值作为列