3

テーブルに挿入するデータは、最初に挿入されますが、2 回目 (2 番目のエントリなど) には挿入されません。私のコードを読んで理解できない場合、考えられる理由は何でしょうか。その理由について話し合うことができます。

package com.example.sarahn.locationactivity;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;


public class HelperAdaptor extends SQLiteOpenHelper{
public static final String DATABASE_NAME = "mmhdatabase";
public static final String TABLE_NAME3 = "timetable";
public static final int DATABASE_VERSION = 2;
public static final String NAME1 = "_timeprofilename";
public static final String TIME_PROFILE = "selecteddtimeprofile";
public static final String START_HOUR = "starthour";
public static final String END_HOUR = "endhour";
public static final String START_MINUTE = "startmin";
public static final String END_MINUTE = "endmin";
public static final String CREATE_TABLE3 = " CREATE TABLE " +TABLE_NAME3+  "   ("+NAME1+ " STRING PRIMARY KEY, " +START_HOUR+ " INTEGER, " +END_HOUR+ "     INTEGER," +START_MINUTE+ " INTEGER, " +END_MINUTE+ " INTEGER, "            +TIME_PROFILE+ " INTEGER); "  ;
public static final String DROP_TABLE1 = " DROP TABLE IF EXISTS "            +TABLE_NAME3;


public Context context;

public HelperAdaptor (Context context) {
    super(context,DATABASE_NAME, null, DATABASE_VERSION);
    this.context= context;

}


@Override
public void onCreate(SQLiteDatabase db) {


    try {

        db.execSQL(CREATE_TABLE3);

    }catch (SQLException e)
    {

    }

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    try {

        db.execSQL(DROP_TABLE1);


        onCreate(db);


    }catch (SQLException e)
    {

    }

}


public boolean insertdatatime(String nametime, int hrstart , int hrend ,     int minstart, int minend, int pr) {

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues1 = new ContentValues();
    contentValues1.put(this.NAME1, nametime);
    contentValues1.put(this.START_HOUR, hrstart);
    contentValues1.put(this.END_HOUR, hrend);
    contentValues1.put(this.START_MINUTE, minstart);
    contentValues1.put(this.END_MINUTE, minend);
    contentValues1.put(this.TIME_PROFILE, pr);

    long id = db.insert(this.TABLE_NAME3, null, contentValues1);
    if(id == -1)
    {
        return false;
    }
    else {
        return true;
    }

}


}
4

1 に答える 1

1

これが問題でしょうか?

public static final String CREATE_TABLE3 = " CREATE TABLE " +TABLE_NAME3+  "   ("+NAME1+ " STRING PRIMARY KEY, " +START_HOUR+ " INTEGER, " +END_HOUR+ "     INTEGER," +START_MINUTE+ " INTEGER, " +END_MINUTE+ " INTEGER, "            +TIME_PROFILE+ " INTEGER); "  ;

の中へ

public static final String CREATE_TABLE3 = " CREATE TABLE IF NOT EXISTS " +TABLE_NAME3+  "   ("+NAME1+ " STRING PRIMARY KEY, " +START_HOUR+ " INTEGER, " +END_HOUR+ "     INTEGER," +START_MINUTE+ " INTEGER, " +END_MINUTE+ " INTEGER, "            +TIME_PROFILE+ " INTEGER); "  ;

同じ名前のテーブル、インデックス、またはビューが既に含まれているデータベースに新しいテーブルを作成しようとすると、通常はエラーになります。ただし、"IF NOT EXISTS" 句が CREATE TABLE ステートメントの一部として指定されていて、同じ名前のテーブルまたはビューが既に存在する場合、CREATE TABLE コマンドはまったく効果がありません (エラー メッセージは返されません)。"IF NOT EXISTS" 句が指定されていても、既存のインデックスが原因でテーブルを作成できない場合は、エラーが返されます。

于 2016-01-02T06:22:24.743 に答える