SqLite 數據庫
Google 為我們提供了sqlite相關的api
SqLiteOpenHelper 這是一個抽象的類 如果想要使用的話,需要其他的類去繼承他
SqLiteDatabase 類 暴露出了一系列的方法,為我們對數據庫的操作
實現SqLiteOpenHelper
public class MySqlLiteOpenHelper extends SQLiteOpenHel
public MySqlLiteOpenHelper(Context context, String
super(context, dbName, null, version);
}
/*
* 當數據第一次被創建的時候該方法會給執行
* 這個方法特別適合做表的初始化
* */
@Override
public void onCreate(SQLiteDatabase db) {
}
/*
* 當數據庫的版本升級的時候會執行該方法
* 這個方法特別適合做表結構的修改
* 注意:數據庫的版本正能增加不能降低 否則會拋異常
* */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVe
}
}
SqLite 的增刪改查
初始化
private MySqlLiteOpenHelper mySqlLiteOpenHelper;
private SQLiteDatabase sDB;
public final String TAG = "SqLiteActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sql_lite);
//這一步操作的時候數據庫並不會被創建
mySqlLiteOpenHelper = new MySqlLiteOpenHelper(this, "db.db", 1);
//在這一步操作的時候數據庫才會被讀取或者創建 如果數據庫不存在那么將會在/data/data/對應的包名 下建立一個databases目錄其中包含剛剛創建的數據庫以及其緩存文件
sDB = mySqlLiteOpenHelper.getWritableDatabase();
}
insert
//執行插入操作
@RequiresApi(api = Build.VERSION_CODES.N)
public void insert(View v) {
try {
/*
* 通過sql語句來插入數據
* 注意:下面是兩種占位符的方式 如果是通過format方法來進行占位符操作需要對【單引號】使用【''】 * 進行轉義
* 如果是通過exceSql方法進行拼接的話那么 是不需要加 【單引號】的
* */
//兩種拼接sql語句的方式
String sql = MessageFormat.format("insert into userinfo (username,password) values(''{0}'',''{1}'')", "天王2121", "專刊需求到");
sDB.execSQL("insert into userinfo (username,password) values(?,?)", new String[]{"天王 1", "專刊需求到"});
//執行sql語句
sDB.execSQL(sql);
//如果sql語句不太熟練可以通過Google提供的方法進行插入操作
ContentValues values = new ContentValues();
values.put("username", "tianwang12121gaidihu");
values.put("password", "baotazhenheyao");
/*
* 執行插入
* 第二個參數是:如果為null 那么 如果values 是null 的話那么就會 向 數據庫中插入一條null 行,如 * 果是可以的話 該參數一般為null 即可
* 返回值:返回主鍵的值 如果插入失敗那么返回-1
* */
long pk= sDB.insert("userinfo", null, values);
values.clear();
Toast.makeText(this, "insert successfully!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.i(this.TAG, e.toString());
}
}
Delete
public void delete(View v) {
//執行刪除操作
try {
//返回被刪除的行數
int count = this.sDB.delete("userinfo", "username='天王2121'", null);
Toast.makeText(this, String.valueOf(count), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.i(this.TAG, e.toString());
}
}
Update
//執行更新操作
public void update(View v) {
//需要進行修改的內容
ContentValues values = new ContentValues();
values.put("password", "123456");
//參數: 需要進行更新操作的表 , 需要更新的內容, 過濾條件 ,過濾條件的值
//返回值: 返回受營銷的行數
int count = this.sDB.update("userinfo", values, "_id>100", null);
values.clear();
Toast.makeText(this, String.valueOf(count), Toast.LENGTH_SHORT).show();
}
Query
//數據庫的查詢操作
public void select(View v) {
Cursor cursor = null;
//通過sql語句直接查詢
//String sql = "select * from userinfo where _id>100";
//cursor = this.sDB.rawQuery(sql, null);
//通過Google提供的方法來進行查詢操作
cursor = this.sDB.query("userinfo", new String[]{"_id", "username", "password"}, "_id > 100", null, null, null, null);
if (cursor != null) {
//打印獲取到的內容
while (cursor.moveToNext()) {
Log.i(this.TAG, cursor.getString(cursor.getColumnIndex("_id")));
Log.i(this.TAG, cursor.getString(cursor.getColumnIndex("username")));
Log.i(this.TAG, cursor.getString(cursor.getColumnIndex("password")));
}
} else {
Toast.makeText(this, "我就是null了", Toast.LENGTH_SHORT).show();
}
}