Android学习笔记-保存数据到SQL数据库中(SavingDatainSQLDatabases)
知识点:
1.使用SQLHelper创建数据库
2.数据的增删查改(PRDU:Put、Read、Delete、Update)
背景知识:
下面将用一个关于联系人的数据库Demo来具体学习。
具体知识:
1.定义Contract类
在创建SQL数据库之前,要创建Contract类。那什么是Contract类呢?
ContractClass的定义:
ContractClass,又可以叫做CompanionClass。
AndroidDeveloper的帮助文档是这么说的:
<AcontractclassisacontainerforconstantsthatdefinenamesforURIs,
tables,andcolumns.Thecontractclassallowsyoutousethesameconstants
acrossalltheotherclassesinthesamepackage.Thisletsyouchangea
columnnameinoneplaceandhaveitpropagatethroughoutyourcode.>
Contact类是定义URI、表、列的名字的容器。这个类允许我们在同一包的不同类下使用相同的常量。
我们在一处修改了列名,同时传播到我们代码的每个地方。
packagecom.example.sqlitetest;
//Contract类
publicclassContact{
int_id;
String_name;
String_phone_number;
publicContact(){
}
publicContact(intid,Stringname,String_phone_number){
this._id=id;
this._name=name;
this._phone_number=_phone_number;
}
publicContact(Stringname,String_phone_number){
this._name=name;
this._phone_number=_phone_number;
}
publicintgetID(){
returnthis._id;
}
publicvoidsetID(intid){
this._id=id;
}
publicStringgetName(){
returnthis._name;
}
publicvoidsetName(Stringname){
this._name=name;
}
publicStringgetPhoneNumber(){
returnthis._phone_number;
}
publicvoidsetPhoneNumber(Stringphone_number){
this._phone_number=phone_number;
}
}
2.使用SQLHelper创建数据库
就像保存文件在内部存储一样,Android在私有的应用存储空间存储我们的数据库,这样就保证我们的数据是安全的。不能被其他应用访问到。
在设备上存储的数据库保存在:
/data/data/<package_name>/databases目录下
为了使用SQLiteOpenHelper,我们需要创建一个重写了onCreate(),onUpgrade()和onOpen()回调方法的子类。
3.数据的增删改查
增:传ContentValue值到insert()方法。
删:delete()方法 改:update()方法 ContentValuesvalues=newContentValues(); 查:query()方法 Cursorcursor=db.query(TABLE_CONTACTS,newString[]{KEY_ID, Contactcontact=newContact(Integer.parseInt(cursor.getString(0)), returncontact; 完整DatabaseHelper代码如下: importjava.util.ArrayList; importandroid.content.ContentValues; publicclassDatabaseHelperextendsSQLiteOpenHelper{ //数据库版本 //数据库名 //Contact表名 //Contact表的列名 publicDatabaseHelper(Contextcontext){ //创建表 //更新表 //再次创建表 /** //增加新的联系人 ContentValuesvalues=newContentValues(); //插入行 //获取联系人 Cursorcursor=db.query(TABLE_CONTACTS,newString[]{KEY_ID, Contactcontact=newContact(Integer.parseInt(cursor.getString(0)), SQLiteDatabasedb=this.getWritableDatabase(); if(cursor.moveToFirst()){ returncontactList; //更新单个联系人 ContentValuesvalues=newContentValues(); //更新行 //删除单个联系人 returncursor.getCount(); 还有一些代码不是本次学习的重点,就不贴出来了。有需要的留言找我要。 Demo运行效果图:
SQLiteDatabasedb=this.getWritableDatabase();
ContentValuesvalues=newContentValues();
values.put(KEY_NAME,contact.getName());
values.put(KEY_PH_NO,contact.getPhoneNumber());
db.insert(TABLE_CONTACTS,null,values);
db.close();
SQLiteDatabasedb=this.getWritableDatabase();
db.delete(TABLE_CONTACTS,KEY_ID+"=?",
newString[]{String.valueOf(contact.getID())});
db.close();
SQLiteDatabasedb=this.getWritableDatabase();
values.put(KEY_NAME,contact.getName());
values.put(KEY_PH_NO,contact.getPhoneNumber());
returndb.update(TABLE_CONTACTS,values,KEY_ID+"=?",
ewString[]{String.valueOf(contact.getID())});
SQLiteDatabasedb=this.getReadableDatabase();
KEY_NAME,KEY_PH_NO},KEY_ID+"=?",
newString[]{String.valueOf(id)},null,null,null,null);
if(cursor!=null)
cursor.moveToFirst();
cursor.getString(1),cursor.getString(2));
packagecom.example.sqlitetest;
importjava.util.List;
importandroid.content.Context;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
privatestaticfinalintDATABASE_VERSION=1;
privatestaticfinalStringDATABASE_NAME="contactsManager";
privatestaticfinalStringTABLE_CONTACTS="contacts";
privatestaticfinalStringKEY_ID="id";
privatestaticfinalStringKEY_NAME="name";
privatestaticfinalStringKEY_PH_NO="phone_number";
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
StringCREATE_CONTACTS_TABLE="CREATETABLE"+TABLE_CONTACTS+"("
+KEY_ID+"INTEGERPRIMARYKEY,"+KEY_NAME+"TEXT,"
+KEY_PH_NO+"TEXT"+")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//删除旧表
db.execSQL("DROPTABLEIFEXISTS"+TABLE_CONTACTS);
onCreate(db);
}
*增删改查操作
*/
voidaddContact(Contactcontact){
SQLiteDatabasedb=this.getWritableDatabase();
values.put(KEY_NAME,contact.getName());
values.put(KEY_PH_NO,contact.getPhoneNumber());
db.insert(TABLE_CONTACTS,null,values);
db.close();//关闭数据库的连接
}
ContactgetContact(intid){
SQLiteDatabasedb=this.getReadableDatabase();
KEY_NAME,KEY_PH_NO},KEY_ID+"=?",
newString[]{String.valueOf(id)},null,null,null,null);
if(cursor!=null)
cursor.moveToFirst();
cursor.getString(1),cursor.getString(2));
returncontact;
}
//获取所有联系人
publicList<Contact>getAllContacts(){
List<Contact>contactList=newArrayList<Contact>();
//SelectAllQuery
StringselectQuery="SELECT *FROM"+TABLE_CONTACTS;
Cursorcursor=db.rawQuery(selectQuery,null);
do{
Contactcontact=newContact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
contactList.add(contact);
}while(cursor.moveToNext());
}
}
publicintupdateContact(Contactcontact){
SQLiteDatabasedb=this.getWritableDatabase();
values.put(KEY_NAME,contact.getName());
values.put(KEY_PH_NO,contact.getPhoneNumber());
returndb.update(TABLE_CONTACTS,values,KEY_ID+"=?",
newString[]{String.valueOf(contact.getID())});
}
publicvoiddeleteContact(Contactcontact){
SQLiteDatabasedb=this.getWritableDatabase();
db.delete(TABLE_CONTACTS,KEY_ID+"=?",
newString[]{String.valueOf(contact.getID())});
db.close();
}
//获取联系人数量
publicintgetContactsCount(){
StringcountQuery="SELECT *FROM"+TABLE_CONTACTS;
SQLiteDatabasedb=this.getReadableDatabase();
Cursorcursor=db.rawQuery(countQuery,null);
cursor.close();
}
}
相关文章