標籤:
利用閑時寫了一個簡單的Sql語句操作SQLite資料庫,在用SimpleCursorAdapter時出了一個異常好久都沒解決
Process: com.example.chunchuner.usesqltest405, PID: 31206
java.lang.IllegalArgumentException: column ‘_id‘ does not exist
通過一系列尋找資料才發現
//使用SimpleCursorAdapter封裝Cursor時候Cursor要求底層資料庫的主鍵列的列名必須為_id
//否則會出現java.lang.IllegalArgumentException異常
代碼如下:
package com.example.nanchen.usesqltest405;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteException;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.CursorAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.SimpleCursorAdapter;public class MainActivity extends AppCompatActivity { private Button insert; private EditText textView_title,textView_content; private SQLiteDatabase db; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //建立或者開啟資料庫(此處需要使用絕對路徑) db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/my.db3",null); insert = (Button) findViewById(R.id.insert); listView = (ListView) findViewById(R.id.listView); textView_title = (EditText) findViewById(R.id.title_text); textView_content = (EditText) findViewById(R.id.content); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String title = textView_title.getText().toString(); String content = textView_content.getText().toString(); try { insertData(db, title, content); }catch (SQLiteException e){ //執行建立資料庫表 db.execSQL("create table news_inf(_id integer primary key autoincrement, " + "news_title varchar2,news_content varchar2)"); insertData(db, title, content); } Cursor cursor = db.rawQuery("select * from news_inf", null); inflateList(cursor); } }); } private void insertData(SQLiteDatabase db,String title,String content){ db.execSQL("insert into news_inf values(null,?,?)", new String[]{title, content}); } private void inflateList(Cursor cursor){ //填充SimpleCursorAdapter //使用SimpleCursorAdapter封裝Cursor時候Cursor要求底層資料庫的主鍵列的列名必須為_id //否則會出現java.lang.IllegalArgumentException異常 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1,cursor, new String[]{"news_title","news_content"}, new int[]{R.id.title_text,R.id.content}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); //顯示資料 listView.setAdapter(adapter); } @Override protected void onDestroy() { super.onDestroy(); //退出程式時關閉SQLiteDataBase if (db != null && db.isOpen()){ db.close(); } }}
安卓SQLite常見錯誤