SQLite数据库存储
- 文件类型:.db
- 数据保存路径:/data/data/projectPackage/database/xxx.db
- 默认情况下其他应用不能访问,当前应用可以通过ContentProvider提供其他应用操作
- 应用卸载时会删除此数据
Sqlite操作数据库的sql语句基本与mysql一样,但需要注意两点:
- 1,最大的不同在于创建表时可以不用指定字段类型,sql可以适时的自动转换,但除varchar类型以外最好指定类型
- 2,Sqlite的主键最好名称建议使用_id。
建表语句:
create table employee(
_id integer primary key autoincrement,:主键自增长
name varchar,:字符串
salary double,:小数
birthday data:日期,可直接插入日期格式字符串
)
插入语句:
insert into employee(name salary birthday)values('Tom',13000,'1994-12-12')
删除语句:
delete from employee where _id=2
更新语句:
update employee set salary=salary+5000 where _id=1
查找语句:
select * from employee
select * from employee where _id=3
SQLiteOpenHelper:数据库操作的抽象帮助类
- SQLiteOpenHelper(Context context,String name,CurorFactory factory,int version):构造方法,指定数据库文件名和版本号
- abstact void onCreate(SQLiteDatabase db):用于创建表
- abstact void onUpgrade():用于版本更新
- SqliteDatabase getReadableDatabase():得到数据库连接
SqliteDatabase:代表与数据库的连接的类
- long insert():用于执行insert SQL,返回id值
- int update():用于执行update SQL
- indelete():用于执行delete SQL
- Cursor query():用于执行select SQL,返回包含查询结果数据的Cursor
- void execSql(sql):执行SQL语句
beginTransaction():开启事务
- setTransactionSuccseeful():设置事务时成功的
- endtransaction():结束事务,可能提交事务或回滚事务
- static openDatabase(String path,CursorFactory factory,int flags):得到数据库连接
Cursor:
- int getCount():匹配的总记录数
- boolean moveToNext():将游标移动到下一条记录的前面
- Xxx getXxx(ColumnIndex):根据字段下标得到对应值
- int getColumnIndex(Columnname):根据字段名得到对应的下标
布局代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="CreateDB"
android:onClick="createDB"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="UPdateDB"
android:onClick="upDateDB"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="insert"
android:onClick="inertDB"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="update"
android:onClick="reContentDB"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="delete"
android:onClick="deleteDB"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="query"
android:onClick="testQuery"/>
</LinearLayout>
数据库子类:
(数据库帮助类)
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(@Nullable Context context, int version) {
super(context, "PersonData.db" , null, version);
}
/**
* 什么时候会创建数据库文件:
* 1,当数据库文件不存在
* 2,连接数据库
*
* 当数据库文件调用时调用(1次)
* 此方法作用:
* 建表
* 插入一些初始化数据
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.e("TAG","DB onCreate");
//建表
String str="Create table person(_id integer primary key autoincrement,name varchar,age int)";
db.execSQL(str);
//插入初始数据
db.execSQL("insert into person(name,age)values('Tom',11)");
db.execSQL("insert into person(name,age)values('Sam',12)");
}
//当传入的版本号大于数据库的版本号时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("TAG","DB OnUpgrade");
}
}
Java代码:
public class MySqlite extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_sqlite);
}
/**
* 创建库
*/
public void createDB(View view){
DBHelper dbHelper=new DBHelper(this,1);
//获得连接
SQLiteDatabase database=dbHelper.getReadableDatabase();
Toast.makeText(this,"创建数据库",Toast.LENGTH_LONG).show();
}
/**
*更新数据库
*/
public void upDateDB(View view){
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
Toast.makeText(this,"更新数据库",Toast.LENGTH_LONG).show();
}
/**
* 插入数据
*/
public void inertDB(View view){
//得到连接
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//插入数据
ContentValues values=new ContentValues();
values.put("name","Boml");
values.put("age",22);
long id=database.insert("person",null,values);
//关闭
database.close();
//提示
Toast.makeText(this,"id="+id,Toast.LENGTH_LONG).show();
}
/**
* 更新数据
*/
public void reContentDB(View view){
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//更新数据
ContentValues values=new ContentValues();
values.put("name","Jack");
values.put("age",13);
database.update("person",values,"_id=?",new String[]{"3"});
database.close();
Toast.makeText(this,"更新数据",Toast.LENGTH_LONG).show();
}
public void deleteDB(View view){
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//删除数据
ContentValues values=new ContentValues();
database.delete("person","_id=4",null);
Toast.makeText(this,"删除数据",Toast.LENGTH_LONG).show();
}
/**
* 查询表数据
*/
public void testQuery(View view){
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//执行query select * from person
Cursor cursor=database.query("person",null,null,null,null,null,null);
//查询id为2的数据
//*Cursor cursor=database.query("person",null,"_id=?",new String[]{"2"},null,null,null);
//得到的总匹配数
int num=cursor.getCount();
//遍历所有数据
while(cursor.moveToNext()){
int age=cursor.getInt(0);
String name=cursor.getString(1);
Log.e("TAG",name + "---"+age);
}
//关闭
cursor.close();
database.close();
Toast.makeText(this,"表中数据:"+num,Toast.LENGTH_LONG).show();
}
}
添加数据代码:
/**
* 插入数据
*/
public void inertDB(View view){
//得到连接
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//插入数据
ContentValues values=new ContentValues();
values.put("name","Boml");
values.put("age",22);
long id=database.insert("person",null,values);
//关闭
database.close();
//提示
Toast.makeText(this,"id="+id,Toast.LENGTH_LONG).show();
}
更新数据代码:
/**
* 更新数据
*/
public void reContentDB(View view){
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//更新数据
ContentValues values=new ContentValues();
values.put("name","Jack");
values.put("age",13);
database.update("person",values,"_id=?",new String[]{"3"});
database.close();
Toast.makeText(this,"更新数据",Toast.LENGTH_LONG).show();
}
删除数据代码:
public void deleteDB(View view){
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//删除数据
database.delete("person","_id=4",null);
Toast.makeText(this,"删除数据",Toast.LENGTH_LONG).show();
}
查询数据代码:
/**
* 查询表数据
*/
public void testQuery(View view){
DBHelper dbHelper=new DBHelper(this,2);
SQLiteDatabase database=dbHelper.getReadableDatabase();
//执行query select * from person
Cursor cursor=database.query("person",null,null,null,null,null,null);
//查询id为2的数据
//*Cursor cursor=database.query("person",null,"_id=?",new String[]{"2"},null,null,null);
//得到的总匹配数
int num=cursor.getCount();
//遍历所有数据
while(cursor.moveToNext()){
int age=cursor.getInt(0);
String name=cursor.getString(1);
Log.e("TAG",name + "---"+age);
}
//关闭
cursor.close();
database.close();
Toast.makeText(this,"表中数据:"+num,Toast.LENGTH_LONG).show();
}