Дан*_*цов 1 database sqlite android listview
当我尝试运行我的应用程序时,它崩溃了。
\n\nE/SQLiteLog\xef\xb9\x95 (1) no such column: nmb\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的数据库代码
\n\nprivate static final String DB_NAME = "mydb";\nprivate static final int DB_VERSION = 4;\nprivate static final String DB_TABLE = "mytab";\n\npublic static final String COLUMN_ID = "_id";\npublic static final String COLUMN_IMG = "img";\npublic static final String COLUMN_TXT = "txt";\npublic static final String COLUMN_NMB = "nmb";\n\nprivate static final String DB_CREATE =\n "create table " + DB_TABLE + "(" +\n COLUMN_ID + " integer primary key autoincrement, " +\n COLUMN_IMG + " integer, " +\n COLUMN_TXT + " text, " +\n COLUMN_NMB + " number" +\n ");";\n\nprivate final Context mCtx;\n\n\nprivate DBHelper mDBHelper;\nprivate SQLiteDatabase mDB1;\n\npublic DB2(Context ctx) {\n mCtx = ctx;\n}\n\npublic void open() {\n mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);\n mDB1 = mDBHelper.getWritableDatabase();\n}\n\npublic void close() {\n if (mDBHelper!=null) mDBHelper.close();\n}\n\n\n\npublic Cursor getAllData() {\n String[] columns = {"_id","txt","img","nmb"};\n return mDB1.query(DB_TABLE, columns, null, null, null, null, null);\n}\n\npublic void addRec(String txt, int img, String nmb) {\n ContentValues cv = new ContentValues();\n cv.put(COLUMN_TXT, txt);\n cv.put(COLUMN_IMG, img);\n cv.put(COLUMN_NMB, nmb);\n mDB1.insert(DB_TABLE, null, cv);\n}\n\npublic void delRec(long id) {\n mDB1.delete(DB_TABLE, COLUMN_ID + " = " + id, null);\n}\n\nprivate class DBHelper extends SQLiteOpenHelper {\n\n public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,\n int version) {\n super(context, name, factory, version);\n }\n\n @Override\n public void onCreate(SQLiteDatabase db) {\n db.execSQL(DB_CREATE);\n\n }\n\n @Override\n public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的活动代码
\n\nprivate static final int CM_DELETE_ID = 1;\nListView lvData;\nDB2 db;\nSimpleCursorAdapter scAdapter;\nCursor cursor;\nEditText et,nmb;\npublic void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_test4);\n et =(EditText)findViewById(R.id.editText2);\n nmb = (EditText)findViewById(R.id.nmb);\n db = new DB2(this);\n db.open();\n\n cursor = db.getAllData();\n startManagingCursor(cursor);\n\n String[] from = new String[] { DB2.COLUMN_IMG, DB2.COLUMN_TXT, DB2.COLUMN_NMB };\n int[] to = new int[] { R.id.ivImg, R.id.tvText, R.id.tvNmb };\n\n scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);\n lvData = (ListView) findViewById(R.id.lvData);\n lvData.setAdapter(scAdapter);\n\n registerForContextMenu(lvData);\n\n}\n\n\n\npublic void onButtonClick(View view) {\n db.addRec(et.getText().toString(), R.mipmap.ic_launcher, nmb.getText().toString());\n cursor.requery();\n}\n\npublic void onCreateContextMenu(ContextMenu menu, View v,\n ContextMenu.ContextMenuInfo menuInfo) {\n super.onCreateContextMenu(menu, v, menuInfo);\n menu.add(0, CM_DELETE_ID, 0, R.string.delete_record);\n}\n\npublic boolean onContextItemSelected(MenuItem item) {\n if (item.getItemId() == CM_DELETE_ID) {\n AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();\n db.delRec(acmi.id);\n cursor.requery();\n return true;\n }\n return super.onContextItemSelected(item);\n}\n\nprotected void onDestroy() {\n super.onDestroy();\n db.close();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在我的第一个 DB_VERSION 中,我没有 COLUMN_NMB 并且它正在工作。另外,在“getAllData()”游标公共中,我只返回了 mDB1.query(DB_TABLE, null, null, null, null, null, null); 。添加 nmb 字符串后,它不断崩溃
\n疯狂猜测:您可能在第二时刻添加了该列。
卸载并重新安装您的应用程序。
这是因为,如果您不重新安装应用程序,则不会触及现有数据库。
或者如果您没有设置更高的 DATABASE_VERSION 值。
| 归档时间: |
|
| 查看次数: |
10032 次 |
| 最近记录: |