コード例 #1
0
        public static JSONArray ExecuteQuerySync(string sql, Dictionary <string, object> parameters, bool useTransaction)
        {
                        #if !UNITY_EDITOR
            // Force transaction if it is an update, insert or delete.
            if (GAUtilities.StringMatch(sql.ToUpperInvariant(), "^(UPDATE|INSERT|DELETE)"))
            {
                useTransaction = true;
            }

            // Get database connection from singelton sharedInstance
            SqliteConnection sqlDatabasePtr = Instance.SqlDatabase;

            // Create mutable array for results
            JSONArray results = new JSONArray();

            SqliteCommand command = null;

            try
            {
                if (useTransaction)
                {
                    sqlDatabasePtr.BeginTransaction();
                }

                command = sqlDatabasePtr.CreateCommand();

                command.CommandText = sql;

                // Bind parameters
                if (parameters.Count != 0)
                {
                    foreach (KeyValuePair <string, object> pair in parameters)
                    {
                        command.Bind(pair.Key, pair.Value);
                    }
                }

                // Loop through results
                foreach (List <Tuple <string, string> > reader in command.ExecuteQueryMY())
                {
                    // get columns count
                    int columnCount = reader.Count;

                    JSONClass row = new JSONClass();
                    for (int i = 0; i < columnCount; i++)
                    {
                        string column = reader[i].Item1;

                        if (string.IsNullOrEmpty(column))
                        {
                            continue;
                        }

                        row[column] = reader[i].Item2.ToString();
                    }
                    results.Add(row);
                }


                if (useTransaction)
                {
                    //transaction.Commit();
                    sqlDatabasePtr.Commit();
                }
            }
            catch (SqliteException e)
            {
                // TODO(nikolaj): Should we do a db validation to see if the db is corrupt here?
                GALogger.E("SQLITE3 ERROR: " + e);
                results = null;
            }
            finally
            {
            }

            // Return results
            return(results);
                        #else
            return(null);
                        #endif
        }