Android内建了开放源码的嵌入式数据库引擎SQLite
1.创建数据库 openOrCreateDatabase()
Context.MODE_PRIVATE,//创建数据库文件的模式,表示仅供自已使用的数据库
null);//返回查询结果类,一般为空
openOrCreateDatabase()执行成功,会返回代表数据库的SQLiteDatabase对象
2.创建表CREATE TABLE
String createTable = "CREATE TABLE IF NOT EXISTS "+
tb_name + //数据表名
"(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name VARCHAR(32)," +
"phone VARCHAR(16)," +
"email VARCHAR(64))";
db.execSQL(createTable);//执行语句创建表
3.插入数据insert()
创建表后,可使用insert()方法新增数据,配合ContentValues对象使用
insertData("张三","13526697845","zs@126.com");
private void insertData(String name, String phone, String email){
ContentValues cv = new ContentValues(3); //创建含3个字段的ContentValues对象
cv.put("name",name);//新增的数据put()方法存到ContentValues对象中
cv.put("phone",phone);
cv.put("email",email);
db.insert(tb_name,null, cv);//将内容写入表,并新增一个记录
}
4.查询数据rawQuery()
用select语句进行数据查询
使用Cursor对象获取查询结果
rawQuery("SELECT * FROM tb_name",null);//返回tb_name数据表的所有记录
第一个参数为SELECT语句,第二个参数为null
rawQuery()返回的查询结果为Cursor类的对象.
moveToFirst()移到第一个记录
moveToLast()移到最后一个记录
moveToNext()移到下一个记录
moveToPrevious()移到前一个记录
Cursor cr = db.rawQuery("SELECT * FROM "+tb_name, null); //执行查询
if(cr.moveToFirst()){//移到第1项数据,若有数据才继续
String str="总共有"+cr.getCount()+"项数据\n"; //getCount()方法,返回值就是数据个数,若返回0,则表示没有数据
do{
str +="name:"+cr.getString(1)+"\n";//读取name,0为id,从1开始获取
str +="phone:"+cr.getString(2)+"\n";
str +="email:"+cr.getString(3)+"\n";
}while(cr.moveToNext());//有下一项就继续循环
Log.i("db",str);
}
cr.getDouble(索引) //读取Double数据
cr.getFloat()
cr.getInt()
cr.getLong()
cr.getShort()
cr.getString()
若想用字段名读取数据,须先用getColumnIndex()方法获取字段索引
cr.getString(getColumnIndex("name"));
5.修改数据db.update
private void updateData(String name, String phone, String email, int id){
ContentValues cv = new ContentValues(3);
cv.put("name",name);
cv.put("phone",phone);
cv.put("email",email);
db.update(tb_name,cv,"_id="+id,null);
}
db.update(tb_name,cv,"_id="+id,null);
参数1:要更新的数据表
参数2:内含新数据的ContentValues对象
参数3:更新的条件
参数4:为null
6.删除问题
db.delete(tb_name, "_id="+2,null);
参数1:要删除的表名
参数2:条件,指定删除哪条记录
参数3:null
把Cursor对象作为数据源
1)新建布局xml
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
2) SimpleCursorAdapter
Cursor c = db.rawQuery("SELECT * FROM "+tb_name,
null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
MainActivity.this,
R.layout.layout, //显示每个数据项所用的布局
c,//以Cursor对象为数据源
new String[]{"name","phone","email"},//Cursor中字段名数组
new int[] {R.id.name, R.id.phone, R.id.email},//layout中组件ID数组
0);//Adapter运行模式
lv.setAdapter(adapter);
1.创建数据库 openOrCreateDatabase()
创建及打开数据库,若数据库不存在,则会先创建再打开
SQLiteDatabase db; //数据库对象
db = openOrCreateDatabase(db_name, //数据库名称Context.MODE_PRIVATE,//创建数据库文件的模式,表示仅供自已使用的数据库
null);//返回查询结果类,一般为空
openOrCreateDatabase()执行成功,会返回代表数据库的SQLiteDatabase对象
2.创建表CREATE TABLE
String createTable = "CREATE TABLE IF NOT EXISTS "+
tb_name + //数据表名
"(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name VARCHAR(32)," +
"phone VARCHAR(16)," +
"email VARCHAR(64))";
db.execSQL(createTable);//执行语句创建表
3.插入数据insert()
创建表后,可使用insert()方法新增数据,配合ContentValues对象使用
insertData("张三","13526697845","zs@126.com");
private void insertData(String name, String phone, String email){
ContentValues cv = new ContentValues(3); //创建含3个字段的ContentValues对象
cv.put("name",name);//新增的数据put()方法存到ContentValues对象中
cv.put("phone",phone);
cv.put("email",email);
db.insert(tb_name,null, cv);//将内容写入表,并新增一个记录
}
4.查询数据rawQuery()
用select语句进行数据查询
使用Cursor对象获取查询结果
rawQuery("SELECT * FROM tb_name",null);//返回tb_name数据表的所有记录
第一个参数为SELECT语句,第二个参数为null
rawQuery()返回的查询结果为Cursor类的对象.
moveToFirst()移到第一个记录
moveToLast()移到最后一个记录
moveToNext()移到下一个记录
moveToPrevious()移到前一个记录
Cursor cr = db.rawQuery("SELECT * FROM "+tb_name, null); //执行查询
if(cr.moveToFirst()){//移到第1项数据,若有数据才继续
String str="总共有"+cr.getCount()+"项数据\n"; //getCount()方法,返回值就是数据个数,若返回0,则表示没有数据
do{
str +="name:"+cr.getString(1)+"\n";//读取name,0为id,从1开始获取
str +="phone:"+cr.getString(2)+"\n";
str +="email:"+cr.getString(3)+"\n";
}while(cr.moveToNext());//有下一项就继续循环
Log.i("db",str);
}
cr.getDouble(索引) //读取Double数据
cr.getFloat()
cr.getInt()
cr.getLong()
cr.getShort()
cr.getString()
若想用字段名读取数据,须先用getColumnIndex()方法获取字段索引
cr.getString(getColumnIndex("name"));
5.修改数据db.update
private void updateData(String name, String phone, String email, int id){
ContentValues cv = new ContentValues(3);
cv.put("name",name);
cv.put("phone",phone);
cv.put("email",email);
db.update(tb_name,cv,"_id="+id,null);
}
db.update(tb_name,cv,"_id="+id,null);
参数1:要更新的数据表
参数2:内含新数据的ContentValues对象
参数3:更新的条件
参数4:为null
6.删除问题
db.delete(tb_name, "_id="+2,null);
参数1:要删除的表名
参数2:条件,指定删除哪条记录
参数3:null
-----------------------------------------------------------------------------------
public class MainActivity extends AppCompatActivity {
static final String db_name="StudentDB";
static final String tb_name="student";
SQLiteDatabase db; //数据库对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1)打开或创建数据库
db = openOrCreateDatabase(db_name,
Context.MODE_PRIVATE,
null);
//2)创建表
String createTable = "CREATE TABLE IF NOT EXISTS "+
tb_name +
"(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name VARCHAR(32)," +
"phone VARCHAR(16)," +
"email VARCHAR(64))";
db.execSQL(createTable);
//3)用insert()方法和ContentValues对象新增数据
insertData("张三","13526697845","zs@126.com");
insertData("李四","13526648945","lishi@126.com");
insertData("王五","13526692685","wangwu@126.com");
//4)查询数据Cursor rawQuery()
queryData();
//5)修改数据db.update();
updateData("张三","123","zs@136.com",1);
queryData();
//6)删除
db.delete(tb_name, "_id="+2,null);
queryData();
//7)关闭数据库
db.close();
}
private void insertData(String name, String phone, String email){
ContentValues cv = new ContentValues(3);
cv.put("name",name);
cv.put("phone",phone);
cv.put("email",email);
db.insert(tb_name,null, cv);
}
private void updateData(String name, String phone, String email, int id){
ContentValues cv = new ContentValues(3);
cv.put("name",name);
cv.put("phone",phone);
cv.put("email",email);
db.update(tb_name,cv,"_id="+id,null);
}
private void queryData(){
Cursor cr = db.rawQuery("SELECT * FROM "+tb_name,
null);
if(cr.moveToFirst()){//移到第1项数据,若有数据才继续
String str="总共有"+cr.getCount()+"项数据\n";
do{
str +="name:"+cr.getString(1)+"\n";
str +="phone:"+cr.getString(2)+"\n";
str +="email:"+cr.getString(3)+"\n";
}while(cr.moveToNext());//有下一项就继续循环
Log.i("db",str);
}
}
}
------------------------------------------------------------------------
com.xxx.sqlitetest I/db: 总共有3项数据
name:张三
phone:13526697845
email:zs@126.com
name:李四
phone:13526648945
email:lishi@126.com
name:王五
phone:13526692685
com.xxx.sqlitetest I/db: 总共有3项数据
name:张三
phone:123
email:zs@136.com //数据已被修改
name:李四
phone:13526648945
email:lishi@126.com
name:王五
phone:13526692685
email:wangwu@126.com
com.xxx.sqlitetest I/db: 总共有2项数据
name:张三
phone:123
email:zs@136.com
//第2条记录已被删除
name:王五
phone:13526692685
email:wangwu@126.com
7.使用SimpleCursorAdapter显示数据库中的数据
把Cursor对象作为数据源
1)新建布局xml
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
2) SimpleCursorAdapter
Cursor c = db.rawQuery("SELECT * FROM "+tb_name,
null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
MainActivity.this,
R.layout.layout, //显示每个数据项所用的布局
c,//以Cursor对象为数据源
new String[]{"name","phone","email"},//Cursor中字段名数组
new int[] {R.id.name, R.id.phone, R.id.email},//layout中组件ID数组
0);//Adapter运行模式
lv.setAdapter(adapter);