3.21
来源:互联网 发布:nodejs高级编程 pdf 编辑:程序博客网 时间:2024/06/06 10:52
数据库
Android中的数据库,sqlite
用到的快捷键
更改了跳转到句尾为 “ctrl+;”
“alt+左右” 切换标签
创建数据库
创建一个类继承 SQLiteOpenHelper
需要重写构造函数。构造方法中的参数:context(上下文,每个应用都能创建数据库,context就是区分每个是哪个应用创建数据库的),name(数据库名称),factory(创建游标的工厂),version(数据库版本号)
要重写onCreat方法和onUpgrade方法,前者创建时调用,后者升级时调用。
创建数据库需要用到建表语句。例如
creat table Book( id integer primary key autoincrement, author text, price real, pages integer, name text)
其中integer表示整形,text文本型,blob二进制型,eral浮点型。primary key 将 id设为主键,autoincrement将id设为自增长。
public class MyDatabaseHelper extends SQLiteOpenHelper{ private Context mContext; //建表语句 ublic static final String CREAT_BOOK = "creat talbe book (" + "id integer primary key autoincrement" + "author text" + "price real" + "pages interger" + "name text)"; //构造函数 public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){ super(context,name,factory,version); mContext = context; } @Override public void onCreate(SQLiteDatabase db){ db.execSQL(CREAT_BOOK); Toast.makeText(mContext,"创建成功",Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ }}
要创建数据库,需要在Mainactivity里生成一个MyDatabaseHelper的对象,然后调用这个对象的,getWritableDtabase()方法或者getReadableDatabase方法,就会执行onCreate方法。
“drop table if exists Book”意思是如果存在Book表,就删除它。
可以在omUpgrade方法里执行。要执行onUpgrade,只需生成MyDatabaseHelper对象时将版本号设置成2。
添加数据
可以使用SQLiteDatabase中的 insert()方法来添加数据,接受三个参数,第一个是表名,第二个是给空的列自动复制,一般传入null,第三个参数是ContentValue对象,用于传入数据。
SQLiteDatabase db = dbhelper.getReadableDatabase(); //生成value对象 ContentValues values = new ContentValues(); //组装value values.put("name","The Da Vinci Code"); values.put("author","Dan Brown"); db.insert("Book", null, values); //清空value,用于传入下一条数据 values.clear(); values.put("name","The Da Vinci Code2"); values.put("author","Dan Brown2"); db.insert("Book",null,values); //db.insert()也会返回一个值,代表添加新行的ID,如果添加失败返回-1
更新数据
如同添加数据,用update()方法更新数据,接受四个参数,第一个是表名,第二个是ContentValue,第三个第四个是越是更新某一行或某几行的数据,不指定的话就是默认更新所有。
SQLiteDatabase db = dbhelper.getReadableDatabase();ContentValues values = new ContentValues();values.put("name","da sha bi");//第三四个参数表明修改所有的name为The Da Vinci Code的行db.update("Book",values,"name = ?",new String[]{"The Da Vinci Code"});//第三四个参数表明修改id为1的行db.update("Book",values,"id = ?",new String[]{"1"});//返回值:成功修改多少行
删除数据
delete()方法用来删除数据。
//接受三个参数,第一个表示表名,第二三表示哪一行。下面表明删除所有page大于500的行 db.delete("Book","pages > ?",new String[]{"500"}); //返回值是成噢噢那个山出多少行
查询数据
query()方法用来查询数据。返回Cursor对象。
//table:表名, columns:查询的列名,如果null代表查询所有列; selection:查询条件, selectionArgs:条件占位符的参数值, //groupBy:按什么字段分组, having:分组的条件, orderBy:按什么字段排序 Cursor cursor = db.query("info", new String[]{"_id","name","phone"}, "name = ?", new String[]{name}, null, null, "_id desc"); //解析Cursor中的数据 if(cursor != null && cursor.getCount() >0){//判断cursor中是否存在数据 //循环遍历结果集,获取每一行的内容 while(cursor.moveToNext()){//条件,游标能否定位到下一行 //获取数据 int id = cursor.getInt(0); String name_str = cursor.getString(1); String phone = cursor.getString(2); System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone); } cursor.close();//关闭结果集
数据库的事务
事务: 执行多条sql语句,要么同时执行成功,要么同时执行失败,不能有的成功,有的失败
例如银行转账
//点击按钮执行该方法 public void transtation(View v){ //1.创建一个帮助类的对象 BankOpenHelper bankOpenHelper = new BankOpenHelper(this); //2.调用数据库帮助类对象的getReadableDatabase创建数据库,初始化表数据,获取一个SqliteDatabase对象去做转账(sql语句) SQLiteDatabase db = bankOpenHelper.getReadableDatabase(); //3.转账,将李四的钱减200,张三加200 //开启一个数据库事务 db.beginTransaction(); try { db.execSQL("update account set money= money-200 where name=?",new String[]{"李四"}); //模拟一个异常 int i = 100/0; db.execSQL("update account set money= money+200 where name=?",new String[]{"张三"}); //标记事务中的sql语句全部成功执行 db.setTransactionSuccessful(); } finally { //判断事务的标记是否成功,如果不成功,回滚错误之前执行的sql语句 db.endTransaction(); } }
异常oom和memory leak
oom:内存溢出
memory leak:内存泄漏
内存溢出指的是内存不够用了,就会出现oom异常。
内存泄漏是很多时候,程序员自己忘记释放资源的时候,以及管理内存时,搞不好就出现了内存泄露的问题。
ListView
运用MVC设计模式,MVC是模型(model)-视图(view)-控制器(controller)的缩写
- 3.21
- 3.21
- 3.21
- 3.21
- 3.21
- 3.19~3.21
- 练习3.21
- 3.21总结
- 3.21任务
- 习题 3.21
- 3.21 特别的一天...
- 2010 3.21 情
- 3.21 refused bequest
- GDOI 3.21 模拟总结
- 实习日记(3.21)
- 【python】习题3.21
- Deep Learning(3.21)
- matlab2014b 安装libsvm-3.21
- React Native android真机运行时候 界面一片空白
- 96. Unique Binary Search Trees
- Android FragmentManage FragmentTransaction介绍
- 3.20
- Java多线程(一)
- 3.21
- pthread_mutex_t and pthread_cond 混合使用
- 35. Search Insert Position
- 魂断蓝桥,蓝桥耻,来年洗。
- 141. Linked List Cycle
- ScrollView的滑动监听
- android AMS中主要的四个函数的作用
- MyEclipse8.5添加tomcat7
- MySQL安装