How to bulk insert into SQLITE database?

前端 未结 3 679
悲哀的现实
悲哀的现实 2021-01-15 06:37

I am developing UWP application.

I have a database that should be initialized with about 20,000 records. The records, that are defined as follows:

p         


        
相关标签:
3条回答
  • 2021-01-15 06:48

    Try the InsertAll and UpdateAll functions. Hopefully this opens up the database table just once and inserts/updates everything at once. You will need to figure out which objects to insert/update ahead of time, but this should still really speed things up.

    List<TickRecords> updates = new List<TickRecords>(); 
    
    List<TickRecords> inserts = new List<TickRecords>();  
    
    foreach ( var tickRecord in tickRecords ) 
    {   
        if ( tickRecord.Id == 0 )
        {       
            updates.Add(tickRecord);
        }
        else
        {       
            inserts.Add(tickRecords);
         } 
    }
    
    
    
    using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) ) 
    {
         db.InsertAll(inserts);
         db.UpdateAll(updates);
    }
    
    0 讨论(0)
  • 2021-01-15 07:01

    I modified Bibek answer a bit to match it to UWP:

            public static void AddOrUpdateTickRecords( ObservableCollection<TickRecord> tickRecords )
            {
            // Create a new connection
            using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) )
                {
                db.BeginTransaction();
                try
                    {
                    foreach ( var tickRecord in tickRecords )
                        {
                        if ( tickRecord.Id == 0 )
                            {
                            // New
                            db.Insert( tickRecord );
                            }
                        else
                            {
                            // Update
                            db.Update( tickRecord );
                            }
                        }
    
                    db.Commit();
                    }
                catch ( Exception ex )
                    {
                    db.Rollback();
                    }
                }
            }
    
    0 讨论(0)
  • 2021-01-15 07:03

    You should insert all 20K records in single sqllite transaction.

    Something like this:

        public static void AddOrUpdateTickRecords( ObservableCollection<TickRecord> tickRecords )
            {
            // Create a new connection
            using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) )
                {
                db.BeginTransaction();
                try
                    {
                    foreach ( var tickRecord in tickRecords )
                        {
                        if ( tickRecord.Id == 0 )
                            {
                            // New
                            db.Insert( tickRecord );
                            }
                        else
                            {
                            // Update
                            db.Update( tickRecord );
                            }
                        }
    
                    db.Commit();
                    }
                catch ( Exception )
                    {
                    db.Rollback();
                    }
                }
            }
    
    0 讨论(0)
提交回复
热议问题