现在介绍一下安卓如何操作数据库和几种常见的安卓对话框。老规矩,用一张图来介绍今天的内容。
图片看不清的话可以右键新窗口打开
SQLite,是一款轻量型的数据库,是遵守 ACID(原子性、一致性、隔离性、持久性)的关联式数据库管理系统,多用于嵌入式开发中。
SQLite 数据库是无类型的,可以向一个 integer 的列中添加一个字符串,但它又支持常见的类型比如: NULL, VARCHAR, TEXT, INTEGER, BLOB, CLOB 等
创 建 一 个 PersonOpenHelper 类 , 继 承 SQLiteOpenHelper 抽 象 类 , 重写onCreate 和 onUpgrade 方法。
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { /** * 把已知的固定值写好(数据库名称,版本号), 外边只传一个Context进来就可以初始化该帮助类了 * @param context */ public PersonSQLiteOpenHelper(Context context){ // 转调4个参数的构造函数 this(context, "jin8.db", null, 3); } /** * 创建一个数据库帮助类, 去创建\ 打开\ 管理 数据库. * @param context 上下文. * @param name 设置数据库名称 * @param factory CursorFactory 定义一个结果集, 游标工厂. * Cursor 游标(结果集, 保存了对数据库的引用, 指针) * 设置为null表示使用系统默认游标工厂 * @param version 数据库的版本, 从1开始 >= 1 */ public PersonSQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } /** * 当数据库第一次被创建时调用, 这里进行表结构的创建和初始化. */ @Override public void onCreate(SQLiteDatabase db) { System.out.println("PersonSQLiteOpenHelper: onCreate"); // 执行创建语句, 创建person表 db.execSQL("create table person(_id integer primary key autoincrement, name varchar(20),age integer)"); } /** * 数据库升级时调用, 在这里做表结构的更新,删除等操作. */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { System.out.println("PersonSQLiteOpenHelper: onUpgrade " + "旧版本号: " + oldVersion + " 新版本号: " + newVersion); if(oldVersion == 2 && newVersion == 3){ // 版本从2升级到3, 给person表添加一个balance余额字段 db.execSQL("alter table person add column balance integer"); } } }
public class PersonDAO2 { private PersonSQLiteOpenHelper helper; public PersonDAO2(Context context){ helper = new PersonSQLiteOpenHelper(context); } /** * 插入一条数据, 指定名称和年龄 * @param name * @param age */ public void insert(String name, int age) { // 获取可写数据库 SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into person (name, age) values (?, ?)", new Object[]{name, age}); } /** * 根据指定名称删除一条数据 * @param name */ public void delete(String name) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("delete from person where name = ?", new Object[]{name}); } /** * 修改一条数据, 修改指定人的年龄 * @param name * @param age */ public void update(String name, int age) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("update person set age = ? where name = ?", new Object[]{age, name}); } /** * 查询一条数据 * @param name */ public void querySingleRecord(String nameArg) { SQLiteDatabase db = helper.getReadableDatabase(); // ------------------------------------------------- 重点 ↓ // 游标, 对数据库的引用 Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{nameArg}); if(cursor != null && cursor.moveToFirst()){ // 是否能移动到第一个 int _id = cursor.getInt(0); String name = cursor.getString(1); int age = cursor.getInt(2); System.out.println("_id: " + _id + " name: " + name + " age: " + age); } // 关闭应用 cursor.close(); // ------------------------------------------------- 以上 ↑ } /** * 查询所有数据 */ public List<Person> queryAll() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person", null); ArrayList<Person> persons = new ArrayList<Person>(); if(cursor != null && cursor.getCount() > 0){ // 循环遍历 // 获取列数 int columnCount = cursor.getColumnCount(); System.out.println("columnCount: " + columnCount); while(cursor.moveToNext()){ // 直到下一个没有数据, 返回false // cursor.getColumnIndex("_id")// 根据列名获取列的索引 int _id = cursor.getInt(cursor.getColumnIndex("_id")); String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); Person person = new Person(_id, name, age); System.out.println(person.toString()); persons.add(person); } } cursor.close(); return persons; } }
public void showNotifyDialog(View view){ // 1. 通知对话框 Builder builder = new AlertDialog.Builder(this); // 设置图标 builder.setIcon(android.R.drawable.ic_dialog_alert); // 设置标题 builder.setTitle("提醒:"); // 设置提醒内容 builder.setMessage("当前是移动网络数据, 建议在wifi下观看, 是否继续(土豪随意)"); builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "确认", 0).show(); } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "取消", 0).show(); } }); builder.setCancelable(false); // 是否可以通过返回键 关闭 // 创建AlertDialog // AlertDialog dialog = builder.create(); // dialog.show(); // 直接show(); builder.show(); }
public void showListDialog(View view){ Builder builder = new AlertDialog.Builder(this); builder.setTitle("选择语言"); String[] strs = new String[]{"java", "c++", "c" , "php", "c#", "c" , "php", "c#"}; builder.setItems(strs, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { System.out.println("which: " + which); } }); builder.show(); }
public void showSingleDialog(View view){ Builder builder = new AlertDialog.Builder(this); builder.setTitle("选择性别:"); final String[] items = new String[]{"男", "女", "中性", "以前男的女的", "以前是女的男的"}; builder.setSingleChoiceItems(items, -1, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { System.out.println("which: " + which); } }); builder.setPositiveButton("确认", null); builder.show(); }
public void showMultiDialog(View view){ Builder builder = new AlertDialog.Builder(this); builder.setTitle("选择兴趣爱好:"); final String[] items = new String[]{"抽烟", "喝酒", "烫头", "编程", "泡妞"}; final boolean[] checkedItems = new boolean[]{true, false, true ,false, false}; builder.setMultiChoiceItems(items,checkedItems , new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { System.out.println("which: " + which + " isChecked: " + isChecked); checkedItems[which] = isChecked; } }); builder.setPositiveButton("确认", null); builder.show(); }
public void showProgressDialog(View view){ // 显示一个加载的对话框 // ProgressDialog.show(this, "提示: ", "正在加载中,请稍后..."); final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setTitle("提示: "); progressDialog.setMessage("正在加载中..."); // 设置样式为 横向 的 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMax(100); // 显示的时候, 会把进度归零 progressDialog.show(); new Thread(){ public void run() { while(true){ SystemClock.sleep(50); // progressDialog.setProgress(i); progressDialog.incrementProgressBy(1); if(progressDialog.getProgress() >= progressDialog.getMax()){ progressDialog.dismiss(); break; } } }; }.start(); }
原文地址:http://blog.csdn.net/jinfulin/article/details/45155017