Si vous souhaitez stocker des données dans votre application, vous utilisez normalement SQLite3. L'avantage que je ressens de SQLite3 est qu'il peut être utilisé hors ligne. Avec une application normale, vous pouvez parler en supposant que vous êtes connecté au Web, donc Il ne semble pas nécessaire de stocker les données en interne. Ensuite, vous pouvez utiliser une application Web. Cependant, dans un endroit comme moi où l'environnement réseau ne peut pas être étendu librement Je suis très reconnaissant qu'il puisse être alimenté par des données internes.
SQLiteOpenHelper Il semble que vous devriez utiliser SQLiteOpenHelper pour faire fonctionner SQLite. Compte tenu de son utilisation pour chaque activité de l'application, je pense qu'il serait sage de la supprimer, alors je l'ai écrite comme ça.
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 {
//constructeur
SqlConnectionHelper(Context context, String DB_Name, int DB_Version) {
super(context,DB_Name,null,DB_Version);
}
//Requis pour prolonger
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//insert,update,méthode de suppression
public void writeSql(String sql) throws RuntimeException {
SQLiteDatabase db = getReadableDatabase();
try {
db.beginTransaction();
db.execSQL(sql);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
db.close();
}
}
//Méthode de sélection(Renvoyer JSONArray)
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;
}
}
}
Une spécification qui génère une instruction dml côté activité, la transmet et reçoit le résultat au format JSONArray.
Regardons chaque partie
//constructeur
SqlConnectionHelper(Context context, String DB_Name, int DB_Version) {
super(context,DB_Name,null,DB_Version);
}
DB_Name et DB_Version individuels sont faciles si vous extrayez les valeurs définies dans cet article. Le contexte est passé à partir de l'activité appelante à l'aide de getApplicationContext ().
//Requis pour prolonger
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
Si vous n'écrivez pas cette partie pour faciliter l'extension de SQLiteOpenHelper, une erreur se produira. Il semble être appelé lorsque la base de données est créée / mise à jour, mais je ne sais pas comment l'utiliser, donc cette fois c'est fini.
//insert,update,méthode de suppression
public void writeSql(String sql) throws RuntimeException {
SQLiteDatabase db = getReadableDatabase();
try {
db.beginTransaction();
db.execSQL(sql);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
db.close();
}
}
//Méthode de sélection(Renvoyer JSONArray)
public JSONArray readSql(String sql) throws RuntimeException {
SQLiteDatabase db = getReadableDatabase();
JSONArray jsonArr = new JSONArray();
try {
Cursor cursor = db.rawQuery(sql, null); //Demande ici
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;
}
}
J'ai rassemblé les choses qui ne reçoivent pas les résultats dans une écriture et les choses que je reçois dans une lecture. Je pensais avoir tout rassemblé, mais ... La transaction est utilisée du côté écriture. Si une erreur se produit et que setTransactionSuccessful () n'est pas appelée, annulez pendant endTransaction (). Pour lire, afin de renvoyer le résultat avec JSONArray Le curseur contenant le résultat de l'enquête est tourné pour faire Cursor → JSONObject → JSONArray.