为什么我在保存数据之前和之后会得到不同的结果?

时间:2016-03-27 17:28:57

标签: android android-sqlite

我想制作一个闹钟应用程序。实际上现在,我想把所有的警报都放在数据库中,而且我已经完成了这个,但是当我想检查警报时(通过LogCat),我得到了不同的警报。为什么会发生这种情况?请帮帮我! mySQLiteHelper.class:

public class mySQLiteHelper extends SQLiteOpenHelper {
    // All Static variables
    // Database Version
    public static final int DATABASE_VERSION = 2;

    // Database Name
    private static final String DATABASE_NAME = "alarms.db";

    // Contacts table name
    private static final String TABLE_ALARMS = "alarms";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_ALARM = "alarm";
    private static final  String KEY_NAME = "name";

    public mySQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables"create table alarms ("
    //+ "id integer primary key,"
      //      + "alarm text,"
        //    + "name text," // added a ','
          //  + "alarmname text" + ");"
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_ALARMS + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_ALARM + " TEXT, "
                +  KEY_NAME + " TEXT" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ALARMS);

        // Create tables again
        onCreate(db);
    }

    /**
     * All CRUD(Create, Read, Update, Delete) Operations"," + alarm.getName() +,name
     */

    // Adding new contact
    void addAlarm(Alarm alarm) {
        SQLiteDatabase db = this.getWritableDatabase();
        String sql =
                "INSERT or replace " +
                        "INTO alarms (alarm,"+KEY_NAME+") " +
                        "VALUES("+ alarm.getAlarm() +  ",'" + alarm.getName() + "')";
        //String sql =
          //      "INSERT or replace INTO alarms (alarm,alarmname) VALUES("+ alarm.getAlarm() + ",'" + alarm.getName() + "')" ;
        db.execSQL(sql);
        db.close(); // Closing database connection
    }

    // Getting single contact
    String getAlarm(String alarmname) {
        String query = "Select * FROM " + TABLE_ALARMS + " WHERE " + KEY_NAME + " =  \"" + alarmname + "\"";
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        if (cursor.getCount()>0)
            cursor.moveToFirst();
        String alarm = cursor.getString(cursor.getColumnIndex(KEY_ALARM));
        cursor.close();
        // return contact
        return alarm;
    }

    // Deleting single contact
    public void deleteAlarm(Alarm alarm) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_ALARMS, KEY_ID + " = ?",
                new String[] { String.valueOf(alarm.getID()) });
        db.close();
    }


    // Getting contacts Count
    public int getAlarmsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_ALARMS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        int i = cursor.getCount();
        cursor.close();

        // return count
        return i;
    }
}

Alarm.class:

public class Alarm {
    //private variables
    int _id;
    String _name;
    String _alarm;

    // Empty constructor
    public Alarm(String alarm,String alarmname){
        this._alarm = alarm;
        this._name = alarmname;
    }
    // constructor
    public Alarm(int id, String name, String alarm){
        this._id = id;
        this._name = name;
        this._alarm = alarm;
    }

    // constructor
    public Alarm(String alarm){
        this._alarm = alarm;
    }
    // getting ID
    public int getID(){
        return this._id;
    }

    // getting name
    public String getName(){
        return this._name;
    }

    // getting phone number
    public String getAlarm(){
        return this._alarm;
    }
}

这就是我设置时间的方式,调用addAlarm并首次获取警报

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());
calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.MINUTE, timePicker1.getCurrentMinute()); 
calendar1.set(Calendar.HOUR_OF_DAY,timePicker1.getCurrentHour());
    String alarm1 = Long.toString(calendar.getTimeInMillis());
                    String alarm2 = Long.toString(calendar1.getTimeInMillis());
                    Log.i("Alarm1.1",alarm1);
                    Log.i("Alarm2.1",alarm2);
                    mySQLiteHelper mySQLiteHelper = new mySQLiteHelper(MainActivity2.this);
                    Log.i("Point_version",Integer.toString(mySQLiteHelper.DATABASE_VERSION));
                    mySQLiteHelper.addAlarm(new Alarm(alarm1,"alarm1"));
                    mySQLiteHelper.addAlarm(new Alarm(alarm2,"alarm2"));

一段时间后我收到警报

String alarm1 = mySQLiteHelper.getAlarm("alarm1");
        String alarm2 = mySQLiteHelper.getAlarm("alarm2");
        Log.i("Alarm1.2",alarm1);
        Log.i("Alarm2.2",alarm2);

当我尝试这个时,我得到了这个结果:

Alarm1.1﹕ 1459098157713
Alarm2.1﹕ 1459098230836
Alarm1.2﹕ 1459095666194
Alarm2.2﹕ 1459095664808

2 个答案:

答案 0 :(得分:1)

替换此

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_ALARMS + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_ALARM + " TEXT, "
                +  KEY_NAME + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);

由此

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_ALARMS + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_ALARM + " TEXT, "
            +  KEY_NAME + " TEXT, UNIQUE ("+KEY_NAME+") ON CONFLICT REPLACE" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);

并重新安装你的应用...

答案 1 :(得分:0)

实际上我只是忘了删除所有数据,并且有几个字符串(警报),所有这些都有相同的名称。