Android下SQLite数据库
在Android下,提供了SQLiteOpenHelper抽象类
它返回的数据库类是SQLiteDatabase的一个实例,可以直接进行sql语句的操作
SQLite数据库 无类型typelessness,可以保存任何类型的数据到你所想要保存的任何表的任何列中
但是又支持常见的类型比如:NULL,VARCHAR,TEXT,INTEGER,BLOB,CLOB等
唯一的例外:integer primary key 此字段只能存储64位整数
1.使用SQLiteDatabase操作SQLite数据库
1)使用sql语句
execSQL() --用于执行insert,delete,update等有更改行为的sql语句
rawQuery() --用于执行select语句
2)不使用sql语句
SQLiteDatabase还提供了 insert() delete() update() query()四种方法
2. 分赃案例(事务)
update person set balance = balance + 100 where name = "zhangsan";
update person set balance = balance - 100 where name = "zhangsan";
alter table person add balance integer;
SQLite数据库-->事务transaction
try{
db.beginTransaction();
//code...
db.GetTransactionSuccessful();
} finally{
db.endTransaction();
}
开启事务 --db.beginTransaction()
标记事务成功 --db.GetTransactionSuccessful()
停止事务 --db.endTransaction()
3. adb shell下 sqlite3的使用
adb shell
cd /data/data/包名
cd databases
sqlite3 itheima28.db
写sql要加 ;
.mode column
退出sqlite .exit
退出adb shell exit
4. 展示列表的控件 ListView
Javaweb里面有分层的概念
MVC
model 数据模型
view 视图
controller 控制器(把model层的数据绑定到view层上去)--适配器Adapter
5. 使用ListView和Adapter 将数据库中的内容显示到ListView控件上
1) // 把View层对象ListView和控制器BaseAdapter关联起来
mListView.setAdapter(new MyAdapter());
class MyAdapter extends BaseAdapter {
//定义ListView的数据的长度
@Override
public int getCount() {
return personList.size();
}
//返回ListView列表中某一行的View对象
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = null;
if (convertView != null) { // 判断缓存对象是否为null, 不为null时已经缓存了对象
Log.i(TAG, "getView: 复用缓存" + position);
tv = (TextView) convertView;
} else { // 等于null, 说明第一次显示, 新创建
Log.i(TAG, "getView: 新建" + position);
tv = new TextView(MainActivity.this);
}
tv.setTextSize(25);
Person person = personList.get(position); // 获得指定位置的数据,
// 进行对TextView的绑定
tv.setText(person.toString());
return tv;
}
}
2)与方法1不同 -- 在/res/layout下建立listview_item.xml文件 --指定View显示的格式
-- 重写public View getView()方法 --采用布局填充器inflater
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView == null) {
// 布局填充器对象, 用于把xml布局转换成view对象
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
view = inflater.inflate(R.layout.listview_item, null);
} else {
view = convertView;
}
// 给view中的姓名和年龄赋值
TextView tvName = (TextView) view.findViewById(R.id.tv_listview_item_name);
TextView tvAge = (TextView) view.findViewById(R.id.tv_listview_item_age);
Person person = personList.get(position);
tvName.setText("姓名: " + person.getName());
tvAge.setText("年龄: " + person.getAge());
return view;
}
6. BaseAdapter -->public abstract class BaseAdapter implements ListAdapter
|--ArrayAdapter
|--SimpleAdapter
|--MyAdapter -->我们自定义的Adapter
1)ArrayAdapter 类似于4的方法1
String[] textArray = {"功能1","功能2","功能3","功能4","功能5","功能6","功能7","功能8"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, //上下文
android.R.layout.simple_list_item_1, //Listview的子条目显示的布局的id,android提供的
textArray //显示在ListView列表中的数据
);
2)SimpleAdapter 类似于4的方法2
-- 在/res/layout下建立listview_item.xml文件 --指定View显示的格式
List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "张三1");
map.put("icon", R.drawable.f007);
data.add(map);
SimpleAdapter adapter = new SimpleAdapter(
this, // 上下文
data, // listView绑定的数据
list<map<String,?>> R.layout.listview_item,// listview的子条目的布局的id
new String[]{"name", "icon"},// data数据中的map集合里的key
new int[]{R.id.tv_name, R.id.iv_icon}// resource 中的id
);