Ejemplo n.º 1
0
        public void Save(MarkovFactory factory)
        {
            Log.Debug ( TAG, "Saving chain." );
            myDatabase = context.OpenOrCreateDatabase(DATABASE_NAME, FileCreationMode.Private, null);
            myDatabase.ExecSQL("DROP TABLE IF EXISTS 'words'");
            myDatabase.ExecSQL("CREATE TABLE IF NOT EXISTS 'words' (firstWord TEXT, secondWord TEXT, instanceCount INTEGER NOT NULL);");

            var chain = factory.chain;
            DatabaseUtils.InsertHelper ih = new DatabaseUtils.InsertHelper (myDatabase, "words");

            Stopwatch stopwatch = Stopwatch.StartNew();
            StringBuilder insertQuery = new StringBuilder();

            //insertQuery.Append("INSERT INTO 'words' ('firstWord', 'secondWord', 'instanceCount') VALUES (?, ?, ?)");
            myDatabase.BeginTransaction();
            string sql = "INSERT INTO 'words' ('firstWord', 'secondWord', 'instanceCount') VALUES (?, ?, ?)";
            SQLiteStatement insert = myDatabase.CompileStatement(sql);

            foreach (KeyValuePair<string, MarkovWord> word in chain)
            {
                foreach (KeyValuePair<MarkovWord, int> after in word.Value.afters)
                {
                    insert.BindString(1, word.Value.word);
                    insert.BindString(2, after.Key.word);
                    insert.BindDouble(3, after.Value);
                    insert.Execute();
                }
            }
            myDatabase.SetTransactionSuccessful();
            myDatabase.EndTransaction();
            stopwatch.Stop ();
            Log.Debug (TAG, "Database insert completed in " + stopwatch.Elapsed.TotalMilliseconds);
        }