如何解决此 sqlite 异常约束

how to resolve this sqlite exception constraint

我正在 Windows 商店应用程序上制作飞行数据应用程序。该应用程序将仅跟踪从巴基斯坦出发和到达的航班。

我正在通过 JSON 从

获取我的数据

https://developer.flightstats.com/

并将其保存到 SQLite 数据库。

这是我获取数据的函数

p.s:连接字符串中使用的所有变量都已声明和分配,但由于它们无关紧要,我没有显示它们。

public async void getdata()
{
    var dbpath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "flight_record.sqlite");

    for (int hour = 0; hour < 24; hour++)
    {
        HttpClient web = new HttpClient();
        var response = await web.GetStringAsync("https://api.flightstats.com/flex/flightstatus/rest/v2/json/airport/status/KHI/arr/" + year + "/" + Month + "/" + today + "/" + hour + "?appId=" + appId + "&appKey=" + appKey + "&utc=false&numHours=1&maxFlights=10");

        jsondata1 data1 = JsonConvert.DeserializeObject<jsondata1>(response);

        for (int i = 0; i < data1.flightStatuses.Length; i++)
        {
            int f_ID = Convert.ToInt32(data1.flightStatuses[i].flightId);
            string l_time = data1.flightStatuses[i].arrivalDate.dateLocal.TimeOfDay.ToString();
            string year1 = data1.flightStatuses[i].arrivalDate.dateLocal.Year.ToString();
            string month1 = data1.flightStatuses[i].arrivalDate.dateLocal.Month.ToString();
            string day1 = data1.flightStatuses[i].arrivalDate.dateLocal.Day.ToString();
            string departureAirport1 = data1.flightStatuses[i].departureAirportFsCode.ToString();
            string arrivalAirport1 = data1.flightStatuses[i].arrivalAirportFsCode.ToString();
            string stats = data1.flightStatuses[i].status.ToString();
            string FsCode = data1.flightStatuses[i].carrierFsCode.ToString();
            string flightNumber1 = data1.flightStatuses[i].flightNumber.ToString();

            //here arival_data is my sqlite database table

            using (var db = new SQLite.SQLiteConnection(dbpath))
            {
                db.Execute("Insert into arrival_data (flightID, time, year, month, day, departureAirport, arrivalAirport, status, airline, carrierFsCode, flightNumber) values ('" + f_ID + "', '" + l_time + "', '" + year1 + "', '" + month1 + "', '" + day1 +
                    "', '" + departureAirport1 + "', '" + arrivalAirport1 + "', '" + stats + "', '" + airline1 +
                    "', '" + FsCode + "', '" + flightNumber1 + "')");
            }
        }
    }
}

我的请求查询每小时只支持1次查询, 所以我做了一个循环 运行 23 次。

每个小时的航班数量都不同,所以我在第二个循环中使用了 data1.flightStatuses.Length。

之后我将数据插入 table。

当我 运行 应用程序时,出现以下异常

我进行了调试,而不是将数据插入数据库,而是将其显示在列表框中,发现这是结果

你看结果,时间不是按递增顺序排列的。因此我得到了例外!

那么我该如何组织数据使时间按递增顺序排列,或者有其他方法吗?

可能有多种原因,但您插入数据的顺序不是其中之一。

让我们仔细看看您的示例数据,尤其是第 1 行和第 4 行,它们是重复的!这让我觉得违反了唯一约束。

首先要看的是 table 上的主键。是flightID吗?

您需要考虑一下要对同一航班的多行执行的操作。您可能想研究一种在数据已存在时有效更新数据或在数据不存在时插入的方法,也称为 UPSERT,请参阅问答 here