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)的缩写

0 0
原创粉丝点击