DB-sqllite机器人,不工作 [英] DB-sqllite android, not working

查看:172
本文介绍了DB-sqllite机器人,不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发DB为一个应用程序,它的工作...

我需要的是8串DB,我可以更新,并从活动得到它们。

我要开始,所有8个字符串。

这是我的code为DB:

 公共类Mega_DBHelper扩展SQLiteOpenHelper {   公共静态最后弦乐DATABASE_NAME =Mega.db;
   公共静态最后弦乐MEGA_TABLE_NAME =巨无霸;
   公共静态最后弦乐WEDNESDAY_4 =的例句
   公共静态最后弦乐WEDNESDAY_6 =w_6;
   公共静态最后弦乐WEDNESDAY_8 =w_8;
   公共静态最后弦乐WEDNESDAY_10 =w_10;
   公共静态最后弦乐THURSDAY_4 =T_4;
   公共静态最后弦乐THURSDAY_6 =t_6;
   公共静态最后弦乐THURSDAY_8 =t_8;
   公共静态最后弦乐THURSDAY_10 =t_10;   私人HashMap的马力;   公共Mega_DBHelper(上下文的背景下)
   {
      超级(上下文,DATABASE_NAME,空,1);
   }   @覆盖
   公共无效的onCreate(SQLiteDatabase DB){
      // TODO自动生成方法存根
      db.execSQL(CREATE TABLE+ MEGA_TABLE_NAME +(TEXT的例句,w_6 TEXT,w_8 TEXT,w_10 TEXT,T_4 TEXT,t_6 TEXT,t_8 TEXT,t_10 TEXT));
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(的例句,);
      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,空,contentValues​​);
   }   @覆盖
   公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
      // TODO自动生成方法存根
      db.execSQL(DROP TABLE IF EXISTS+ MEGA_TABLE_NAME);
      的onCreate(DB);
   }   公共布尔updateW_4(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(的例句,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共布尔updateW_6(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(w_6,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共布尔updateW_8(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(w_8,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共布尔updateW_10(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(w_10,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共布尔updateT_4(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(T_4,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共布尔updateT_6(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(t_6,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共布尔updateT_8(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(t_8,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共布尔updateT_10(字符串名称)
   {
      SQLiteDatabase分贝= this.getWritableDatabase();
      ContentValues​​ contentValues​​ =新ContentValues​​();      contentValues​​.put(t_10,名);      db.update(巨无霸,contentValues​​,NULL,NULL);
      返回true;
   }   公共字符串getW_4(){
      SQLiteDatabase分贝= this.getReadableDatabase();
      光标解析度= db.rawQuery(选择兆*,NULL);      返回res.getString(0);
   }   公共字符串getW_6(){
          SQLiteDatabase分贝= this.getReadableDatabase();
          光标解析度= db.rawQuery(选择兆*,NULL);
          返回res.getString(1);
       }   公共字符串getW_8(){
          SQLiteDatabase分贝= this.getReadableDatabase();
          光标解析度= db.rawQuery(选择兆*,NULL);          返回res.getString(2);
       }   公共字符串getW_10(){
          SQLiteDatabase分贝= this.getReadableDatabase();
          光标解析度= db.rawQuery(选择兆*,NULL);          返回res.getString(3);
       }   公共字符串getT_4(){
          SQLiteDatabase分贝= this.getReadableDatabase();
          光标解析度= db.rawQuery(选择兆*,NULL);          返回res.getString(4);
       }   公共字符串getT_6(){
          SQLiteDatabase分贝= this.getReadableDatabase();
          光标解析度= db.rawQuery(选择兆*,NULL);          返回res.getString(5);
       }   公共字符串getT_8(){
          SQLiteDatabase分贝= this.getReadableDatabase();
          光标解析度= db.rawQuery(选择兆*,NULL);          返回res.getString(6);
       }   公共字符串getT_10(){
          SQLiteDatabase分贝= this.getReadableDatabase();
          光标解析度= db.rawQuery(选择兆*,NULL);          返回res.getString(7);
       }}

这是活动的,它使用的Mega_DBHelper功能:

 公共无效setupView函数(){
    周三=(按钮)this.findViewById(R.id.wednesday);
    周四=(按钮)this.findViewById(R.id.thursday);
    天=(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 =新Mega_DBHelper(本);    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):致命异常:主要
07-24 19:49:40.700:E / AndroidRuntime(8082):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.androidclient / com.example.androidclient.TableM}:android.database.CursorIndexOutOfBoundsException:指数-1要求,具有尺寸为1
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.ActivityThread.access $ 600(ActivityThread.java:140)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1227)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.os.Handler.dispatchMessage(Handler.java:99)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.os.Looper.loop(Looper.java:137)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.ActivityThread.main(ActivityThread.java:4898)
07-24 19:49:40.700:E / AndroidRuntime(8082):在java.lang.reflect.Method.invokeNative(本机方法)
07-24 19:49:40.700:E / AndroidRuntime(8082):在java.lang.reflect.Method.invoke(Method.java:511)
07-24 19:49:40.700:E / AndroidRuntime(8082):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1006)
07-24 19:49:40.700:E / AndroidRuntime(8082):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
07-24 19:49:40.700:E / AndroidRuntime(8082):在dalvik.system.NativeStart.main(本机方法)
07-24 19:49:40.700:E / AndroidRuntime(8082):android.database.CursorIndexOutOfBoundsException:由造成指数-1要求,大小为1
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
07-24 19:49:40.700:E / AndroidRuntime(8082):在com.example.androidclient.Mega_DBHelper.getW_4(Mega_DBHelper.java:152)
07-24 19:49:40.700:E / AndroidRuntime(8082):在com.example.androidclient.TableM.setUpView(TableM.java:145)
07-24 19:49:40.700:E / AndroidRuntime(8082):在com.example.androidclient.TableM.onCreate(TableM.java:55)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.Activity.performCreate(Activity.java:5206)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
07-24 19:49:40.700:E / AndroidRuntime(8082):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
07-24 19:49:40.700:E / AndroidRuntime(8082):11 ...更多

有人能帮帮我吗?

在此先感谢!

由伊陈德良答:

 公共字符串getW_4(){
  SQLiteDatabase分贝= this.getReadableDatabase();
  光标解析度= db.rawQuery(选择兆*,NULL);
  如果(res.moveToFirst()){
   返回res.getString(0);
  }其他{
   返回;
  }
}


解决方案

一个游标可能不包含任何数据,当它被交付给你,它被设置为-1行。为了确定是否有任何数据,就必须要求它移动到第一个有效位置。

如果没有有效的位置,你将不得不处理这种情况也是如此。

 公共字符串getW_4(){
  SQLiteDatabase分贝= this.getReadableDatabase();
  光标解析度= db.rawQuery(选择兆*,NULL);
  如果(res.moveToFirst()){
   返回res.getString(0);
  }其他{
   返回;
  }
}

I developed DB for an application, and it's working...

What I need is DB with 8 Strings that I can update and get them from an Activity.

I need to start with "" for all 8 strings.

This is my code for the DB:

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);
       }

}

This is the the function of the activity that uses the 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());
}

This is the 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

Can someone please help me?

Thanks in advance!

Answer by Huy Tran:

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 "";
  }
}

解决方案

A cursor might not contain any data, and when it is delivered to you, it is set to row -1. In order to determine if there is any data, you must ask it to move to the first valid position.

If there is no valid position, you will have to handle that case as well.

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 "";
  }
}

这篇关于DB-sqllite机器人,不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆