安卓第四天笔记-Sqlite

1.数据库的创建运行与更新

1.1.创建一个类继承SqliteOpenHelper

安卓第四天笔记-Sqlite-LMLPHP

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,否则会抛出异常

安卓第四天笔记-Sqlite-LMLPHP

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

安卓第四天笔记-Sqlite-LMLPHP

不能降版本

安卓第四天笔记-Sqlite-LMLPHP

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中的方法

安卓第四天笔记-Sqlite-LMLPHP

运行查看LOG

安卓第四天笔记-Sqlite-LMLPHP

1.6.数据已经创建,查看数据库

将数据库文件导出到桌面

SQLite Expert Professional 3打开

安卓第四天笔记-Sqlite-LMLPHP

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)");

     }

查看日志

安卓第四天笔记-Sqlite-LMLPHP

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

安卓第四天笔记-Sqlite-LMLPHP

列已经添加成功

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

安卓第四天笔记-Sqlite-LMLPHP安卓第四天笔记-Sqlite-LMLPHP安卓第四天笔记-Sqlite-LMLPHP


布局

<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;

              }

       }

}
05-08 08:34