2017-10-18 8 views
-1

J'ai 4 bouton sur MainActvity. Lorsque je clique sur Ajouter un bouton, la classe AddData s'ouvre. Ici je dois insérer le nom, le numéro de téléphone et l'email. Lorsque je clique sur
enregistrer le bouton de la classe AddData puis Toast est affiché avec le message "Les données ne sont pas insérées."Pourquoi les données ne sont pas insérées dans SQLiteDatabase

Désolé pour ma grammaire.

MainActivity.java

package csitmnr.sqlitedatabaseexample; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 
    Button search,add,delete,update; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    search = (Button) findViewById(R.id.btnSearch); 
    add = (Button) findViewById(R.id.btnAdd); 
    delete = (Button) findViewById(R.id.btnDelete); 
    update = (Button) findViewById(R.id.btnUpdate); 

    add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this,AddData.class); 
      startActivity(intent); 
     } 
    }); 
} 
} 

DBHelper.java

package csitmnr.sqlitedatabaseexample; 

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



public class DBHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "contacts.db"; 
    private static final String TABLE_NAME = "contacts"; 

    public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 


    } 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    sqLiteDatabase.execSQL("CREATE TABLE "+TABLE_NAME+"(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PHONE_NO TEXT,EMAIL TEXT)"); 


} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
    sqLiteDatabase.execSQL("DROP TABLE IF EXIST "+TABLE_NAME); 
    onCreate(sqLiteDatabase); 
} 

public boolean insertData(String name,String phone_no,String email){ 

    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 

    ContentValues contentValues = new ContentValues(); 

    contentValues.put("NAME",name); 
    contentValues.put("PHONE_NO",phone_no); 
    contentValues.put("EMAIL",email); 

    long result = sqLiteDatabase.insert(TABLE_NAME,null,contentValues); 

    if (result == -1) 
     return false; 
    else 
     return true; 


} 
} 

AddData.java

package csitmnr.sqlitedatabaseexample; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class AddData extends AppCompatActivity { 
    EditText name , phone, email; 
    Button save; 
    private DBHelper dbHelper; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_data); 

    dbHelper = new DBHelper(this); 

    name = (EditText) findViewById(R.id.etName); 
    phone = (EditText) findViewById(R.id.etPhone); 
    email = (EditText) findViewById(R.id.etEmail); 
    save = (Button) findViewById(R.id.saveButton); 


    save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      boolean result = dbHelper.insertData(name.getText().toString(),phone.getText().toString(),email.getText().toString()); 
       if (result){ 
        Toast.makeText(AddData.this, "Data is inserted", Toast.LENGTH_SHORT).show(); 
       }else { 
        Toast.makeText(AddData.this, "Data is not inserted", Toast.LENGTH_SHORT).show(); 
       } 
     } 
    }); 
} 
} 
+1

que diriez-vous en utilisant 'insertOrThrow' si vous voyez ce que l'erreur est https://developer.android.com/reference/an droid/base de données/sqlite/SQLiteDatabase.html # insertOrThrow (java.lang.String, java.lang.String, android.content.ContentValues) –

+0

Désolé, ce n'est pas un travail. –

+0

que voulez-vous dire? –

Répondre

0

D'après les commentaires:

Étant donné que votre application est déjà créée une table, essayez d' effacer les données d'abord et réexécutez votre application. - Jerrol il ya 1 min

Solution facile, puisque vous mettez au rebut l'ancienne table lors de la mise à niveau, essayez d'augmenter la version de votre table.

La cause du problème serait que vous avez modifié le format de votre base de données sans augmenter le numéro de version, donc les solutions possibles sont les suivantes:

  • Augmentez le numéro de version et mettre en œuvre onUpgrade() correctement
  • Réinstaller l'application (en supposant de stockage non persistant)
  • effacer les données d'applications
+0

La première est acceptable, l'espace n'est pas nécessaire dans cette partie. – Enzokie

+0

Je fais mais ce n'est pas le travail. –

+1

@ManojBudhaAyer Étant donné que votre application a déjà créé une table, essayez d'abord d'effacer les données et de réexécuter votre application. – Jerrol