SQLiteDatabase的使用
2016-03-07 11:03
393 查看
</pre>直接上代码</p><p><pre name="code" class="java">package com.cnfol.sqlitedb; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; 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 DBTest extends Activity { SQLiteDatabase db; Button bn = null; ListView listView; EditText et_title, et_content; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dbtest); //创建或打开数据库(此处需要使用绝对路径) //① db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString() + "/my.db3", null); listView = (ListView) findViewById(R.id.listview); bn = (Button) findViewById(R.id.btn); et_title = (EditText) findViewById(R.id.et_title); et_content = (EditText) findViewById(R.id.et_content); bn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取用户输入 String title = et_title.getText().toString(); String content = et_content.getText().toString(); try { insertData(db, title, content); Cursor cursor = db.rawQuery("select * from news_inf", null); inflateList(cursor); } catch (SQLiteException e) { //执行DDL创建数据表 db.execSQL("create table news_inf(_id integer" +" primary key autoincrement," +" news_title varchar(50)," +" news_content varchar(255))"); //执行insert语句插入数据 insertData(db,title,content); //执行查询 Cursor cursor = db.rawQuery("select * from news_inf", null); inflateList(cursor); } } }); } /** * 填充SimpleCursorAdapter * @param cursor */ private void inflateList(Cursor cursor) { SimpleCursorAdapter adapter = new SimpleCursorAdapter( DBTest.this, R.layout.line, cursor, new String[]{"news_title","news_content"}, new int[]{R.id.tv_title,R.id.tv_content}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);//③ //显示数据 listView.setAdapter(adapter); } /** * 执行插入语句 * @param db * @param title * @param content * ② */ private void insertData(SQLiteDatabase db, String title, String content) { db.execSQL("insert into news_inf values(null,?,?)", new String[]{title,content}); } @Override protected void onDestroy() { super.onDestroy(); //退出程序时关闭SQLiteDatabase if (db!=null&&db.isOpen()){ db.close(); } } /** * 上面的程序中①号粗体字代码用于创建或打开SQLite数据库。 * 当用户单击程序中的“插入”按钮时,程序会调用②号粗体字 * 代码向底层数据表中插入一行记录,并执行查询语句,把底层 * 数据表中的记录查询出来,并使用ListView将结果(Cursor) * 显示出来。p417完 * * 程序中的③号代码用于将Cursor封装成SimpleCursorAdapter, * 这个SimpleCursorAdapter实现了Adapter接口,因此可以作为 * ListView或GridView的内容适配器。 * * SimpleCursorAdapter的构造器参数与SimpleAdapter的构造 * 参数大致相同,区别是SimpleAdapter负责封装集合元素为Map的List, * 而SimpleCursorAdapter负责封装Cursor--如果我们把Cursor里的 * 结果集合当成List集合,Cursor里的每一行当成Map处理(以数据列的 * 列名为Key,数据列的值为value),那么SimpleCursorAdapter与 * SimpleAdapter就统一起来了。 * * 需要指出的是,使用SimpleCursorAdapter封装Cursor时要求底 * 层数据表的主键列的列名为_id,因为SimplerCursorAdapter只能识别 * 列名为_id的主键。因此上面的程序创建数据表时指定了主键列的列名为 * _id,否则就会出现 java.lang.IIIegalArgumentException: * column '_id' does not exist错误。 * * 上面的程序中我们重写了Activity的onDestory()方法,当应用 * 程序退出该Activity时将会回调该方法,程序在该方法中关闭了 * SQLiteDatabase---就像JDBC编程中需要关闭Statement和Connection * 一样,这里也需要关闭SQLiteDatabase,否则可能引发资源泄漏。 * * 总结起来使用SQLiteDatabase进行数据库操作的步骤如下: * ①:获取SQLiteDatabase对象,它代表了与数据库的连接。 * ②:调用SQLiteDatabase的方法来执行SQL语句。 * ③:操作SQL语句的执行结果,比如用SimpleCursorAdapter封装Cursor. * ④:关闭SQLiteDatabase,回收资源。 * * * */ }
相关文章推荐
- sql server 清除系统错误日志,消息队列产生大量日志
- dedecms 5.6 创建图片集时 出现 数据保存到数据库附加表 `dede_addonimages` 时出错,请把相关信息提交给
- mysql中DATE_FORMAT()和str_to_date()简介
- 微博数据库3个变迁阶段背后的设计思想
- mysql5.6安装最佳实践
- MySQL rename database如何做?
- PASSION之安装mysql常见问题
- mysqlbinlog flashback 5.6完全使用手册与原理
- Linux redis安装
- SQL Server 迁移数据到MySQL
- oracle insert into 多个value
- SQLite 查询或更新上一条插入的数据
- 不同版本的mysql字符集的默认编写
- 转 sqlserver字段描述相关操作sql
- sql 常用基础查询
- 数据库的一些基础
- 【转载】Redis与Memcached的区别
- mongodb图形化管理工具
- mysql Got error 28 from storage engine错误,Mysql导致tmp目录空间耗尽问题
- 如何使用impdp导入oracle数据库文件