您的位置:首页 > 数据库

安卓开发-实现数据库的CRUD操作

2017-10-05 15:37 561 查看

1.创建DBOpenHelper类继承SQLiteOpenHelper:

public class DBOpenHelper extends SQLiteOpenHelper implements BaseColumns {
public static final String DB_NAME = "contact.db";//数据库的名称
public static final int DB_VERSION = 6;//数据库的版本

public static final String _TABLENAME = "_contactinfo";//表名
public static final String _USERNAME = "_username";//属性名
public static final String _PHONE = "_phone";//属性名

//通过传入context对象创建数据库对象
public DBOpenHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);

}

//当数据库当调用函数getWritableDatabase()/getReadableDatabase()且数据库database文件不在时执行
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + _TABLENAME + "(" + _ID
+ " integer primary key autoincrement, " + _USERNAME
+ " text, " + _PHONE + " text)");
}

//版本更新时执行
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}


2.定义CRUD操作的接口IContactDao:

public interface IContactDao {
//向表中插入一条数据
boolean addContact(String username, String phone);

//通过指定phone删除表中的一条数据
boolean deleteContact(String phone);

//通过phone更新一条数据
boolean updateContact(String username, String phone);

//通过phone查询该条数据
String queryContact(String phone);
}


3.定义实现接口IContactDao的类ContactDaoImpl和ContactGoogleDaoImpl:

public class ContactDaoImpl implements IContactDao {
private static DBOpenHelper mHelper;

public ContactDaoImpl(Context c) {
mHelper = new DBOpenHelper(c);
}

public boolean addContact(String username, String phone) {
SQLiteDatabase database = mHelper.getWritableDatabase();

database.execSQL("insert into " + DBOpenHelper._TABLENAME
+ " ("+DBOpenHelper._USERNAME+","+DBOpenHelper._PHONE+") values (?, ?)", new String[] { username,
phone });
return true;
}

public boolean deleteContact(String phone) {
SQLiteDatabase database = mHelper.getWritableDatabase();

database.execSQL("delete from " + DBOpenHelper._TABLENAME
+ " where "+DBOpenHelper._PHONE+" = ?", new String[] { phone });
return true;
}

public boolean updateContact(String username, String phone) {
SQLiteDatabase database = mHelper.getWritableDatabase();

database.execSQL("update " + DBOpenHelper._TABLENAME
+ " set "+DBOpenHelper._USERNAME+" = ?, "+DBOpenHelper._PHONE+" = ?", new String[] { username,
phone });
return true;
}

public String queryContact(String phone) {
SQLiteDatabase database = mHelper.getWritableDatabase();

Cursor cursor = database.rawQuery("select "+DBOpenHelper._USERNAME+" from "+DBOpenHelper._TABLENAME+" where "+DBOpenHelper._PHONE+" = ?",
new String[] { phone });
if(cursor.moveToNext()){
String username = cursor.getString(0);
Log.v("aaa", username);
}

return null;
}

}

public class ContactGoogleDaoImpl implements IContactDao {
private DBOpenHelper dbHelper;

public ContactGoogleDaoImpl(Context c) {
dbHelper = new DBOpenHelper(c);
}

public boolean addContact(String username, String phone) {
SQLiteDatabase database = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(DBOpenHelper._USERNAME, username);
values.put(DBOpenHelper._PHONE, phone);
Long rawNum = database.insert(DBOpenHelper._TABLENAME, null, values);

return rawNum != -1L;
}

public boolean deleteContact(String phone) {
SQLiteDatabase database = dbHelper.getWritableDatabase();

int rawNum = database.delete(DBOpenHelper._TABLENAME,
DBOpenHelper._PHONE + "= ?", new String[] { phone });
return rawNum != 0;
}

public boolean updateContact(String username, String phone) {
SQLiteDatabase database = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(DBOpenHelper._USERNAME, username);

int rawNum = database.update(DBOpenHelper._TABLENAME, values,
DBOpenHelper._PHONE + "= ?", new String[] { phone });

return rawNum != 0;
}

public String queryContact(String phone) {
String result = "";

SQLiteDatabase database = dbHelper.getReadableDatabase();
Cursor cursor = database.query(DBOpenHelper._TABLENAME, new String[] {
DBOpenHelper._USERNAME, DBOpenHelper._PHONE },
DBOpenHelper._PHONE + "= ?", new String[] { phone }, null, null,
null);

String usernameValue = "";
String phoneValue = "";
while(cursor.moveToNext()){
int usernameIndex = cursor.getColumnIndex(DBOpenHelper._USERNAME);
usernameValue = cursor.getString(usernameIndex);

int phoneIndex = cursor.getColumnIndex(DBOpenHelper._PHONE);
phoneValue = cursor.getString(phoneIndex);
}
result += usernameValue;
result += phoneValue;

return result;
}

}


4.在MainActivity中调用ContactDaoImpl中的方法:

public class MainActivity extends Activity {
private IContactDao mContactDao = new ContactGoogleDaoImpl(this);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void addContactClick(View v){
boolean ifChanged = mContactDao.addContact("张三", "111");
Toast.makeText(this, ifChanged ? "添加成功" : "添加失败", Toast.LENGTH_SHORT).show();
}

public void deleteContactClick(View v){
boolean ifChanged = mContactDao.deleteContact("111");
Toast.makeText(this, ifChanged ? "删除成功" : "删除失败", Toast.LENGTH_SHORT).show();
}

public void updateContactClick(View v){
boolean ifChanged = mContactDao.updateContact("李四", "111");
Toast.makeText(this, ifChanged ? "修改成功" : "更新失败", Toast.LENGTH_SHORT).show();
}

public void queryContactClick(View v){
String result = mContactDao.queryContact("111");
Toast.makeText(this, result, Toast.LENGTH_SHORT).show();

}

}


5.Sqlite工具的使用:

1.位置:sdk/tools/sqlite3.exe

2.使用:
2.1:cmd中,adb -s 模拟器名称  shell
2.2:cd /data/data/包名/databases
2.3:sqlite3 数据库文件名(contact.db)
.tables : 查看所有表
sql语句  :执行
sqlite.quit:退出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息