Android基础学习【历史流程重走】 ---- Sqlite数据库使用及ListView的使用与优化(三)
来源:互联网 发布:u盘安装centos双系统 编辑:程序博客网 时间:2024/04/28 06:24
一、Sqlite的基本使用
Sqlite的使用主要分为三个步骤:1,构建数据库OpenHelper类;2,获取数据库对象;3,管理并使用数据库。
1,创建SqliteOpenHelper类
public class DataBaseOpenHelper extends SQLiteOpenHelper { /** * log日志标记,一般使用当前类类名【便于区分】 */ private String tag = "DataBaseOpenHelper"; private final static String DB_NAME = "first.db";//数据库名 private final static int VERSION = 1;//版本号 /** * 构造方法 * <p/> * Context context 上下文对象 * String name 数据文件对象名称【数据库文件名】 * SQLiteDatabase.CursorFactory factory 游标工厂 * int version 版本,最小为1 */ public DataBaseOpenHelper(Context context) { /** * 当前方法执行创建数据库文件 */ super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) {//SQLite中无数据实体类型 varchar(20) 20没有实际的意义 Log.i(tag, "数据库文件被创建了!"); String sql = "create table student(id integer primary key autoincrement,name varchar(20),age int)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { /** * 数据库版本进行升级调用方法 * 用于保证数据库的数据兼容 * 【1-2】 【2-3】 【3-4】 * 会存在【1-3】 【2-4】等情形 * * 【-------数据兼容处理-----】 * * 插入数据表格单元列 更新属性等操作 */ Log.i(tag, "数据库版本更新!"); //tableName 先删除原有表格,再创建新的表格 db.execSQL("DROP TABLE IF EXISTS " + "tableName"); onCreate(db); }}2,获取数据库对象,并将数据库的基本操作封装工具
public class DataBaseDao { /** * 数据库文件创建Helper */ private DataBaseOpenHelper helper; public DataBaseDao(Context context) { helper = new DataBaseOpenHelper(context); } /** * 添加基础信息 * * @param name 姓名 * @param age 年龄 */ public void add(String name, int age) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into student (name,age) values(?,?)", new Object[]{name, age}); db.close(); } /** * 根据核心字段删除对象 * * @param name 核心字端 name */ public void delete(String name) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("delete from student where name=?", new Object[]{name}); db.close(); } /** * 依据关键字段更新信息 * * @param name * @param newAge */ public void update(String name, int newAge) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("update student set age=? where name =?", new Object[]{newAge, name}); db.close(); } /** * 依据关键字查询相关信息 * * @param name * @return */ public int find(String name) { SQLiteDatabase db = helper.getReadableDatabase(); int age = -1; Cursor cursor = db.rawQuery("select age from student where name=?", new String[]{name}); if (cursor.moveToNext()) { age = cursor.getInt(1); } cursor.close(); db.close(); return age; } /** * 查找全部信息 * * @return */ public List<Student> findAll() { List<Student> stus = new ArrayList<>(); SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from student", null); while (cursor.moveToNext()) { String name = cursor.getString(1); int age = cursor.getInt(2); Student stu = new Student(); stu.setName(name); stu.setAge(age); stus.add(stu); } cursor.close(); db.close(); return stus; }}3,使用系统API更换增删改查
public class DataBaseDaoAPI { /** * 数据库文件创建Helper */ private DataBaseOpenHelper helper; public DataBaseDaoAPI(Context context) { helper = new DataBaseOpenHelper(context); } /** * 添加基础信息 * * @param name 姓名 * @param age 年龄 * @return 插入数据所在行数 */ public long add(String name, int age) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("age", age); long result = db.insert("student", null, values); db.close(); return result; } /** * 根据核心字段删除对象 * * @param name 核心字端 name * @return 被删除数据的行数,0表示删除失败 */ public int delete(String name) { SQLiteDatabase db = helper.getWritableDatabase();// String table, String whereClause, String[] whereArgs int result = db.delete("student", "name=?", new String[]{name}); db.close(); return result; } /** * 依据关键字段更新信息 * * @param name * @param newAge */ public int update(String name, int newAge) { SQLiteDatabase db = helper.getWritableDatabase();// String table, ContentValues values, String whereClause, String[] whereArgs ContentValues values = new ContentValues(); values.put("age", newAge); int result = db.update("student", values, "name=?", new String[]{name}); db.close(); return result; } /** * 依据关键字查询相关信息 * * @param name * @return */ public int find(String name) { SQLiteDatabase db = helper.getReadableDatabase(); int age = -1;// Cursor cursor = db.rawQuery("select age from student where name=?", new String[]{name});// if (cursor.moveToNext()) {// age = cursor.getInt(1);// }// String table, String[] columns,// String selection, String[] selectionArgs, String groupBy,// String having, String orderBy, String limit Cursor cursor = db.query("student", new String[]{"age"}, "name=?", new String[]{name}, null, null, null); age = cursor.getInt(0); cursor.close(); db.close(); return age; } /** * 查找全部信息 * * @return */ public List<Student> findAll() { List<Student> stus = new ArrayList<>(); SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query("student", null, null, null, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(1); int age = cursor.getInt(2); Student stu = new Student(); stu.setName(name); stu.setAge(age); stus.add(stu); } cursor.close(); db.close(); return stus; }}4,使用dos命令查看执行结果
这里是源码~_~
二、ListView的优化【原理--实际使用会抽取成为工具】
1,item复用;
2,inflate--打气筒
3,BaseHolder抽取
4,不同Adapter的使用
常用BaseAdapter
SimpleAdapter ListAdapter
ListAdapter的使用:public class ListAdapterLV extends Activity { /** * ListView主体展示数据 */ private ListView lvBody; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview); lvBody = (ListView) findViewById(R.id.lv_body_item); String[] data = {"google", "amazon", "facebook"}; lvBody.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_single_choice, data)); lvBody.setItemsCanFocus(true); lvBody.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); }}SimpleAdapter的使用:
public class SimpleAdapterLV extends Activity { /** * ListView主体展示数据 */ private ListView lvBody; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview); /** * 获取ListView控件 */ lvBody = (ListView) findViewById(R.id.lv_body_item); /** * 获取数据 */ DataBaseDao dao = new DataBaseDao(this); ArrayList<Student> students = (ArrayList<Student>) dao.findAll(); /** * 准备数据 */ List<Map<String, Object>> lvData = new ArrayList<>(); for (Student student : students) { Map<String, Object> dataTemp = new HashMap<>(); dataTemp.put("姓名", student.getName()); dataTemp.put("年龄", student.getAge()); lvData.add(dataTemp); } /** * 创建数据适配器 */ SimpleAdapter adapter = new SimpleAdapter(this, lvData, R.layout.listitem, new String[]{"姓名", "年龄"}, new int[]{R.id.TextView01, R.id.TextView02}); lvBody.setAdapter(adapter); }}
SimpleAdapter展示效果:
ListAdapter展示效果:
三、Sqlite事务及扩展
public class MainActivity extends AppCompatActivity { /** * 确认转账按钮 */ private Button enSureTrans; String s; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); enSureTrans = (Button) findViewById(R.id.ensure); OpenHelper helper = new OpenHelper(MainActivity.this); final SQLiteDatabase db = helper.getWritableDatabase(); String sql = "insert into account (name,money) values('zhangsan',10000) "; db.execSQL(sql); enSureTrans.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { db.beginTransaction(); try { db.execSQL("update account set money = money-1000 where name = 'zhangsan'");// s.equals("success"); db.execSQL("update account set money = money+1000 where name = 'lisi'"); db.setTransactionSuccessful(); } finally { db.endTransaction(); } } }); }}结果展示:
好东西,你懂得#_#
四、样式、主题、国际化
样式:values-styles中添加想要的样式,主题类似
<style name="NewStyle"> <item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>国际化:创建不同的values文件夹
推荐他人博客,详细讲解了国际化的实现,记录国际化values命名规则。
国际化注意事项:在程序中不使用说明硬编码,全根据资源文件获取描述。
Resources resources = getResources();//获得res资源对象 Configuration config = resources.getConfiguration();//获得设置对象 DisplayMetrics dm = resources .getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。 config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文 resources.updateConfiguration(config, dm);
你引风雨来,我也不怨你,我打着雨伞多少与你同走一程可好?
你带沙尘来,我也不气你,我给我自己蒙上面巾,也给你一块可好?
你要是不愿意,那就算了罢,我自己一人独行,也有许多妙处可得。
你要是高兴,那就更好了,我与你说说这些年,我曾遇的那些人与风景。
0 0
- Android基础学习【历史流程重走】 ---- Sqlite数据库使用及ListView的使用与优化(三)
- Android基础学习【历史流程重走】 ---- Activity的生命周期
- Android基础学习【历史流程重走】 ----Activity启动模式
- Android基础学习【历史流程重走】 ---- Android入门基础(一)
- Android基础学习【历史流程重走】 ---- Android入门基础(二)
- Android基础学习【历史流程重走】 ---- 网络请求(四)
- Android基础学习【历史流程重走】 ----四大组件之BroadCastReceiver
- Android基础学习【历史流程重走】 ----四大组件之Activity
- Android基础学习【历史流程重走】 ---- 四大组件之Service
- Android 中 ListView的使用及优化
- Android中ListView的使用及优化
- android学习十一(android的SQLite数据库的使用)
- android SQLite 优化(三)使用事务 优化 insert
- android学习笔记---SQLite数据库的使用
- android ListView的简单使用与优化
- Android数据库SQLite使用详解三 : 数据库的升级
- # 对 Android 应用被强杀重回应用的优化处理(重走应用流程)
- 某宅的Android学习笔记(一)——ListView的使用与优化
- iOS cookies
- java Thread学习-Thread的实现方法 继承Thread,实现Runnable 接口
- C++之剖析虚函数1——虚函数的设计目的
- ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
- 在VS2010中去掉ipch和sdf文件方法
- Android基础学习【历史流程重走】 ---- Sqlite数据库使用及ListView的使用与优化(三)
- Android应用内截屏
- Ural 1117 Hierarchy
- Tomcat:IOException while loading persisted sessions: java.io.EOFException解决办法
- 概率图模型(PGM)综述
- SharedPreferences
- 32个FPGA开源网站
- android 讯飞语义开发的一点见解
- 下载JDK---等等环境的网站