簡體   English   中英

DB-sqllite Android,無法正常工作

[英]DB-sqllite android, not working

我為應用程序開發了數據庫,並且可以正常工作...

我需要的是具有8個字符串的數據庫,我可以從活動中更新和獲取它們。

對於所有8個字符串,我都必須以“”開頭。

這是我的數據庫代碼:

public class Mega_DBHelper extends SQLiteOpenHelper {

   public static final String DATABASE_NAME = "Mega.db";
   public static final String MEGA_TABLE_NAME = "mega";
   public static final String WEDNESDAY_4 = "w_4";
   public static final String WEDNESDAY_6 = "w_6";
   public static final String WEDNESDAY_8 = "w_8";
   public static final String WEDNESDAY_10 = "w_10";
   public static final String THURSDAY_4 = "t_4";
   public static final String THURSDAY_6 = "t_6";
   public static final String THURSDAY_8 = "t_8";
   public static final String THURSDAY_10 = "t_10";

   private HashMap hp;

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

   @Override
   public void onCreate(SQLiteDatabase db) {
      // TODO Auto-generated method stub
      db.execSQL("CREATE TABLE " + MEGA_TABLE_NAME + "(w_4 TEXT, w_6 TEXT, w_8 TEXT, w_10 TEXT, t_4 TEXT, t_6 TEXT, t_8 TEXT, t_10 TEXT )");
      ContentValues contentValues = new ContentValues();

      contentValues.put("w_4", "");
      contentValues.put("w_6", "");
      contentValues.put("w_8", "");
      contentValues.put("w_10", "");
      contentValues.put("t_4", "");
      contentValues.put("t_6", "");
      contentValues.put("t_8", "");
      contentValues.put("t_10", "");

      db.insert(MEGA_TABLE_NAME, null, contentValues);
   }

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

   public boolean updateW_4  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("w_4", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public boolean updateW_6  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("w_6", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public boolean updateW_8  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("w_8", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public boolean updateW_10  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("w_10", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public boolean updateT_4  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("t_4", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public boolean updateT_6  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("t_6", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public boolean updateT_8  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("t_8", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public boolean updateT_10  (String name)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("t_10", name);

      db.update("mega", contentValues, null , null );
      return true;
   }

   public String getW_4(){
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor res =  db.rawQuery( "select * from mega", null );

      return res.getString(0);
   }

   public String getW_6(){
          SQLiteDatabase db = this.getReadableDatabase();
          Cursor res =  db.rawQuery( "select * from mega", null );
          return res.getString(1);
       }

   public String getW_8(){
          SQLiteDatabase db = this.getReadableDatabase();
          Cursor res =  db.rawQuery( "select * from mega", null );

          return res.getString(2);
       }

   public String getW_10(){
          SQLiteDatabase db = this.getReadableDatabase();
          Cursor res =  db.rawQuery( "select * from mega", null );

          return res.getString(3);
       }

   public String getT_4(){
          SQLiteDatabase db = this.getReadableDatabase();
          Cursor res =  db.rawQuery( "select * from mega", null );

          return res.getString(4);
       }

   public String getT_6(){
          SQLiteDatabase db = this.getReadableDatabase();
          Cursor res =  db.rawQuery( "select * from mega", null );

          return res.getString(5);
       }

   public String getT_8(){
          SQLiteDatabase db = this.getReadableDatabase();
          Cursor res =  db.rawQuery( "select * from mega", null );

          return res.getString(6);
       }

   public String getT_10(){
          SQLiteDatabase db = this.getReadableDatabase();
          Cursor res =  db.rawQuery( "select * from mega", null );

          return res.getString(7);
       }

}

這是使用Mega_DBHelper的活動的功能:

public void setUpView (){
    wednesday = (Button)this.findViewById(R.id.wednesday);
    thursday = (Button)this.findViewById(R.id.thursday);
    day = (TextView)this.findViewById(R.id.day);
    edit4 = (EditText)this.findViewById(R.id.edit4);
    edit4.setImeOptions(EditorInfo.IME_ACTION_DONE);
    edit6 = (EditText)this.findViewById(R.id.edit6);
    edit6.setImeOptions(EditorInfo.IME_ACTION_DONE);
    edit8 = (EditText)this.findViewById(R.id.edit8);
    edit8.setImeOptions(EditorInfo.IME_ACTION_DONE);
    edit10 = (EditText)this.findViewById(R.id.edit10);
    edit10.setImeOptions(EditorInfo.IME_ACTION_DONE);
    day.setText("רביעי");
    wednesday.setVisibility(View.INVISIBLE);
    megaDB = new Mega_DBHelper(this);

    edit4.setText(megaDB.getW_4());
    edit6.setText(megaDB.getW_6());
    edit8.setText(megaDB.getW_8());
    edit10.setText(megaDB.getW_10());
}

這是logCat:

07-24 19:49:40.700: E/AndroidRuntime(8082): FATAL EXCEPTION: main
07-24 19:49:40.700: E/AndroidRuntime(8082): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidclient/com.example.androidclient.TableM}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.ActivityThread.access$600(ActivityThread.java:140)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.os.Looper.loop(Looper.java:137)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.ActivityThread.main(ActivityThread.java:4898)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at java.lang.reflect.Method.invokeNative(Native Method)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at java.lang.reflect.Method.invoke(Method.java:511)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at dalvik.system.NativeStart.main(Native Method)
07-24 19:49:40.700: E/AndroidRuntime(8082): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at com.example.androidclient.Mega_DBHelper.getW_4(Mega_DBHelper.java:152)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at com.example.androidclient.TableM.setUpView(TableM.java:145)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at com.example.androidclient.TableM.onCreate(TableM.java:55)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.Activity.performCreate(Activity.java:5206)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
07-24 19:49:40.700: E/AndroidRuntime(8082):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
07-24 19:49:40.700: E/AndroidRuntime(8082):     ... 11 more

有人可以幫幫我嗎?

提前致謝!

惠特倫回答:

public String getW_4(){
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor res =  db.rawQuery( "select * from mega", null );
  if (res.moveToFirst()) {
   return res.getString(0);
  } else {
   return "";
  }
}

游標可能不包含任何數據,並且在將其傳遞給您時,它會設置為-1行。 為了確定是否有任何數據,您必須要求它移動到第一個有效位置。

如果沒有有效的職位,那么您也必須處理這種情況。

public String getW_4(){
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor res =  db.rawQuery( "select * from mega", null );
  if (res.moveToFirst()) {
   return res.getString(0);
  } else {
   return "";
  }
}

在從游標中獲取某些內容之前,您首先需要先在其上調用moveToNext。 因此,例如get_W4:

public String getW_4(){
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor res =  db.rawQuery( "select * from mega", null );
      res.moveToNext();
      return res.getString(0);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM