SQLite数据库不起作用

时间:2012-09-27 14:37:30

标签: android sqlite

似乎我无法将数据插入到我的数据库中,我不知道问题出在哪里。 这是数据库代码:

public class Database {
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "Name";
    public static final String KEY_PERIOD = "Period";
    public static final String KEY_FREQUENCY = "Frequency";
    public static final String KEY_RECIEVINGTIME = "Recieving_time";
    public static final String KEY_STATS = "Stats";

    private static final String DATABASE_NAME = "Reports";
    private static final String DATABASE_TABLE = "Table1";
    private static final int DATABASE_VERSION = 1;

    private DbHelper myHelper;
    private final Context myContext;
    private SQLiteDatabase myDatabase;

    private static class DbHelper extends SQLiteOpenHelper{

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_NAME + " TEXT NOT NULL, " +
                    KEY_PERIOD + " TEXT NOT NULL, " +
                    KEY_FREQUENCY + " TEXT NOT NULL, " +
                    KEY_RECIEVINGTIME + " TEXT NOT NULL, " +
                    KEY_STATS + " TEXT NOT NULL);"
                    );
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
            onCreate(db);
        }
    }

    public Database(Context c){
        myContext = c;
    } 

    public Database open(){
        myHelper = new DbHelper(myContext);
        myDatabase = myHelper.getWritableDatabase();
        return this;
    }

    public void close(){
        myDatabase.close();
    }

    public void writeEntry(String name, long period, long frequency, long recievingTime, String stats){
        ContentValues cv = new ContentValues();
        cv.put(KEY_NAME, name);
        cv.put(KEY_PERIOD, period);
        cv.put(KEY_FREQUENCY, frequency);
        cv.put(KEY_RECIEVINGTIME, recievingTime);
        cv.put(KEY_STATS, stats);
        myDatabase.insert(DATABASE_TABLE, null, cv);
    }

    public Cursor query(String[] columns, String selection, String[] selectionArgs, String groupBy) {
        // TODO Auto-generated method stub
        Cursor c = myDatabase.query(DATABASE_TABLE, columns, selection, selectionArgs, groupBy, null, null);
        return c;
    }   
}

我尝试使用此方法插入数据:

public void save(){
    sharedPrefs = context.getSharedPreferences(SPNAME, 0);
    Log.v(" info", sharedPrefs.getAll().toString());
    Database database = new Database(context);
    database.open();
    database.writeEntry(
            sharedPrefs.getString(NAME, "No data was found"), 
            sharedPrefs.getLong(PERIOD, 0),
            sharedPrefs.getLong(FREQUENCY, 0), 
            sharedPrefs.getLong(RECIEVINGTIME, 0), 
            sharedPrefs.getString(STATS, "No data was found")
            );
    database.close();

    editor.remove(NAME);
    editor.remove(FREQUENCY);
    editor.remove(RECIEVINGTIME);
    editor.remove(PERIOD);
    editor.remove(FREQUENCY);
    editor.remove(STATS);
    editor.commit();
}

我用这种方法检索数据:

 public ReportItem getReportInfo(String rowId){
    ReportItem item = new ReportItem();
    database = new Database(context);
    database.open();
    cursor = database.query(new String[]{
            Database.KEY_NAME,
            Database.KEY_PERIOD,
            Database.KEY_FREQUENCY,
            Database.KEY_RECIEVINGTIME,
            Database.KEY_STATS}, Database.KEY_ROWID +" = "+rowId, null, null);

    if(cursor.moveToFirst()){
        item.setName(cursor.getString(cursor.getColumnIndex(Database.KEY_NAME)));
        item.setPeriod(cursor.getLong(cursor.getColumnIndex(Database.KEY_PERIOD)));
        item.setFrequency(cursor.getLong(cursor.getColumnIndex(Database.KEY_FREQUENCY)));
        item.setReceivingTime(cursor.getLong(cursor.getColumnIndex(Database.KEY_RECIEVINGTIME)));
        item.setStats(cursor.getString(cursor.getColumnIndex(Database.KEY_STATS)));         
    }
    cursor.close(); 
    database.close();   
    Log.v("Data from database", item.toString());
    return item;
}

在将数据插入db log之前的save()方法中显示:

09-27 17:19:54.973: V/info(31638): <!>com.dailyreports.ainius.Report 75<!> {Period=86400000, Name=report1, Stats=23 24 26 , Frequency=86400000, RecievingTime=62340000}

但是在从db log中检索相同信息后的getReportInfo(String)方法中显示:

09-27 17:20:06.263: V/Data from database(31638): <!>com.dailyreports.ainius.Report 117<!>  0 0 0 

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您没有与rowId匹配的条目:

Database.KEY_ROWID +" = "+rowId

所以在getReportInfo()

  1. if(cursor.moveToFirst())返回false,
  2. ReportItem item未收到新值
  3. item返回默认值:空字符串和0l长。
  4. 仔细检查rowId的价值。