安卓第四天笔记-Sqlite
安卓第四天笔记-Sqlite
1.数据库的创建运行与更新
1.1.创建一个类继承SqliteOpenHelper

1.2.创建构造方法
/**
* 数据库创建类
* @author 刘楠
*
* 2016-2-20上午10:04:34
*/
public class DbSqliteOpenHelper extends SQLiteOpenHelper {
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本
*/
public DbSqliteOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 当数据库被创建时,执行,
* 只会执行一次
*/
@Override
public void onCreate(SQLiteDatabase db) {
}
/**
* 当数据版本升级时执行,
* 数据版本只能升不能降 从1开始
* 这里常用于更改数据库中的表的结构,如添加列,删除列,之类的,创建新的表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
1.3.更改构造方法
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本
*/
public DbSqliteOpenHelper(Context context) {
super(context, "student.db", null, 1);
}
更改后
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本 这里的版本必须大于0,如果为0就会报错
*/
public DbSqliteOpenHelper(Context context) {
super(context, "student.db", null, 1);
}
源码中的解释,数据库版本必须大于等于0,否则会抛出异常

将数据库版本设置为0,运行

不能降版本

1.4.在onCreate方法中创建数据库表
/**
* 当数据库被创建时,执行,
* 只会执行一次
*/
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据库表
//sql create table students(_id integer primary key, name varchar(30))
db.execSQL("create table students(_id integer primary key, name varchar(30))");
Log.i(TAG, "onCreate 方法执行了");
}
1.5.在Activity中实例化
/**
* 数据库初始化
* @author 刘楠
*
* 2016-2-20上午10:27:04
*/
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private DbSqliteOpenHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化
helper = new DbSqliteOpenHelper(this);
Log.i(TAG, "helper 实例化");
//执行下方的代码后才会创建数据库
helper.getWritableDatabase();
}
}
创建数据库后并不会被创建,只有执行了,getReadDatabase或者getWriteDatabase(),
才会执行onCreate中的方法

运行查看LOG

1.6.数据已经创建,查看数据库
将数据库文件导出到桌面
SQLite Expert Professional 3打开

1.7.修改数据库版本,同是添加一列
/**
* 当数据版本升级时执行,
* 数据版本只能升不能降 从1开始
* 这里常用于更改数据库中的表的结构,如添加列,删除列,之类的,创建新的表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "onUpgrade 方法执行了");
//sql alter table students add gender varchar(10)
//添加列
db.execSQL("alter table students add gender varchar(10)");
}
查看日志

1.8.导出数据库中的文件再次查看

列已经添加成功
2.传统方式操作数据库
使用sql来操作数据库
/**
* 传统数据库操作工具类
* @author 刘楠
*
* 2016-2-20下午12:19:16
*/
public class StudentDao {
private static final String TAG = "StudentDao";
/*
* 操作数据库类
*/
private DbSqliteOpenHelper helper;
public StudentDao(Context context){
helper = new DbSqliteOpenHelper(context);
}
/**
* 插入方法
* @param name 姓名
* @param gender 性别
* @param stuno 学号
*/
public void insert(String name,String gender,String stuno){
//获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql="insert into students values (null,?,?,?)";
//填充占位符
Object [] bindArgs={name,gender,stuno};
//执行SQL
db.execSQL(sql, bindArgs);
//关闭数据库连接
db.close();
}
/**
* 修改更改 update
* @param name 姓名
* @param gender 性别
* @param stuno 学号
*/
public void update(String name,String gender,String stuno){
//获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql="update students set gender=?,stuno=? where name=?";
//填充占位符
Object [] bindArgs={gender,stuno,name};
//执行SQL
db.execSQL(sql, bindArgs);
//关闭数据库连接
db.close();
}
/**
* 删除
* @param name 姓名
*/
public void delete(String name){
//获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql="delete from students where name=?";
//填充占位符
Object [] bindArgs={name};
//执行SQL
db.execSQL(sql, bindArgs);
//关闭数据库连接
db.close();
}
/**
* 查询全部
*
*/
public void getAll(){
//获取数据
SQLiteDatabase db = helper.getReadableDatabase();
String sql="select _id,name,gender,stuno from students";
//执行SQL
Cursor cursor = db.rawQuery(sql, null);
while(cursor.moveToNext()){
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:"+_id+"name:"+name+",gender:"+gender+",stuno:"+stuno);
}
cursor.close();
//关闭数据库连接
db.close();
}
/**
* 查询全部
*
*/
public void getOne(String stuname){
//获取数据
SQLiteDatabase db = helper.getReadableDatabase();
String sql="select _id,name,gender,stuno from students where name=?";
String[] selectionArgs = {stuname};
//执行SQL
Cursor cursor = db.rawQuery(sql, selectionArgs);
while(cursor.moveToNext()){
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:"+_id+"name:"+name+",gender:"+gender+",stuno:"+stuno);
}
cursor.close();
//关闭数据库连接
db.close();
}
}
测试类
/**
* 测试传统方式数据库工具类
* @author 刘楠
*
* 2016-2-20下午12:48:37
*/
public class TestStudentDao extends AndroidTestCase{
private StudentDao studentDao;
@Override
protected void setUp() throws Exception {
studentDao = new StudentDao(getContext());
}
/**
* 测试插入
*/
public void testInsert(){
studentDao.insert("lisi", "man", "heimaAndroid2179");
}
/**
* 测试插入
*/
public void testDelete(){
studentDao.delete("liunan");
}
/**
* 测试修改
*/
public void testUpdate(){
studentDao.update("lisi", "女", "33");
}
/**
* 测试查询全部
*/
public void testGetAll(){
studentDao.getAll();
}
/**
* 测试查询一个
*/
public void testGetOne(){
studentDao.getOne("lisi");
}
}
3.数据版本判断与更新
/**
* 数据库创建类
* @author 刘楠
*
* 2016-2-20上午10:04:34
*/
public class DbSqliteOpenHelper extends SQLiteOpenHelper {
private static final String TAG = "DbSqliteOpenHelper";
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本 这里的版本必须大于0,如果为0就会报错
*/
public DbSqliteOpenHelper(Context context) {
super(context, "student.db", null,4);
}
/**
* 当数据库被创建时,执行,
* 只会执行一次
* 第二闪运行是就不会执行了
*/
@Override
public void onCreate(SQLiteDatabase db) {
int version = db.getVersion();
Log.i(TAG, "version:"+version);
Log.i(TAG, "onCreate 方法执行了");
if(version==0){
db.execSQL("create table students(_id integer primary key autoincrement, name varchar(30),gender varchar(10),stuno varchar(50))");
Log.i(TAG, "version=0执行了");
}else{
//创建数据库表
//sql create table students(_id integer primary key, name varchar(30))
db.execSQL("create table students(_id integer primary key autoincrement, name varchar(30))");
Log.i(TAG, "version不等0执行了");
}
}
/**
* 当数据版本升级时执行,
* 数据版本只能升不能降 从1开始
* 这里常用于更改数据库中的表的结构,如添加列,删除列,之类的,创建新的表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "onUpgrade 方法执行了");
Log.i(TAG, oldVersion+"");
Log.i(TAG, newVersion+"");
//算出新 旧版本的差
int difference = newVersion-oldVersion;
switch (difference) {
case 1:
db.execSQL("alter table students add gender varchar(10)");
Log.i(TAG, difference+"");
break;
case 2:
db.execSQL("alter table students add gender varchar(10))");
db.execSQL("alter table students add stuno varchar(50))");
Log.i(TAG, difference+"");
break;
default:
break;
}
}
}
4.使用Android提供的API来操作数据库
/**
* 使用Android中的API来执行操作数据库
*
* @author 刘楠
*
* 2016-2-20下午12:19:16
*/
public class StudentDao2 {
private static final String TAG = "StudentDao2";
/*
* 操作数据库类
*/
private DbSqliteOpenHelper helper;
public StudentDao2(Context context) {
helper = new DbSqliteOpenHelper(context);
}
/**
* 插入方法
*
* @param name
* 姓名
* @param gender
* 性别
* @param stuno
* 学号
*/
public long insert(String name, String gender, String stuno) {
// 获取数据
SQLiteDatabase db = helper.getWritableDatabase();
// 填充占位符
ContentValues values = new ContentValues();
values.put("name", name);
values.put("gender", gender);
values.put("stuno", stuno);
String nullColumnHack = "values(null,?,?,?)";
// 执行SQL
long insert = db.insert("students", nullColumnHack, values);
// 关闭数据库连接
db.close();
return insert;
}
/**
* 修改更改 update
*
* @param name
* 姓名
* @param gender
* 性别
* @param stuno
* 学号
*/
public int update(String name, String gender, String stuno) {
// 获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql = "update students set gender=?,stuno=? where name=?";
// 填充占位符
ContentValues values = new ContentValues();
values.put("gender", gender);
values.put("stuno", stuno);
// 执行SQL
int update = db.update("students", values, " name=?", new String[]{name});
// 关闭数据库连接
db.close();
return update;
}
/**
* 删除
*
* @param name
* 姓名
*/
public int delete(String name) {
// 获取数据
SQLiteDatabase db = helper.getWritableDatabase();
// 执行SQL
int delete = db.delete("students", " name=?", new String[]{name});
// 关闭数据库连接
db.close();
return delete;
}
/**
* 查询全部
*
*/
public void getAll() {
// 获取数据
SQLiteDatabase db = helper.getReadableDatabase();
String sql = "select _id,name,gender,stuno from students";
// 执行SQL
Cursor cursor = db.query("students", new String[]{"_id","name","gender","stuno"}, null, null, null, null, null);
while (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:" + _id + "name:" + name + ",gender:" + gender
+ ",stuno:" + stuno);
}
cursor.close();
// 关闭数据库连接
db.close();
}
/**
* 查询全部
*
*/
public void getOne(String stuname) {
// 获取数据
SQLiteDatabase db = helper.getReadableDatabase();
// 执行SQL
Cursor cursor = db.query("students", new String[]{"_id","name","gender","stuno"}, "name =?", new String[]{stuname}, null, null, null);
while (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:" + _id + "name:" + name + ",gender:" + gender
+ ",stuno:" + stuno);
}
cursor.close();
// 关闭数据库连接
db.close();
}
}
测试
/**
* 测试传统方式数据库工具类
* @author 刘楠
*
* 2016-2-20下午12:48:37
*/
public class TestStudentDao2 extends AndroidTestCase{
private static final String TAG = "TestStudentDao2";
private StudentDao2 studentDao2;
@Override
protected void setUp() throws Exception {
studentDao2 = new StudentDao2(getContext());
}
/**
* 测试插入
*/
public void testInsert(){
long result = studentDao2.insert("lisi", "man", "heimaAndroid2179");
Log.i(TAG, result+"");
}
/**
* 测试插入
*/
public void testDelete(){
int delete = studentDao2.delete("aa");
Log.i(TAG, delete+"");
}
/**
* 测试修改
*/
public void testUpdate(){
int update = studentDao2.update("lisi", "hh", "33");
Log.i(TAG, update+"");
}
/**
* 测试查询全部
*/
public void testGetAll(){
studentDao2.getAll();
}
/**
* 测试查询一个
*/
public void testGetOne(){
studentDao2.getOne("gh");
}
}
5.创建一个学生信息录入,使用ListView展示信息baseAdapter



布局
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="学生信息管理系统"
android:textColor="#77ff0000"
android:textSize="29sp" />
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入学生姓名" />
<!-- 性别 -->
<RadioGroup
android:id="@+id/rgp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- 性别男 -->
<RadioButton
android:id="@+id/rb_male"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="male" />
<!-- 性别女 -->
<RadioButton
android:id="@+id/rb_female"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="female" />
</RadioGroup>
<!-- 保存 -->
<Button
android:id="@+id/btn_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存" />
<!-- 查询 -->
<Button
android:id="@+id/btn_querty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询全部学生信息" />
<ListView
android:id="@+id/lv_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ff0000"
android:dividerHeight="2dp">
</ListView>
</LinearLayout>
ListView要使用的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/iv_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="20dp"
android:src="@drawable/mr" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_toRightOf="@id/iv_sex" >
<TextView
android:id="@+id/tv_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="学号" />
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_no"
android:text="姓名" />
<ImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_margin="20dp"
android:src="@drawable/delete" />
</RelativeLayout>
</RelativeLayout>
数据库创建类
/**
* 数据库创建类,与维护的类 继承SQLiteOpenHelper
* @author 刘楠
*
* 2016-2-20下午6:32:00
*/
public class StudentSqliteOpenHelper extends SQLiteOpenHelper {
private static final String TAG = "StudentSqliteOpenHelper";
public StudentSqliteOpenHelper(Context context) {
super(context, "student.db", null, 2);
}
/**
* 创建数据库时,执行一次,只执行一次
* 用来创建数据表
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(TAG, "onCreate执行了");
//获取原来的版本,获取不到为0
int version = db.getVersion();
if(version==0){
//创建表
String sql= "create table students ( _id integer primary key autoincrement, name varchar(30),gender varchar(10))";
db.execSQL(sql);
}else{
//创建表
String sql= "create table students ( _id integer primary key autoincrement, name varchar(30))";
db.execSQL(sql);
}
}
/**
* 当数据库版本发生变化时执行
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "onUpgrade执行了");
switch (oldVersion) {
case 1:
String sql= "alter table students add gender varchar(10)";
db.execSQL(sql);
break;
case 2:
break;
default:
break;
}
}
}
实体类
/**
* 学生的封装类
*
* @author 刘楠
*
* 2016-2-20下午6:31:20
*/
public class Student {
/*
* ID
*/
private int id;
/*
* 姓名
*/
private String name;
/*
* 性别
*/
private String gender;
public Student() {
super();
}
public Student(int id, String name, String gender) {
super();
this.id = id;
this.name = name;
this.gender = gender;
}
public String getGender() {
return gender;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
数据库工具类
/**
* 学生数据库访问工具类
*
* @author 刘楠
*
* 2016-2-20下午6:45:03
*/
public class StudentDao {
/*
* 数据库创建更新类
*/
private StudentSqliteOpenHelper helper;
public StudentDao(Context context) {
helper = new StudentSqliteOpenHelper(context);
}
/**
* 插入一条记录
*
* @param name
* 姓名
* @param gender
* 性别
* @return 返回插入后的_id
*/
public long insert(String name, String gender) {
// 获取数据库
SQLiteDatabase db = helper.getWritableDatabase();
// 插入的列
String nullColumnHack = "values(null,?,?)";
// 占位符
ContentValues values = new ContentValues();
values.put("name", name);
values.put("gender", gender);
// 执行
long insert = db.insert("students", nullColumnHack, values);
// 关闭连接
db.close();
return insert;
}
/**
* 修改一条记录
*
* @param name
* 姓名
* @param gender
* 性别
* @return 返回插入后的_id
*/
public long update(String name, String gender) {
// 获取数据库
SQLiteDatabase db = helper.getWritableDatabase();
// 插入的列
// 占位符
ContentValues values = new ContentValues();
values.put("gender", gender);
// 执行
int update = db.update("students", values, "name = ?",
new String[] { name });
// 关闭连接
db.close();
return update;
}
/**
* 删除一条记录
*
* @param name
* 姓名
*
* @return 返回删除后的_id
*/
public int delete(String name) {
// 获取数据库
SQLiteDatabase db = helper.getWritableDatabase();
// 执行
int delete = db.delete("students", "name = ?", new String[] { name });
// 关闭连接
db.close();
return delete;
}
/**
* 查询全部学生信息
*
* @return
*/
public List<Student> getAll() {
// 容器
List<Student> list = new ArrayList<Student>();
// 获取数据库
SQLiteDatabase db = helper.getReadableDatabase();
String[] columns = { "_id", "name", "gender" };
Cursor cursor = db.query("students", columns, null, null, null, null,
null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
// 添加到集合中
list.add(new Student(id, name, gender));
}
// 关闭游标
cursor.close();
// 关闭
db.close();
return list;
}
}
Activity
/**
* 学生管理信息系统Activity
* 步骤
* 1.获取用户输入姓名与选择的性别
* 2.判断是否为空,为空就提示,不为空
* 3.保存数据
* 4.点击查询,在下方的ListView中显示所有的学生信息
* 5.为ListView设置BaseAdapter
* 6.实现getCount与getView方法
* 7.返回view
* 8.点击删除,弹出提示对话框,
* 9.取消什么也不做,确定就删除当前记录
* @author 刘楠
*
* 2016-2-20下午8:59:43
*/
public class MainActivity extends Activity implements OnClickListener {
/*
* 姓名
*/
private EditText et_name;
/*
* 性别
*/
private RadioGroup rgp;
/*
* 保存
*/
private Button btn_save;
/*
* 查询
*/
private Button btn_querty;
/*
* 学生列表
*/
private ListView lv_item;
/*
* 学生表数据库操作类
*/
private StudentDao studentDao;
/*
* 学生列表
*/
private List<Student> list;
/*
* 学生列表适配器
*/
private StuBaseAdapter stuBaseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_name = (EditText) findViewById(R.id.et_name);
rgp = (RadioGroup) findViewById(R.id.rgp);
btn_save = (Button) findViewById(R.id.btn_save);
btn_querty = (Button) findViewById(R.id.btn_querty);
lv_item = (ListView) findViewById(R.id.lv_item);
/*
* 初始化数据库学生表的工具类
*/
studentDao = new StudentDao(this);
/*
* 设置监听事件
*/
btn_save.setOnClickListener(this);
btn_querty.setOnClickListener(this);
}
/**
* 单击事件监听器
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save:
// 保存
save();
break;
case R.id.btn_querty:
// 查询
query();
break;
}
}
/**
* 查询学生列表
*/
private void query() {
refresh();
}
private void refresh() {
/*
* 查询全部学生信息
*/
list = studentDao.getAll();
if (stuBaseAdapter == null) {
// 判断 为空就new ,为ListView设置适配器
stuBaseAdapter = new StuBaseAdapter();
lv_item.setAdapter(stuBaseAdapter);
} else {
// 通知ListView列表改变
stuBaseAdapter.notifyDataSetChanged();
}
}
/**
* 保存学生信息
*/
private void save() {
// 获取学生输入的信息
String name = et_name.getText().toString().trim();
// 判断
if (TextUtils.isEmpty(name)) {
Toast.makeText(this, "学生姓名不能为空", Toast.LENGTH_SHORT).show();
return;
}
// 获取性别
String gender = "male";
switch (rgp.getCheckedRadioButtonId()) {
case R.id.rb_male:
gender = "male";
break;
case R.id.rb_female:
gender = "female";
break;
}
// 开始保存
long insert = studentDao.insert(name, gender);
if (insert > 0) {
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
et_name.setText("");
} else {
Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
}
}
/**
* 学生列表适配器
*
* @author 刘楠
*
* 2016-2-20下午7:28:15
*/
private class StuBaseAdapter extends BaseAdapter {
private static final String TAG = "StuBaseAdapter";
@Override
public int getCount() {
return list.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(TAG, position + "");
View view;
if (convertView == null) {
view = View.inflate(MainActivity.this, R.layout.stu_item, null);
} else {
view = convertView;
}
// 得到学生对象
final Student student = list.get(position);
ImageView iv_sex = (ImageView) view.findViewById(R.id.iv_sex);
if ("male".equals(student.getGender())) {
iv_sex.setImageResource(R.drawable.mr);
} else if ("female".equals(student.getGender())) {
iv_sex.setImageResource(R.drawable.miss);
}
TextView tv_no = (TextView) view.findViewById(R.id.tv_no);
tv_no.setText("编号:" + student.getId());
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_name.setText("姓名:" + student.getName());
ImageView iv_delete = (ImageView) view.findViewById(R.id.iv_delete);
iv_delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 对话框来提示用户是否删除
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle("删除").setIcon(R.drawable.tools)
.setMessage("确定要删除这条记录吗");
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
/*
* 删除方法
*/
int delete = studentDao.delete(student.getName());
if (delete > 0) {
Toast.makeText(MainActivity.this, "删除成功",
Toast.LENGTH_SHORT).show();
// 刷新列表
refresh();
} else {
Toast.makeText(MainActivity.this, "删除失败",
Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.create().show();
}
});
return view;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
}
}
安卓第四天笔记-Sqlite的更多相关文章
- 安卓第十四天笔记-内容提供者(ContentProvider)
安卓第十四天笔记-内容提供者(ContentProvider) ContentProvider--内容提供者 1.ContentProvider简介 ContentProvider是不同应用程序之间进 ...
- 安卓第十天笔记-fragment
安卓第十天笔记-fragment Fragment(片段) 一.Fragment简介 *Fragment是3.0引入的API,主要为了解决平板,大屏幕手机显示问题 *Fragment代表了Activi ...
- 安卓第十三天笔记-服务(Service)
安卓第十三天笔记-服务(Service) Servcie服务 1.服务概念 服务 windows 服务没有界面,一直运行在后台, 运行在独立的一个进程里面 android 服务没有界面,一直运行在后台 ...
- 安卓第十一天笔记-Intent与inter-filter配置
安卓第十一天笔记-Intent与inter-filter配置 Intent与inter-filter配置 1.Intent对象简述 Android应用中有包含三种重要组件:Activity,Servi ...
- 《APUE》第四章笔记(2)
下面介绍对stat结构的各个成员的操作函数. 先贴个stat结构的图: access函数: #include <unistd.h> int access(const char *pathn ...
- 《APUE》第四章笔记(1)
1.引言 本章介绍文件系统的特征和文件的性质.从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性.在此过程中,还将会说明修改这些属性的各个函数,并更详细地查看UNIX文件系统的结 ...
- #Python编程从入门到实践#第四章笔记
#Python编程从入门到实践#第四章笔记 操作列表 1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...
- Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- iOS阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
随机推荐
- 一款 .NET 下的轻量级 REST 和 HTTP API 客户端 - RestSharp
项目地址:https://github.com/restsharp/RestSharp Features Supports .NET 3.5+, Silverlight 4, Windows Phon ...
- Linux高级编程--05.文件读写
缓冲I/O和非缓冲I/O 文件读写主要牵涉到了如下五个操作:打开.关闭.读.写.定位.在Linux系统中,提供了两套API, 一套是C标准API:fopen.fclose.fread.fwrite.f ...
- 【翻译】C# Tips & Tricks: Weak References - When and How to Use Them
原文:C# Tips & Tricks: Weak References - When and How to Use Them Sometimes you have an object whi ...
- 怎样设置一个DIV在所有层的最上层,最上层DIV
怎样设置一个DIV在所有层的最上层,最上层DIV,其实很简单,只需要在这个DIV上使用这个样式即可,z-index:99999
- [OpenCV] Face Detection
即将进入涉及大量数学知识的阶段,先读下“别人家”的博文放松一下. 读罢该文,基本能了解面部识别领域的整体状况. 后生可畏. 结尾的Google Facenet中的2亿数据集,仿佛隐约听到:“你们都玩儿 ...
- 结对编程之Fault、Error、Failure
1.结对说明 结对对象:刘世麟 博客地址:http://www.cnblogs.com/liushilin/ 双方贡献:1:1 2.题目要求 构造程序,分别是: •不能触发Faul ...
- SQL Server临界点游戏——为什么非聚集索引被忽略!
当我们进行SQL Server问题处理的时候,有时候会发现一个很有意思的现象:SQL Server完全忽略现有定义好的非聚集索引,直接使用表扫描来获取数据.我们来看看下面的表和索引定义: CREATE ...
- SQL Server里ORDER BY的歧义性
在今天的文章里,我想谈下SQL Server里非常有争议和复杂的话题:ORDER BY子句的歧义性. 视图与ORDER BY 我们用一个非常简单的SELECT语句开始. -- A very simpl ...
- [Latex]生成Vertical Timeline
Vertical TimeLine 用Latex生成一个竖直的VerticalTimeline的想法来源于今天翻看王老师的教师寄语,有感于学院走过的操作系统实验的艰辛之路,遂产生了写一个"小 ...
- 重构第4天:降低方法(Push Down Method)
理解:降低方法,就是把基类中的某个方法,提出来放到继承类当中去. 详解: 上一节我们讲了方法的提公,是把多于一个继承类都要用到的方法,提出来放到基类中去,来提高代码的可维护性和重用性.那么这一节,我们 ...