Android——SQLite使用
Android作为目前主流的移动操作系统,完全符合SQLite占用资源少的优势,故在Android平台上,集成了一个嵌入式关系型数据库—SQLite。如果你想要开发 Android 应用程序,一定需要在 Android 上存储数据,使用SQLite 数据库是一种非常好的选择。(引用自百度百科)
下面按照顺序一步一步,创建一个可视化的SQLite应用程序
1.创建一个Db继承自SQLiteOpenHelper类,
SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。
可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。
所有继承了这个类的类都必须实现下面这样的一个构造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
第一个参数:Context类型,上下文对象。
第二个参数:String类型,数据库的名称
第三个参数:CursorFactory类型
第四个参数:int类型,数据库版本
并实现两个虚方法:
@Override public void onCreate(SQLiteDatabase db) { //对象创建时调用 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //数据库版本更新是调用,上面介绍了一个参数int version,通过这个整数值,系统判断是否版本不一致而执行更新操作 }
在onCreate 函数里面我们可以创建数据库的表,语法可以参考SQLite官网的语法
public void onCreate(SQLiteDatabase db) { db.execSQL("create table user(_id integer primary key autoincrement," + "name text default \"\"," + "age integer default 0," + "sex text default \"\")"); }
注意!,一定要有 _id字段,不然出现运行期错误
注意!,一定要有 _id字段,不然出现运行期错误
注意!,一定要有 _id字段,不然出现运行期错误
然后我们开始来插入数据和读取数据:打开MainActivity.java(启动的Avtivity),定义字段
private Db db; private SQLiteDatabase dbReader; private SQLiteDatabase dbWriter;
在onCreate函数里对db进行初始化(dbReader和dbWriter最好在使用的时候通过db的方法获得,使用后要及时关闭)
db=new Db(this,"db",null,1); //获得dbReader和dbWriter dbReader=db.getReadableDatabase(); dbWriter=db.getWritableDatabase();
接下来我们要打开activity_main.xml布局文件,加入一个ListView和插入数据的一些控件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"> </ListView> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:text="name" android:layout_height="wrap_content"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/etName"/> <TextView android:layout_width="wrap_content" android:text="age" android:layout_height="wrap_content"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/etAge"/> <TextView android:layout_width="wrap_content" android:text="sex" android:layout_height="wrap_content"/> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/etSex"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="添加" android:id="@+id/btn_add"/> </LinearLayout></LinearLayout>
然后 我们在MainActivity中获取到其中ListView,Button以及EditText
//声明全局字段 private EditText etName,etSex,etAge; private Button btn_add; private ListView listView;
在oncreate中找到findViewById();
etName= (EditText) findViewById(R.id.etName); etAge= (EditText) findViewById(R.id.etAge); etSex= (EditText) findViewById(R.id.etSex); listView= (ListView) findViewById(R.id.listView); btn_add= (Button) findViewById(R.id.btn_add);
给listView绑定数据源,这里我们要用到SimpleCursorAdapter,我们使用dbReader.query()查询得到的是一个cursor对象 :
private SimpleCursorAdapter adapter;
public Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having,String orderBy);
再利用得到的cursor,创建一个SimpleCursorAdapter
public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
通过上面两个函数在onCreate里这样写:
dbReader=db.getReadableDatabase();Cursor c= dbReader.query("user", null, null, null, null, null, null);//表示查询表的所有数据adapter=new SimpleCursorAdapter(this,R.layout.list_cell,c,new String[]{"name","age","sex"},new int[]{R.id.tvName,R.id.tvAge,R.id.tvSex});//参数为:当前Activity,列表项布局文件,数据库中的数据项名称集合,数据项绑定到的list_cell中的控件 listView.setAdapter(adapter);//绑定数据
给按钮加上点击事件,在点击事件里面我们进行数据的插入,插入之后我们要刷新视图,所以单独建一个刷新函数refresh():
btn_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获得dbWriter dbWriter=db.getWritableDatabase(); ContentValues cv=new ContentValues(); cv.put("name",etName.getText().toString()); cv.put("sex", etSex.getText().toString()); try { cv.put("age", Integer.parseInt(etName.getText().toString())); }catch(Exception e){ Toast.makeText(MainActivity.this, "age 只能填数字", Toast.LENGTH_SHORT).show(); } dbWriter.insert("user",null,cv); dbWriter.close(); refreshView(); } });
刷新函数
private void refreshView(){ dbReader=db.getReadableDatabase(); Cursor c= dbReader.query("user", null, null, null, null, null, null); adapter.changeCursor(c); dbReader.close(); }
看看效果,
首先添加数据,输入数据:
点击添加:
到这里我们实现了添加和读取,接下来我们实现删除:
我们采取长按列表项删除的方法:为listView设置长按事件监听
listView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return false; } });
我们重写onLongClick方法让它弹出一个AlertDialog,
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { new AlertDialog.Builder(view.getContext()).setNegativeButton("取消", null) .setMessage("确定要删除该选择项吗") .setTitle("删除操作") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dbWriter = db.getWritableDatabase(); Cursor c = adapter.getCursor(); c.moveToPosition(position); dbWriter.delete("user", "_id=?", new String[]{Integer.toString(c.getInt(c.getColumnIndex("_id")))}); dbWriter.close(); refreshView(); } }) .show(); return true; }
修改的话我们可以按同样思路,我们让ListView设置单击事件监听,弹出AlertDialog,在AlertDialog 点击确定事件中跳转到修改界面,可以和上面的插入操作一样,跳出一个对话框提示是否修改,是:调到另外一个界面修改,修改完成再跳回来
这里我想直接跳出一个自定义的AlertDialog ,里面就包含了输入框和修改和取消按钮:
具体操作在下一篇博客:Android——自定义AlertDialog
更多相关文章
- android Service之四:传递复杂数据类型的远程服务
- 传智播客—Android(二)数据存储和访问 之文件
- Android保存数据几种常用方法解析
- Android数据储存
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程
- Android 封装的数据库管理操作类
- Android Sqlite轻量级数据库框架
- android的liveview装载数据
- Android 将从网络获取的数据缓存到私有文件