web-dev-qa-db-fra.com

Insertion de valeurs dans la table SQLite sous Android

Je suis nouveau dans le développement d'applications Android. J'ai essayé d'insérer des valeurs dans la base de données SQLite via le code ci-dessous;

public class cashbook extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SQLiteDatabase db;

        db = openOrCreateDatabase(
            "cashbookdata.db"
            , SQLiteDatabase.CREATE_IF_NECESSARY
            , null
            );

        final String Create_CashBook =
            "CREATE TABLE CashData ("
            + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "Description TEXT," 
            + "Amount REAL,"
            + "Trans INTEGER," 
            + "EntryDate TEXT);";

        db.execSQL(Create_CashBook);  
        final String Insert_Data="INSERT INTO CashData VALUES(2,'Electricity',500,1,'04/06/2011')";
        db.execSQL(Insert_Data);

Il montre une erreur sur l'émulateur - L'application CashBook s'est arrêtée de manière inattendue.

La base de données et la table ont été créées, mais l'insertion de valeur ne fonctionne pas . S'il vous plaît, aidez-moi à résoudre ce problème . Merci.

20
Sinoy Devassy

okk ce code est totalement fonctionnel, éditez-le selon vos besoins

public class TestProjectActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    SQLiteDatabase db;
    db = openOrCreateDatabase( "Temp.db"        , SQLiteDatabase.CREATE_IF_NECESSARY        , null          );
    try {
        final String CREATE_TABLE_CONTAIN = "CREATE TABLE IF NOT EXISTS tbl_Contain ("
                + "ID INTEGER primary key AUTOINCREMENT,"
                + "DESCRIPTION TEXT,"
                + "expirydate DATETIME,"
                + "AMOUNT TEXT,"
                + "TRNS TEXT," + "isdefault TEXT);";
        db.execSQL(CREATE_TABLE_CONTAIN);
        Toast.makeText(TestProjectActivity.this, "table created ", Toast.LENGTH_LONG).show();
        String sql =
            "INSERT or replace INTO tbl_Contain (DESCRIPTION, expirydate, AMOUNT, TRNS,isdefault) VALUES('this is','03/04/2005','5000','tran','y')" ;       
                db.execSQL(sql);
    }
    catch (Exception e) {
        Toast.makeText(TestProjectActivity.this, "ERROR "+e.toString(), Toast.LENGTH_LONG).show();  
}}}

J'espère que cela vous sera utile ..
Ne pas utiliser TEXT pour le champ de date peut-être que le problème de casing a toujours un problème, laissez-moi savoir

17
Android

Cela semble étrange d'insérer une valeur dans un champ à incrémentation automatique.

Aussi, avez-vous essayé la méthode insert () au lieu de execSQL?

ContentValues insertValues = new ContentValues();
insertValues.put("Description", "Electricity");
insertValues.put("Amount", 500);
insertValues.put("Trans", 1);
insertValues.put("EntryDate", "04/06/2011");
db.insert("CashData", null, insertValues);
53
Jon

Vous constaterez que les erreurs de débogage de ce type sont beaucoup plus faciles si vous interceptez les erreurs générées par l'appel execSQL. par exemple:

 try 
 {
      db.execSQL(Create_CashBook);  
 }
 catch (Exception e) 
 {
       Log.e("ERROR", e.toString());
 }
3
HaemEternal
public class TestingData extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SQLiteDatabase db;
    db = openOrCreateDatabase(
        "TestingData.db"
        , SQLiteDatabase.CREATE_IF_NECESSARY
        , null
        );
 }

}

puis voir ce lien link

1
Android

Puisque vous êtes nouveau dans le développement Android, vous ne connaissez peut-être pas les fournisseurs de contenu, qui sont des abstractions de base de données. Ils peuvent ne pas convenir à votre projet, mais vous devriez les vérifier: http://developer.Android.com/guide/topics/providers/content-providers.html

0
Dimse

Je recommande de créer une méthode juste pour insérer et utiliser ContentValues ​​. Pour plus d'informations https://www.tutorialspoint.com/Android/android_sqlite_database.htm

public boolean insertToTable(String DESCRIPTION, String AMOUNT, String TRNS){

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put("this is",DESCRIPTION);
    contentValues.put("5000",AMOUNT);
    contentValues.put("TRAN",TRNS);
    db.insert("Your table name",null,contentValues);

    return true;
}
0
Kaan

okkk vous devez prendre id INTEGER PRIMARY KEY AUTOINCREMENT et toujours votre valeur de passage .... c'est le problème:) pour plus de détails voir ceci code postal et logcat

0
Android