SQLite在插入实数值

时间:2017-05-02 06:48:57

标签: android sqlite android-sqlite

我有一个奇怪的问题。我在我的应用上使用了sqlite。我有一个包含很多字段的活动,我创建了类和方法,但是当我尝试插入所有值时,只有一个被声明为' null',我不知道为什么..

奇怪的是,如果我在调试模式下,在getDesignation_cours上,我可以看到我在EditText中输入的内容被检索,但是在我的帮助器中,它会插入null而不是该值..

这是我的databasehelper中的代码

 private static final String TABLE_COURS="cours";
private static final String COLONNE_IDCOURS="ID";
private static final String COLONNE_BRANCHECOURS="branche_cours";
private static final String COLONNE_DATEPREMIER="date_debut";
private static final String COLONNE_DATEDERNIER="date_dernier";
private static final String COLONNE_DEMIPOINT="demi_point";
private static final String COLONNE_DIZIEMEPOINT="dizieme_point";
private static final String COLONNE_DESIGNATION="designation";
private static final String COLONNE_DESCRIPTIONCOURS="description";
private static final String COLONNE_LUNDI="lundi";
private static final String COLONNE_MARDI="mardi";
private static final String COLONNE_MERCREDI="mercredi";
private static final String COLONNE_JEUDI="jeudi";
private static final String COLONNE_VENDREDI="vendredi";
private static final String COLONNE_SAMEDI="samedi";

 public void insertCours(Cours c)
{
    Open();

    ContentValues values = new ContentValues();
    values.put(COLONNE_BRANCHECOURS,c.getBranche_cours());
    values.put(COLONNE_DATEPREMIER,c.getDate_debut());
    values.put(COLONNE_DATEDERNIER,c.getDate_fin());
    values.put(COLONNE_DIZIEMEPOINT,c.getDiziemepoint());
    values.put(COLONNE_DEMIPOINT,c.getDemipoint());
    values.put(COLONNE_DESIGNATION,c.getDesignation_cours()); //this one is the null..
    values.put(COLONNE_DESCRIPTIONCOURS,c.getDescription_cours());
    values.put(COLONNE_LUNDI,c.getLundi());
    values.put(COLONNE_MARDI,c.getMardi());
    values.put(COLONNE_MERCREDI,c.getMercredi());
    values.put(COLONNE_JEUDI,c.getJeudi());
    values.put(COLONNE_VENDREDI,c.getVendredi());
    values.put(COLONNE_SAMEDI,c.getSamedi());
    db.insert(TABLE_COURS,null,values);
}

我在数据库中添加的活动

    public void AjouterCours(View v)
{
    //récuperation du radioButton qui est selectionne
    int selectedId = radioGroup.getCheckedRadioButtonId();
    radioButton = (RadioButton)findViewById(selectedId);
    //récupération de la liste deroulante a l'aide de son id
    spinner = (Spinner)findViewById(R.id.spinner_branches);

    radioButtonDemi =(RadioButton)findViewById(R.id.RBDemiPoint);

    radioButtonDizieme =(RadioButton)findViewById(R.id.RBDizieme);



    //récupération de tous les checkbox
    cblundi = (CheckBox)findViewById(R.id.CBXLundi);
    cbmardi = (CheckBox)findViewById(R.id.CBXMardi);
    cbmercredi = (CheckBox)findViewById(R.id.CBXMercredi);
    cbjeudi = (CheckBox)findViewById(R.id.CBXJeudi);
    cbvendredi = (CheckBox)findViewById(R.id.CBXVendredi);
    cbsamedi = (CheckBox)findViewById(R.id.CBXSamedi);


    //ce test me permet de savoir si le radioButton pour le demipoint est checké
    if(radioButtonDemi.isChecked()) {
        demi =1;
        dizieme=0;
    }
    //s'il l'est pas, cela veut dire que c'est le radioButton pour le diziemepoint de point
    //qui est checké
    else {
        demi=0;
        dizieme=1;
    }

    //avec tous ces tests, j'arrive a determiner si les checkbox
    //sont cochés ou pas pour après insérer dans la base de données
    //si c'est choqué, ca vaut 1, sinon ca vaut 0
    if(cblundi.isChecked()) {lundi =1;}
    else {lundi = 0;}

    if(cbmardi.isChecked()) {mardi =1;}
    else {mardi = 0;}

    if(cbmercredi.isChecked()) {mercredi =1;}
    else {mercredi = 0;}

    if(cbjeudi.isChecked()) {jeudi =1;}
    else {jeudi = 0;}

    if(cbvendredi.isChecked()) {vendredi =1;}
    else {vendredi = 0;}

    if(cbsamedi.isChecked()) {samedi =1;}
    else {samedi = 0;}

//si ca va dans le catch, cela veut dire qu'une branche a été selectionné dans la liste deroulante
 try
{
//j'enregistre toutes les valeurs qui sont insérer dans la
// base de données par rapport a la branche que j'ai sélectionné
Cursor cursor = (Cursor) adapter.getItem(spinner.getSelectedItemPosition());
//ici, 1 correspond a àa la colonne qui me donne le nom de la branche
//0 correspondrait au id
if(cursor!=null)
{

try
{
    String selectedBranche= cursor.getString(1);
    designation = (EditText)findViewById(R.id.ETDesignationCours);
    description = (EditText)findViewById(R.id.ETDescriptionCours);

    String designation_cours = designation.getText().toString();
    String description_cours = description.getText().toString();

    dbhelper.Open();

    Cours c = new Cours();
    c.setBranche_cours(selectedBranche);
    c.setDate_debut(datedebut.getText().toString());
    c.setDate_fin(datefin.getText().toString());
    c.setDesignation_cours(designation_cours);
    c.setDescription_cours(description_cours);
    c.setDemipoint(demi);
    c.setDiziemepoint(dizieme);
    c.setLundi(lundi);
    c.setMardi(mardi);
    c.setMercredi(mercredi);
    c.setJeudi(jeudi);
    c.setVendredi(vendredi);
    c.setSamedi(samedi);


    dbhelper.insertCours(c);

    Intent retour = new Intent(AjoutCours.this,MesCours.class);
    startActivity(retour);
}catch(Exception e)
{
    Toast.makeText(AjoutCours.this,
            "error",Toast.LENGTH_SHORT).show();
}

@ UPDATE-logcat的

05-02 06:17:12.048 25155-25155/com.example.dasilvadd.students E/SQLiteDatabase: Error inserting vendredi=1 lundi=0 description=dsadas designation=null demi_point=1 date_debut=18.5.2017 jeudi=0 branche_cours=bonjour samedi=1 dizieme_point=0 mercredi=0 date_dernier=7.6.2017 mardi=0
                                                                            android.database.sqlite.SQLiteConstraintException: NOT NULL constraint failed: cours.designation (code 1299)
                                                                                at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                                                                                at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
                                                                                at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
                                                                                at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
                                                                                at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
                                                                                at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
                                                                                at com.example.dasilvadd.students.DatabaseHelper.insertCours(DatabaseHelper.java:168)
                                                                                at com.example.dasilvadd.students.AjoutCours.AjouterCours(AjoutCours.java:414)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                                at android.view.View.performClick(View.java:4780)
                                                                                at android.view.View$PerformClick.run(View.java:19866)
                                                                                at android.os.Handler.handleCallback(Handler.java:739)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                at android.os.Looper.loop(Looper.java:135)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

谢谢你们!

1 个答案:

答案 0 :(得分:0)

我找到了答案:在我的班级Cours(使用get-setters)中,我刚刚删除并重新编写了该列的get和set,它确实有效!