一、创建数据库
1. 创建PersonDBOpenHelper类,并且继承SQLiteOpenHelper类,数据库名为person,千万记得后缀db
public class PersonDBOpenHelper extends SQLiteOpenHelper {
public PersonDBOpenHelper(Context context) {
//context上下文
//name 数据库名
//factory 游标工厂 null默认的工厂
//version 版本最小为1 从1开始
super(context, "person.db", null,5);
}
//数据库第一次创建时候调用的方法,适合数据表结构初始化
//如果数据库已经被创建了就不会调用
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(10))");
}
//数据库被更新时调用的方法,当数据版本增加的时候调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("数据库更新!");
}
}
二、一般操作数据库
添加数据
得到SQLiteDatabase可写对象,执行execSQL方法
/**
* 添加一条数据
* @param v
*/
public void add(View v) {
// 得到可读数据库
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into info(name,phone) values(?,?)", new String[]{"赵四"+new Random().nextInt(110),"123"+new Random(123).nextInt()});
Toast.makeText(this, "添加成功", 0).show();
db.close();
}
修改数据
得到SQLiteDatabase可写对象,执行execSQL方法
/**
* 修改一条数据
*/
public void update(View v) {
// 得到可读数据库
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update info set phone=? where name=?", new Object[]{"赵四91","12345"});
Toast.makeText(this, "更新成功", 0).show();
db.close();
}
删除数据
/**
* 删除一条数据
* @param v
*/
public void delete(View v) {
// 得到可读数据库
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from info where name=?", new Object[]{"赵四70"});
Toast.makeText(this, "删除成功", 0).show();
db.close();
}
查询数据
查询数据需要用到游标cursor
/**
* 查询全部
*
* @param v
*/
public void findAll(View v) {
// 得到可读数据库
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from info", null);
List<Person> listPerson = new ArrayList<Person>();
while (cursor.moveToNext()) {
Person person = new Person();
person.setId(cursor.getInt(0));
person.setName(cursor.getString(1));
person.setPhone(cursor.getString(2));
listPerson.add(person);
person = null;
}
// 关闭游标
cursor.close();
for (Person p : listPerson) {
System.out.println(p.toString());
}
db.close();
}
三、API操作数据库
添加数据
/**
* api插入数据
* @param name
* @param phone
* @return
*/
public long add(String name,String phone){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", name);
values.put("phone", phone);
long id = db.insert("person", null, values);
db.close();
return id;
}
修改数据
/**
* API更新数据
* @param oldName
* @param newName
* @return
*/
public int update(String oldName,String newName){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", newName);
int number = db.update("person", values, "name=?", new String[]{oldName});
db.close();
return number;
}
删除数据
public int delete(String name){
SQLiteDatabase db=helper.getWritableDatabase();
int number = db.delete("person", "name=?", new String[]{name});
db.close();
return number;
}
查询数据
如果是查询全部的数据的话,用rawQuery()方法,返回的是一个cursor结果集
/**
* API查询一条数据
* @param name
* @return
*/
public boolean find(String name){
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.query("person", null, "name=?",new String[]{name}, null, null, null);
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
总结:
一、一般操作数据库流程
- 得到可读数据库
SQLiteDatabase db = helper.getWritableDatabase(); - 执行execSQL语句
db.execSQL() - 关闭数据库
二、API操作数据库流程
- 得到可读数据库
SQLiteDatabase db = helper.getWritableDatabase(); - 1)如果是增加、修改需要获取ContentValues 对象
ContentValues **加粗样式**values = new ContentValues();
再调用相应的方法
2)删除的话直接调用delete方法
3)查询的话需要定义游标cursor
Cursor cursor = db.query();
关闭游标
- 关闭数据库
四、数据库内容同步显示到界面(ListView)
ListView工作原理
- MVC的设计模式
model 数据模型
view 视图 在Android下面专用:LIstView
controller 控制器 ( Adapter)数据适配器,作用是把数据从
1.List View控件使用
- 在activity_main.xml中添加ListView控件
<ListView
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/lv">
</ListView>
2.常用数据适配器(Adapter)
1)BaseAdapter
- 基本的适配器,是一个抽象类,有4个抽象方法:
public int getCount() {}
public View getView(int position, View convertView, ViewGroup parent) {}
public Object getItem(int position) {}
public long getItemId(int position) {}
2) SimpleAdapter
- SimpleAdapter是继承了BaseAdapter,特点是SimpleAdapter只能适配Checkable、Text View、ImageView
1.交互文件如下
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = findViewById(R.id.lv);
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("icon", R.drawable.cyddz);
map1.put("name", "fun01");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("icon", R.drawable.cykvmce);
map2.put("name", "fun02");
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("icon", R.drawable.day);
map3.put("name", "fun03");
data.add(map1);
data.add(map2);
data.add(map3);
lv.setAdapter(new SimpleAdapter(this, data, R.layout.item, new String[] { "icon", "name" },
new int[] { R.id.iv, R.id.tv }));
}
2.每个条目的布局如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:id="@+id/tv" />
</LinearLayout>
3.效果图如下
3) ArrayAdapter
- 也是BaseAdapter的子类,只是构造方法跟SimpleAdapter不同
3.适配器的运用and创建示例
- 1 在布局文件activity_main.xml中创建ListView组件
<ListView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/lv">
</ListView>
- 2在界面交互代MainActivity中边写适配器代码和交互代码,主要创建内部类继承BaseAdapter,然后重写getCount和getView代码
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.lv);
listView.setAdapter(new MyAdapter());
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return 20;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = new TextView(MainActivity.this);
textView.setText("我是第+" + position + "个条目!");
textView.setTextSize(20);
textView.setTextColor(Color.RED);
return textView;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}