zoukankan      html  css  js  c++  java
  • 安卓第四天笔记-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;
    
                  }
    
     
    
           }
    
     
    
    }
    
     
    
     
    
     

     

  • 相关阅读:
    【Java123】enum枚举及其应用
    sql查询优化_慢查询
    9.4 如何实现属性可修改的函数装饰器?
    9.2 如何为被装饰的函数保存元数据?
    python的如何通过实例方法名字的字符串调用方法?
    9.1 如何使用函数装饰器 用装饰器解决重复计算问题
    asyncio 笔记
    python笔记截图
    list绑定
    表单数据交互
  • 原文地址:https://www.cnblogs.com/liunanjava/p/5204308.html
Copyright © 2011-2022 走看看