博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓第四天笔记-Sqlite
阅读量:5884 次
发布时间:2019-06-19

本文共 29444 字,大约阅读时间需要 98 分钟。

安卓第四天笔记-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

 

布局

 

ListView要使用的布局

 

 

 

数据库创建类

/** * 数据库创建类,与维护的类 继承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
getAll() { // 容器 List
list = new ArrayList
(); // 获取数据库 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
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; } } }

 

 

 

 

转载地址:http://kwlix.baihongyu.com/

你可能感兴趣的文章
JVM学习:对象的创建和内存分配
查看>>
JavaScript基础精讲
查看>>
C++ 静态变量 全局变量 const
查看>>
vs 高级保存选项的设置
查看>>
Java读取文本指定的某一行内容的方法
查看>>
软件工程敏捷开发04
查看>>
Practise Site Home Sample Page Codes de carte cadeau Amazon | Codes Promo Amazon
查看>>
linux c下输入密码不回显
查看>>
浏览器全屏与退出
查看>>
js判断浏览器类型
查看>>
Java中的NIO基础知识
查看>>
20145223《信息安全系统设计基础》第3周学习总结
查看>>
横屏设置坐标
查看>>
SpringCache学习实践
查看>>
使用getline输入一行字符串
查看>>
根css显示分类--元素分类
查看>>
DataGridViewCheckBoxColumn的Value值和EditFormatedValue值不一致
查看>>
shell学习之路:shell基础大全2
查看>>
mysql状态查看 QPS/TPS/缓存命中率查看
查看>>
AndroidGUI04:Button(Basic Button,ImageButton, Check Box, Toggle Button, Radio Button)的常用技巧...
查看>>