Ok, peut-être que je manque complètement quelque chose ici, mais je viens de commencer à travailler avec SQL et Android et de ce que je peux voir, met à jour et insère dans la base de données besoin d'être manipulé individuellement?Android: Insertion/Mise à jour de plusieurs enregistrements dans la base de données SQL
Je peux récupérer un curseur contenant plusieurs enregistrements, mais si je voulais appliquer une mise à jour à chaque enregistrement du curseur, je ne vois que comment le faire individuellement, en utilisant ContentValues et Update(), puis le curseur rechargement ??
Même chose si je souhaite créer plusieurs nouveaux enregistrements, ceux-ci doivent être insérés individuellement? Est-ce que je ne peux pas créer une liste et un encart en masse?
Pour moi, cela semble lent et lourd, et il doit y avoir quelque chose que je ne suis pas encore au courant (recherche de réponses me manque ... probablement dû à l'utilisation de termes incorrects étant nouveau android/java)
Voici un exemple très simple de ce que je veux faire, mais il doit y avoir un meilleur moyen d'atteindre cette fonctionnalité. (Je sais qu'il ya d'autres mauvaises pratiques ici, juste créer un eample rapide)
public class HelloSQL extends Activity {
SQLiteDatabase myDB = null;
String TableName = "myTable";
ContentValues myVals = new ContentValues();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String Data = "";
// Create a Database.
try {
myDB = this.openOrCreateDatabase("myTestDB", MODE_PRIVATE, null);
// Create a Table in the Database.
myDB.execSQL("CREATE TABLE IF NOT EXISTS " + TableName
+ " (id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ " Value1 INTEGER, Value2 INTEGER);");
myDB.execSQL("DELETE FROM " + TableName);
// insert value1
for (int i = 0; i < 100; i++) {
myVals.put("Value1", i);
myDB.insert(TableName, null, myVals);
}
// retrieve data from database
Cursor c = myDB.rawQuery("SELECT * FROM " + TableName, null);
int colId = c.getColumnIndex("id");
int col1 = c.getColumnIndex("Value1");
int col2 = c.getColumnIndex("Value2");
Random generator = new Random();
// Loop through all values and update value2
c.moveToFirst();
if (c != null) {
do {
long id = c.getLong(colId);
int val1 = c.getInt(col1);
int randomVal = generator.nextInt(99);
myVals.put("Value1", val1);
myVals.put("Value2", randomVal);
myDB.insert(TableName, null, myVals);
myDB.update(TableName, myVals, "id=?",new String[] {Long.toString(id)});
} while (c.moveToNext());
}
// requery data
c = myDB.rawQuery("SELECT * FROM " + TableName, null);
// display all values
c.moveToFirst();
if (c != null) {
do {
int val1 = c.getInt(col1);
int val2 = c.getInt(col2);
Data = Data + Integer.toString(val1) + " " + Integer.toString(val2) + "\n";
} while (c.moveToNext());
}
TextView tv = new TextView(this);
tv.setText(Data);
setContentView(tv);
} catch (Exception e) {
Log.e("Error", "Error", e);
} finally {
if (myDB != null)
myDB.close();
}
}
Merci à l'avance, ne vous attendez pas à quiconque de tout récrire je l'ai fait, mais apoint dans le droit la direction et les liens vers un échantillon seraient grandement appréciés.
CommonsWare est 100% vrai ...vous pouvez écrire n'importe quel code qui crache une instruction SQL, puis utiliser SQLiteDatabase.compileStatement ('your statment'), qui retourne un SQLiteStatement, puis exécuter execute() dessus. –