您的位置:首页 > 数据库

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,回收资源。
*
*
*
*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: