安卓SQLite常见错误
利用闲时写了一个简单的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(); } } }
作 者:
南 尘
出 处: http://www.cnblogs.com/liushilin/
关于作者:专注于移动前端的项目开发。如有问题或建议,请多多赐教!欢迎加入Android交流群:118116509
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章下部【推荐】或侧边【关注】。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎关注我的公众号,精讲面试、算法、Andrid、Java、Python,旨在打造全网最比心的公众号。
![微信公众号 微信公众号](https://images2018.cnblogs.com/blog/845964/201807/845964-20180710101046271-1762311324.jpg)