首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >_ID不存在

_ID不存在
EN

Stack Overflow用户
提问于 2011-10-11 07:03:34
回答 5查看 615关注 0票数 0

我试图从幻灯片bbdd中获取数据并将其显示在列表视图中,但我遇到了错误。

代码语言:javascript
运行
复制
public class DataBaseHelper extends SQLiteOpenHelper{

    private static String DB_PATH = "/data/data/com.rbrlnx.lugares/databases/";
    private static final String DATABASE_NAME="db.db";
    SQLiteDatabase db;

     String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS lugares (" +
     " _id INTEGER PRIMARY KEY AUTOINCREMENT, " +
     "nombre text," +
     "descripcion text,"+
     "latitud real," +
     "longitud real," +
     "foto String);";

 /*Primero se crea constructor, funcion onCreate, onUpgrade,Abrir y Cerrar*/

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

    }

    public void onCreate(SQLiteDatabase db){
     try {
         openDataBase();
         db.execSQL(CREATE_TABLE);

     } catch (Exception e) {
        // handle exception
     }           
    }

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

}
    public void openDataBase() throws SQLException{

    //Open the database
    String myPath = DB_PATH + DATABASE_NAME;
    db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

    }    

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


/*Despues metodos para añadir y obtener datos*/

    public long addNombre(String nombre){

    ContentValues cv = new ContentValues();
    cv.put("nombre", nombre);
return db.insert("lugares", null, cv);           
}

     public long addDescripcion(String descripcion){

         ContentValues cv = new ContentValues();
            cv.put("descripcion", descripcion);
            return db.insert("lugares", null, cv);           

     }
     public long addLatitud(double latitud){

         ContentValues cv = new ContentValues();
            cv.put("latitud", latitud);
            return db.insert("lugares", null, cv);           

     }
     public long addLongitud(double longitud){

         ContentValues cv = new ContentValues();
            cv.put("longitud", longitud);
            return db.insert("lugares", null, cv);           

     }

     public long addFoto(String foto) {

         ContentValues cv = new ContentValues();
            cv.put("foto", foto);
            return db.insert("lugares", null, cv);           

        }


     public Cursor getNombres(){
         SQLiteDatabase db = this.getWritableDatabase();

            Cursor respuesta = db.rawQuery("select nombre from lugares", null);
           return respuesta;

       }







    }

代码语言:javascript
运行
复制
public class listatab extends ListActivity{ 

    Context context;
    ListView listanombres;
    DataBaseHelper ayudabbdd;


  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
     DataBaseHelper ayudabbdd = new DataBaseHelper(this);
     Cursor nombresC;     
     nombresC = (Cursor) ayudabbdd.getNombres();  
     startManagingCursor(nombresC);
     if(nombresC!=null){
     ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.listatab, nombresC, new String[] { "nombre" }, new int[] { R.id.lista });
     this.setListAdapter(adapter);
     this.getListView().setTextFilterEnabled(true);  

     }
  }
  @Override
protected void onDestroy() {
    super.onDestroy();
    if (ayudabbdd != null) {
        ayudabbdd.close();
    }
    }
  }

log cat向我显示了以下错误:

代码语言:javascript
运行
复制
10-11 00:55:49.930: ERROR/AndroidRuntime(32392): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rbrlnx.lugares/com.rbrlnx.lugares.listatab}: java.lang.IllegalArgumentException: column '_id' does not exist
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1487)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.widget.TabHost.setCurrentTab(TabHost.java:326)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.view.View.performClick(View.java:2485)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.view.View$PerformClick.run(View.java:9080)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.os.Handler.handleCallback(Handler.java:587)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.os.Looper.loop(Looper.java:130)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at android.app.ActivityThread.main(ActivityThread.java:3683)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at java.lang.reflect.Method.invokeNative(Native Method)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at java.lang.reflect.Method.invoke(Method.java:507)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392):     at dalvik.system.NativeStart.main(Native Method)
10-11 00:55:49.930: ERROR/AndroidRuntime(32392): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
EN

回答 5

Stack Overflow用户

发布于 2011-10-11 07:39:02

您的openDataBase()方法非常错误。您不应该提供数据库的路径。系统将为您创建数据库,并在onCreate()方法中将其传递给您。如果删除openDataBase()方法并且不从onCreate()调用它,并在onCreate()中设置this.db = db,则可以克服此错误。

有关在Android中使用数据库的更多帮助,请参阅此Android Database Tutorial。祝好运!

票数 1
EN

Stack Overflow用户

发布于 2011-10-11 15:12:00

我认为_id列也必须被选中。

Cursor respuesta = db.rawQuery("select _id,nombre from lugares",null);

票数 1
EN

Stack Overflow用户

发布于 2011-10-11 07:18:54

在没有更多信息的情况下(我也不是Android专家),我怀疑您的表要么不存在,要么存在但没有_id列。您使用的是CREATE TABLE IF NOT EXISTS,如果表-可能具有不同的列-已经存在,则会导致create语句不被执行。

您没有记录您的异常,因此该语句实际上可能会抛出一个被忽略的异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7719657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档