现在介绍一下安卓如何操作数据库和几种常见的安卓对话框。老规矩,用一张图来介绍今天的内容。
图片看不清的话可以右键新窗口打开
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