1、首先肯定是先新建一个空白项目,此过程就省略了,直接从建好项目开始吧。
2、首先介绍一下sqlite是什么,相信做安卓开发的都不陌生,sqllite是一个小型的、开源的、嵌入式关系型数据库。特点在于系统开销小,检索效率很高,所以被广泛应用,同时还支持事物操作,保证了数据的完整性。其次我觉得非常大的一个特点在于它是一个无数据类型的数据库,虽然我们在建表的时候会声明每个字段的数据类型,但是sqlite是不会对其进行检查的。但是作为一个有责任心的程序员我们还是要规范我们的代码以及程序,方便后续的代码的可维护性以及程序的可读性我们都是需要规范代码的。
3、Sqllite数据库的创建
在安卓中给我们提供了一个专门的类,那就是SQLiteOpenHelper类。通过这个类我们可以实现一些相应的回调函数,帮助我们更快的创建和操作数据库。
方法如下:
onCreate()—创建方法
onUpgrade()—数据库升级方法
onOpen()—打开数据库方法
4、直接上一个测试用例
项目结构如图
MySqliteHelper类代码如下:
public class MySqliteHelper extends SQLiteOpenHelper {
public MySqliteHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public MySqliteHelper(Context context){
super(context,Constant.DATABASE_NAME,null,Constant.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
Log.i("","-------onCreate--------");
String sql="create table "+Constant.TABLE_NAME+" ("+Constant.ID+" Integer primary key,"+Constant.NAME+" varchar(10)) ";
sqLiteDatabase.execSQL(sql);//执行SQL语句
Log.i("","-------sql执行成功--------");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
Log.i("","-------onUpgrade--------");
}
@Override
public void onOpen(SQLiteDatabase db) {
Log.i("","-------onOpen--------");
super.onOpen(db);
}
}
Constant类如下:
public class Constant {
public static final String DATABASE_NAME = "test.db";//数据库名
public static final int DATABASE_VERSION =1;//数据库版本号
public static final String TABLE_NAME = "test";//表名
public static final String TABLE_NAME2 = "user";//表名
public static final String ID = "id";
public static final String NAME = "name";
}
DbManger类如下:
public class DbManger {
private static MySqliteHelper helper;
public static MySqliteHelper getIntance(Context context){
if (helper==null){
helper=new MySqliteHelper(context);
}
return helper;
}
public static void execSQL(SQLiteDatabase db,String sql){
if(db!=null){
if (sql!=null && !"".equals(sql)){
db.execSQL(sql);
}
}
}
/**
* 语句查询获得Cursor对象
* @param db 数据库对象
* @param sql 查询sql语句
* @param selectionArgs 查询的条件的占位符
* @return 查询结果
*/
public static Cursor selectDataBySql(SQLiteDatabase db, String sql, String[] selectionArgs){
Cursor cursor=null;
if(db!=null){
cursor=db.rawQuery(sql,selectionArgs);
}
return cursor;
}
/**
* 将出查询的Cursor对象转换成List集合
* @param cursor 游标对象
* @return 集合对象
*/
public static List<User> cursorToList(Cursor cursor){
List<User> list=new LinkedList<>();
//moveToNext() ---返回为true则还有记录,为false则已经读取完记录
while (cursor.moveToNext()){
// int columnIndex=cursor.getColumnIndex(Constant.ID);
// int id=cursor.getInt(columnIndex);
int id=cursor.getInt((int)cursor.getColumnIndex(Constant.ID));
String name=cursor.getString((int)cursor.getColumnIndex(Constant.NAME));
User user=new User(id,name);
list.add(user);
}
return list;
}
}
User类如下:
package bean;
public class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "id="+this.id+",name="+this.name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
MainActivity类如下:
public class MainActivity extends AppCompatActivity {
private MySqliteHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper= DbManger.getIntance(this);
}
/**
* 创建数据库点击事件
* @param view
*/
public void createDb(View view) {
SQLiteDatabase db=helper.getWritableDatabase();
Toast.makeText(this,"测试!",Toast.LENGTH_LONG).show();
}
public void Click(View view) {
switch (view.getId()){
case R.id.btn_insert:
SQLiteDatabase db=helper.getWritableDatabase();
for (int i=1;i<=30;i++){
String sql="insert into "+Constant.TABLE_NAME+" values("+i+",'张三"+i+"')";
DbManger.execSQL(db,sql);
}
Log.i("","插入数据测试!");
db.close();
break;
case R.id.btn_update:
db=helper.getWritableDatabase();
String updateSql="update "+Constant.TABLE_NAME+" set "+Constant.NAME+"='小明' where "+Constant.ID+"=1";
DbManger.execSQL(db,updateSql);
Log.i("","修改数据测试!");
db.close();
break;
case R.id.btn_delete:
db=helper.getWritableDatabase();
//String deleteSql="delete from "+Constant.TABLE_NAME+" where "+Constant.ID+"=4";
String deleteSql="delete from "+Constant.TABLE_NAME+"";
DbManger.execSQL(db,deleteSql);
Log.i("","删除数据测试!");
db.close();
break;
}
}
public void onClick(View view) {
SimpleDateFormat formatter = new SimpleDateFormat("YYYY:HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());
String str = formatter.format(curDate);//获取当前时间
switch (view.getId()){
case R.id.btn_insertApi:
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues valuesI=new ContentValues();
valuesI.put(Constant.ID,6);
valuesI.put(Constant.NAME,"测试");
long result=db.insert(Constant.TABLE_NAME,null,valuesI);
if (result>0){
Toast.makeText(this,"插入数据成功!",Toast.LENGTH_LONG).show();
Log.i("","Api插入数据成功!"+str);
}else{
Toast.makeText(this,"插入数据失败!",Toast.LENGTH_LONG).show();
Log.i("","Api插入数据失败!"+str);
}
db.close();
break;
case R.id.btn_updateApi:
db=helper.getWritableDatabase();
ContentValues valuesU=new ContentValues();
valuesU.put(Constant.NAME,"王三");
//int count=db.update(Constant.TABLE_NAME,valuesU,Constant.ID+"=2",null);
int count=db.update(Constant.TABLE_NAME,valuesU,Constant.ID+"=?",new String[]{"6"});
if (count>0){
Toast.makeText(this,"修改数据成功!",Toast.LENGTH_LONG).show();
Log.i("","Api修改数据成功!"+str);
}else{
Toast.makeText(this,"修改数据失败!",Toast.LENGTH_LONG).show();
Log.i("","Api修改数据失败!"+str);
}
db.close();
break;
case R.id.btn_deleteApi:
db=helper.getWritableDatabase();
//int countD=db.delete(Constant.TABLE_NAME,Constant.ID+"=?",new String[]{"6"});
int countD=db.delete(Constant.TABLE_NAME,Constant.ID+"=?",new String[]{"6"});
if (countD>0){
Log.i("","countD:"+countD+" 时间:"+str);
Toast.makeText(this,"删除数据成功!",Toast.LENGTH_LONG).show();
Log.i("","Api删除数据成功!"+str);
}else{
Toast.makeText(this,"删除数据失败!",Toast.LENGTH_LONG).show();
Log.i("","Api删除数据失败!"+str);
}
db.close();
break;
case R.id.btn_selectApi:
db=helper.getWritableDatabase();
String selectSql="select * from "+Constant.TABLE_NAME;
Cursor cursor=DbManger.selectDataBySql(db,selectSql,null);
List<User> list=DbManger.cursorToList(cursor);
for (User u:list){
Log.i("",u.toString());
}
Toast.makeText(this,"查询数据成功!",Toast.LENGTH_LONG).show();
db.close();
break;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<Button
android:id="@+id/btnCreat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="创建数据库"
android:onClick="createDb"
/>
<Button
android:id="@+id/btn_insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入测试数据"
android:onClick="Click"
android:layout_marginTop="15dp"
/>
<Button
android:id="@+id/btn_update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改数据"
android:onClick="Click"
android:layout_marginTop="15dp"
/>
<Button
android:id="@+id/btn_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除所有数据"
android:onClick="Click"
android:layout_marginTop="15dp"
/>
<Button
android:id="@+id/btn_insertApi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入数据"
android:onClick="onClick"
android:layout_marginTop="15dp"
/>
<Button
android:id="@+id/btn_updateApi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改数据"
android:onClick="onClick"
android:layout_marginTop="15dp"
/>
<Button
android:id="@+id/btn_deleteApi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除数据"
android:onClick="onClick"
android:layout_marginTop="15dp"
/>
<Button
android:id="@+id/btn_selectApi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询数据"
android:onClick="onClick"
android:layout_marginTop="15dp"
/>
</LinearLayout>
步骤讲解请期待我下次无聊有时间再出一个吧。。。