[JAVA] [Hinweis] SQLite-bezogen

Einführung

Wenn Sie Daten in Ihrer App speichern möchten, verwenden Sie normalerweise SQLite3. Der Vorteil von SQLite3 ist, dass es offline verwendet werden kann. Mit einer normalen App können Sie davon ausgehen, dass Sie mit dem Web verbunden sind Es scheint nicht notwendig zu sein, die Daten intern zu speichern. Dann können Sie eine Web-App verwenden. An einem Ort wie mir, an dem die Netzwerkumgebung nicht frei erweitert werden kann Ich bin sehr dankbar, dass es durch interne Daten gesteuert werden kann.

SQLiteOpenHelper Es scheint, dass Sie SQLiteOpenHelper verwenden sollten, um SQLite zu betreiben. In Anbetracht der Tatsache, dass es in jeder Aktivität in der App verwendet wird, halte ich es für ratsam, es herauszunehmen, also habe ich es so geschrieben.

SqlConnectionHelper.java


package sample.pack;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import org.json.JSONArray;
import org.json.JSONObject;

public class SqlConnectionHelper extends SQLiteOpenHelper {
    //Konstrukteur
    SqlConnectionHelper(Context context, String DB_Name, int DB_Version) {
        super(context,DB_Name,null,DB_Version);
    }

    //Erforderlich für die Verlängerung
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

    //insert,update,Methode zum Löschen
    public void writeSql(String sql) throws RuntimeException {
        SQLiteDatabase db = getReadableDatabase();
        try {
            db.beginTransaction();
            db.execSQL(sql);
            db.setTransactionSuccessful();
        } finally {
            db.endTransaction();
            db.close();
        }
    }

    //Methode zur Auswahl(Geben Sie JSONArray zurück)
    public JSONArray readSql(String sql) throws RuntimeException {
        SQLiteDatabase db = getReadableDatabase();
        JSONArray jsonArr = new JSONArray();
        try {
            Cursor cursor = db.rawQuery(sql, null);
            while (cursor.moveToNext()) {
                JSONObject jsonObj = new JSONObject();
                for (String collumn : cursor.getColumnNames()) {
                    jsonObj.put(collumn, cursor.getString(cursor.getColumnIndex(collumn)));
                }
                jsonArr.put(jsonObj);
            }
            cursor.close();
        } finally {
            db.close();
            return jsonArr;
        }
    }
}

Eine Spezifikation, die auf der Aktivitätsseite eine dml-Anweisung generiert, diese übergibt und das Ergebnis im JSONArray-Format empfängt.

Schauen wir uns jeden Teil an

    //Konstrukteur
    SqlConnectionHelper(Context context, String DB_Name, int DB_Version) {
        super(context,DB_Name,null,DB_Version);
    }

Einzelne DB_Name und DB_Version sind einfach, wenn Sie die in [diesem Artikel] festgelegten Werte (https://qiita.com/Mosaku_Anchu/items/46207bba3ee3ddb0be40) abrufen. Der Kontext wird von der aufrufenden Aktivität mit getApplicationContext () übergeben.

    //Erforderlich für die Verlängerung
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

Wenn Sie diesen Teil nicht schreiben, um SQLiteOpenHelper zu erweitern, tritt ein Fehler auf. Es scheint aufgerufen zu werden, wenn die Datenbank erstellt / aktualisiert wird, aber ich weiß nicht, wie ich sie verwenden soll, also ist es diesmal vorbei.

    //insert,update,Methode zum Löschen
    public void writeSql(String sql) throws RuntimeException {
        SQLiteDatabase db = getReadableDatabase();
        try {
            db.beginTransaction();
            db.execSQL(sql);
            db.setTransactionSuccessful();
        } finally {
            db.endTransaction();
            db.close();
        }
    }

    //Methode zur Auswahl(Geben Sie JSONArray zurück)
    public JSONArray readSql(String sql) throws RuntimeException {
        SQLiteDatabase db = getReadableDatabase();
        JSONArray jsonArr = new JSONArray();
        try {
            Cursor cursor = db.rawQuery(sql, null);  //Hier nachfragen
            while (cursor.moveToNext()) {
                JSONObject jsonObj = new JSONObject();
                for (String collumn : cursor.getColumnNames()) {
                    jsonObj.put(collumn, cursor.getString(cursor.getColumnIndex(collumn)));
                }
                jsonArr.put(jsonObj);
            }
            cursor.close();
        } finally {
            db.close();
            return jsonArr;
        }
    }

Ich habe die Dinge zusammengestellt, die beim Schreiben nicht die Ergebnisse erhalten, und die Dinge, die ich beim Lesen erhalte. Ich dachte, ich würde alles zusammenfügen, aber ... Die Transaktion wird auf der Schreibseite verwendet. Wenn ein Fehler auftritt und setTransactionSuccessful () nicht aufgerufen wird, führen Sie während endTransaction () einen Rollback durch. Zum Lesen, um das Ergebnis mit JSONArray zurückzugeben Der Cursor mit dem Abfrageergebnis wird in der Reihenfolge Cursor → JSONObject → JSONArray gedreht.

Recommended Posts

[Hinweis] SQLite-bezogen
Memo
[Hinweis] http-Kommunikation im Zusammenhang (okhttp3)
StringBuilder Hinweis
Kalender bezogen