爲了節省自己手寫SQLite數據庫,就把平時簡單的Demo留下,方便自己摘抄。
我忘記要不要寫權限了,反正一般寫項目的時候,都直接把常用權限直接寫上了(也許不是一個好習慣~~)。
無非就是幾個類,很簡單。
先上實體類:
package com.wzq.waterlogisticsproject.database;
/**
* 作者:BigPenguinKing on 2016/11/23 0023 19:04
* Blog: http://blog.csdn.net/w630886916
*/
public class User {
private String userName;
private String passWord;
public User(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
然後繼續跟上工具類:
package com.wzq.waterlogisticsproject.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* 作者:BigPenguinKing on 2016/11/23 0023 19:10
* Blog: http://blog.csdn.net/w630886916
*/
public class DBUtils extends SQLiteOpenHelper{
public DBUtils(Context context) {
super(context, "use.db", null, 1);
}
/**
* 創建數據庫
*
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
//主鍵自增,兩個表相,這裏是用戶名和密碼
db.execSQL("create table user (id integer primary key autoincrement,name varchar(20) ,pwd varchar(20))");
}
/**
* 更新操作
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// * 思路:
// * 1.將user表更改爲臨時表(備份,就是把這個user表表名更改一下,你可以更改爲:temp_user)
// * sql: alter table user rename to temp_user;
// * 2.創建一個新表user
// * sql : create table user (id integer primary key autoincrement,name varchar(20),age integer(10),phone varchar(20))
// * 3.查詢temp_user表所有的數據,將數據插入2步驟中所創建的一個新表 user
// * sql:query();
// *
// * 4.刪除臨時表temp_user
}
}
上dao(並不是都用,用什麼寫什麼就行,反正就是增刪改查):
package com.wzq.waterlogisticsproject.database.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.wzq.waterlogisticsproject.database.DBUtils;
import com.wzq.waterlogisticsproject.database.User;
import java.util.ArrayList;
import java.util.List;
/**
* 作者:BigPenguinKing on 2016/11/23 0023 19:17
* Blog: http://blog.csdn.net/w630886916
* dao層
*/
public class UserDao {
/**
* 聲明
*/
private DBUtils dbUtils;
private SQLiteDatabase database;
/**
* 構造方法
* @param context
*/
public UserDao(Context context) {
dbUtils = new DBUtils(context);
database = dbUtils.getWritableDatabase();
}
/**
* 添加方法
* @param name
* @param pwd
* @return 如果插入成功,返回true 否則 失敗 返回 false
*/
public boolean add(String name, String pwd) {
// 開啓數據庫事務
database.beginTransaction();
try {
// db.execSQL("insert into person (name,phone) values (?,?)", bindArgs)
/**
* table 表名 nullColumnHack 你要指定表中那列可以爲空 null
*
* ContentValues 你要插入數據user表中的值
*/
ContentValues values = new ContentValues();// 類似與map集合
// key 與user中的列名一一對應
// value 你要往這個列插入的值
values.put("name", name);
values.put("pwd", pwd);
long result = database.insert("user", null, values);
database.setTransactionSuccessful();
// result 如果插入成功,返回受影響的行數,返回 -1 就插入失敗
if (result != -1) {
return true;
} else {
return false;
}
}finally {
// 結束事務
database.endTransaction();
}
}
/**
* 查詢方法
* @return
*/
public List<User> query() {
Cursor cursor = database.query("user", null, null, null, null, null, null);
List<User> list = new ArrayList<User>();
while (cursor.moveToNext()) {
list.add(new User(cursor.getString(cursor.getColumnIndex("name")),
cursor.getString(cursor.getColumnIndex("pwd"))));
}
return list;
}
}
/**
* 刪除一條數據
*
* @param id
* @return
*/
public boolean delete(int id) {
/**
* table 表名 whereClause 條件 whereArgs 條件參數
*/
int result = db.delete("user", "id = ?",
new String[] { String.valueOf(id) });
if (result > 0) {
return true;
} else {
return false;
}
}
/**
* 更新一條數據
*
* @param name
* 你要修改的名字
* @param id
* 根據用戶id來修改
* @return
*/
public boolean update(String name, String money, int id) {
/**
* table 表名 values 你要修改user表中的值 whereClause 條件 你要根據什麼條件去修改 whereArgs
* 條件參數
*/
// 開啓數據庫事務
db.beginTransaction();
try {
ContentValues values = new ContentValues();
values.put("name", name);
values.put("money", money);
int result = db.update("user", values, "id = ?",new String[] { String.valueOf(id) });
/*User user = null;// new User();
user.equals("uuu");*/
db.setTransactionSuccessful();//這一定要設置,不設置的話,你修改的那個數據將不會提交到數據庫
if (result > 0) {
return true;
} else {
return false;
}
} finally {
// 結束事務
db.endTransaction();
}
}
/**
* 查詢所有用戶的值
*
* @return
*/
public List<User> findAll() {
/**
* distinct 是否取出重複數據 如果這是true 就去除重複數據,否則不去除 table 表名 columns 你要查詢的列
* name,phone,id,age , name,phone id,name,age selection 查詢條件 id = ? or
* name = ? selectionArgs 查詢條件參數 groupBy 分組查詢 having 字句 子查詢語句 分類 電冰箱
* ,having 電冰箱的價格 < 2000
*
* orderBy 是否排序 排序分 升序與降序 1,2,3 3,2,1
*
* limit 分頁語句 10 20
*/
try {
Cursor cursor = db
.query("user", null, null, null, null, null, null);
List<User> list = new ArrayList<User>();
while (cursor.moveToNext()) {
// cursor.getColumnIndex("name") 返回的是name列的所引值
// cursor.getString()根據索引拿到值
// List
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
User user = new User();
user.setAge(age);
user.setName(name);
user.setPhone(phone);
list.add(user);
}
// 關閉遊標
closeCursor(cursor);
return list;
} catch (Exception e) {
return null;
}
}
/**
* 關閉數據庫
*/
public void closeDb() {
if (db != null && db.isOpen()) {
db.close();
}
}
/**
* 關閉遊標
*/
public void closeCursor(Cursor cursor) {
if (!cursor.isClosed()) {
cursor.close();
}
}
至於添加數據一般就在哪用就在哪添加:
不過如果是初始化添加的話,那最好就是在自定義的Application裏面初始化了。
public void setDB() {
UserDao dao = new UserDao(getApplicationContext());
dao.add("138200000001", "123456");
dao.add("138200000002", "123456");
dao.add("138200000003", "123456");
dao.add("138200000004", "123456");
}