安卓基础学习3

1 ScrollView 

  可以滚动,只能有一个孩子,可以在孩子中间进行嵌套

layout_weight=“” 平均分配   决定控件摆放的先后顺序  默认  0  最先摆放   数值越大,摆放的顺序越靠后  1 


Sqlite   integer  text   小  嵌入式设备  弱类型  
1 安装数据库软件 
2 在整个软件上创建一个数据库,再创建表 ******


android里面的sqlite数据  不需要安装。
在android底层有一个sqlite.c的代码 ,可以帮助你去创建出来一个数据库,我们没有这样的能力去访问sqlite.c这样的文件里面的方法。
android系统就暴露了一个工具类让我们使用。
SQLiteOpenHelper:创建 打开  管理数据库
1 构造方法  单例模式
2 onCreate() 执行建表语句,准备初始数据
3 onUpgrade() 数据升级的时候执行。
getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

1 crud 
  sql:
  insert into mm(name,age) values('陈冠希',32);
  select _id,name,age from mm;
  update mm set name = '张柏芝' where _id = 1
  delete from mm where _id = 1;
sql  execute()  rawQuery()


  android  java代码如何编写 
  SqliteDatabase db;

 oop insert() update() query()  delete()  *****
           ContentValues

delete()方法的使用:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete("person", "personid<?", new String[]{"2"});
db.close();
上面代码用于从person表中删除personid小于2的记录。


update()方法的使用:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “传智播客”);//key为字段名,value为值
db.update("person", values, "personid=?", new String[]{"1"}); 
db.close();
上面代码用于把person表中personid等于1的记录的name字段的值改为“传智播客”。

query()方法实际上是把select语句拆分成了若干个组成部分,然后作为方法的输入参数:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor cursor = db.query("person", new String[]{"personid,name,age"}, "name like ?", new String[]{"%传智%"}, null, null, "personid desc", "1,2");
while (cursor.moveToNext()) {
         int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
        String name = cursor.getString(1);//获取第二列的值
        int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close(); 
上面代码用于从person表中查找name字段含有“传智”的记录,匹配的记录按personid降序排序,对排序后的结果略过第一条记录,只获取2条记录。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。


事务:
1 什么事务?
  一系列sql操作  是否成功或者失败的保证。
  好处:保证数据的完整性 一致性  

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。使用例子如下:

 SQLiteDatabase db = ....;
db.beginTransaction();//开始事务
try {
    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4});
    db.execSQL("update person set name=? where personid=?", new Object[]{"传智", 1});
    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
} finally {
    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
} 
db.close(); 


上面两条SQL语句在同一个事务中执行。

2 Android sqlite3工具的使用

1 cmd  adb shell 首先挂载到linux

2 cd data/data/com.android.contacts.provider

3 cd database

4 sqlite3 contacts 打开数据库 eg: sqlite3 contacts.db

5 .tables 查看所有的表  eg: .table

6 .schema 查看所有的创建表、视图的语句 eg: .schema 

7 .help 查看帮助  eg: .help

8 .header(s) NO |OFF是否显示列头信息 eg: headers ON

9 .mode MODE  ?table? 指定数据显示风格 eg: .mode column

10 .nullValue NULL空值数据显示问题 eg: .nullValue NULL



3通过分析Setting源码获取外置存储大小和可用空间

<span style="white-space:pre">		</span>File path = Environment.getExternalStorageDirectory();
		StatFs statFs = new StatFs(path.getPath());
		int availableBlocks = statFs.getAvailableBlocks();
		int blockCount = statFs.getBlockCount();
		int blockSize = statFs.getBlockSize();
		
		String total = Formatter.formatFileSize(this, blockCount*blockSize);
		String avail = Formatter.formatFileSize(this, availableBlocks*blockSize);
		
		tv_available.setText("可用:"+avail);
		tv_total.setText("SD总大小:"+total);


你可能感兴趣的:(安卓基础学习3)