SQLite、Cursor简单使用
2015-12-21 23:18
447 查看
本文完成数据库创建,查询,增加,删除操作。理论就不这么说了,就是那几步,先看效果:
添加权限
SD读写权限:android.permission.WRITE_EXTERNAL_STORAGE
继承SQLiteOpenHelper
获取SQLiteDatabase,进行增删改查操作
Adapter
实体类Student
这里的增加和删除数据都要再次查询才可以刷新,在Android 3.0引入了Loaders机制,就不用这么麻烦了,这个下次在研究吧。
添加权限
SD读写权限:android.permission.WRITE_EXTERNAL_STORAGE
继承SQLiteOpenHelper
/** * @project DBDemo * @ClassName DBOpenHelper.java * @Description 这里表名是写死的,实际使用中不要这样 * @author xugang * @date 2015-12-21 下午1:18:12 */ public class DBOpenHelper extends SQLiteOpenHelper { private final static String dbName = "mydb.db"; public final static String tableName = "student"; // 数据库版本 private static final int VERSION = 1; //建学生表,主键自增长 String sql = "Create Table " + tableName + "(userId INTEGER Primary Key AUTOINCREMENT,userName varchar(32),age int(32),time varchar(32))"; public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } public DBOpenHelper(Context context, String name, int version) { this(context, name, null, version); } public DBOpenHelper(Context context) { this(context, dbName, VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //数据库更新,简单点可以直接删除表 //但是推荐将旧表数据导入到新表后再删除 } }
获取SQLiteDatabase,进行增删改查操作
package com.example.dbdemo; import java.util.Random; import com.example.dbdemo.db.core.DBOpenHelper; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ListView; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class MainActivity extends Activity implements OnClickListener, OnItemClickListener { private DBOpenHelper dbOpenHelper; //操作数据库 private SQLiteDatabase db; private Button btnAdd; private Button btnSelect; private Button btnDel; private ListView lv; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { btnAdd = (Button) findViewById(R.id.btnAdd); btnDel = (Button) findViewById(R.id.btnDel); btnSelect = (Button) findViewById(R.id.btnSelect); lv = (ListView) findViewById(R.id.lv); btnDel.setEnabled(false); btnAdd.setOnClickListener(this); btnSelect.setOnClickListener(this); btnDel.setOnClickListener(this); lv.setOnItemClickListener(this); dbOpenHelper = new DBOpenHelper(this); db = dbOpenHelper.getWritableDatabase(); } private int[] ages = { 12, 18, 21, 43, 12, 43, 65, 67 }; private String[] names = { "Jack", "Tom", "Linar", "Bann", "Ajax", "Rain", "Sun" }; private Student student; private Cursor cursor = null; @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnAdd: //增加一条数据到表中 ContentValues contentValues = new ContentValues(); contentValues.put("userName", names[new Random().nextInt(7)]); contentValues.put("age", ages[new Random().nextInt(8)]); contentValues.put("time", String.valueOf(System.currentTimeMillis())); db.insertOrThrow(DBOpenHelper.tableName, null, contentValues); break; case R.id.btnSelect: //查询表,展现在Adapter中 cursor = db.rawQuery("select * from student", null); myAdapter = new MyAdapter(this, cursor); lv.setAdapter(myAdapter); break; case R.id.btnDel: //删除一条数据 if (student != null) { db.delete(DBOpenHelper.tableName, " time = ?", new String[] { student.getTime() }); btnDel.setEnabled(false); } break; default: break; } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { btnDel.setEnabled(true); student = (Student) parent.getItemAtPosition(position); } }
Adapter
package com.example.dbdemo; import android.content.Context; import android.database.Cursor; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * @project DBDemo * @ClassName MyAdapter.java * @Description 填充ListView Adapter * @author xugang * @date 2015-12-21 下午4:14:00 */ public class MyAdapter extends BaseAdapter { private Cursor cursor; private LayoutInflater inflater; public MyAdapter(Context context, Cursor cursor) { inflater = LayoutInflater.from(context); this.cursor = cursor; } @Override public int getCount() { return cursor.getCount(); } @Override public Object getItem(int position) { if (cursor.moveToPosition(position)) { Student student = new Student(cursor.getString(cursor.getColumnIndexOrThrow("userName")), cursor.getInt(cursor.getColumnIndexOrThrow("age")), cursor.getString(cursor.getColumnIndexOrThrow("time"))); return student; } return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View view, ViewGroup parent) { ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = inflater.inflate(R.layout.item, parent, false); holder.tvTime = (TextView) view.findViewById(R.id.tvTime); holder.tvUserAge = (TextView) view.findViewById(R.id.tvUserAge); holder.tvUserName = (TextView) view.findViewById(R.id.tvUserName); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } Student student = (Student) getItem(position); if (student != null) { holder.tvUserName.setText("用户名:" + student.getUserName()); holder.tvUserAge.setText("年龄:" + student.getAge()); holder.tvTime.setText("添加时间:" + student.getTime()); } return view; } private class ViewHolder { TextView tvUserName; TextView tvUserAge; TextView tvTime; } }
实体类Student
package com.example.dbdemo; /** * @project DBDemo * @ClassName Student.java * @Description 实体类 * @author xugang * @date 2015-12-21 下午2:55:06 */ public class Student { private String userName; private int age; private String time; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } @Override public String toString() { return "Student [userName=" + userName + ", age=" + age + ", time=" + time + "]"; } public Student() { super(); } public Student(String userName, int age, String time) { super(); this.userName = userName; this.age = age; this.time = time; } }
这里的增加和删除数据都要再次查询才可以刷新,在Android 3.0引入了Loaders机制,就不用这么麻烦了,这个下次在研究吧。
相关文章推荐
- 数据库基础
- MySQL命令大全
- mongodb之replSet复制集
- MySQL 分区表
- oracle密码解锁
- 配置mysql 问题解决
- Sybase如何如在isql查看proc的内容和table各个字段的详细信息
- MySQL基本
- oracle11g安装完成在cmd命令行使用sqlplus登录时提示:ORA-12560: TNS: 协议适配器错误 的解决办法
- Ubuntu 安装mysql和简单操作
- mysql字符串处理例子
- SQLite
- Redhat 6.5 安装Oracle11g
- MySQL存储过程详解
- mysql自定义函数
- oracle VPD
- Redis和MongoDB原理简析
- 兼容SQLSERVER、Oracle、MYSQL、SQLITE的超级DBHelper
- 本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
- 关闭ORACLE数据库步骤参考