傻瓜式树立数据库,高效数据库操作代码的编写--android51CTO博客 - 娱乐之横扫全球

傻瓜式树立数据库,高效数据库操作代码的编写--android51CTO博客

2019-03-06 10:21:36 | 作者: 昊嘉 | 标签: 数据库,数据,代码 | 浏览: 2026

初学者在学android的时分,看到书上的sqlite数据库编程怎样有点杂乱。

初学阶段的难点:

树立数据库表字段(field)数据类型(text,interge)挑选较多,考虑较多。

   在activity中数据更新刺进要考虑的束缚条件很多

   老是拜访数据库的数据,每次都要在activity中声明一个cursor并且经过一大堆代码来获取cursor感觉有点繁琐。


关于上述的难点处理方法如下

 1.数据类型都用text(除了id编号)

2.在activity中不管刺进或更新都只用DB文件中同一个函数完结,并且不需要在activity中考虑任何要素(是否数据表中已经有当时要刺进或更新的数据)

   3.在DB文件中 写一个回来值为cursor的函数(回来的cursor为常用的cursor)


要知道的一些原理

1) db.update(TABLE_NAME, cv, where, whereValues)假如更新数据失利回来0

   2)db.update(TABLE_NAME, cv, where, whereValues)更新表中契合 where=whereValue的一切值

3)假如要查询的值或要更新的值有多个关键字束缚,那么能够安如下填写where 跟where

String where = field1+"=? and " + field2 + "=? and " + field3  + "=?";
String[] whereValues = {string1, string2, string3};
//Cursor cursor = db.query(HSTRYBUYTABLE, null, where, whereValues, null, null, null);
//db.update(HSTRYBUYTABLE, cv, where, whereValues);


4)return db.insert(HSTRYBUYTABLE, null, cv)只需调用就会在数据库中刺进数据


计划:

1)构建数据库表时请默许“主动编号”,并且其他字段数据类型都用text,(java中string类型简略转换成其他数据类型)

public void onCreate(SQLiteDatabase db) {
String sql = "create table "+YOUTABLENAME+" ("
+TABLE_ID+" integer primary key autoincrement, "
+TABLE_FIELD1+" text, "
+TABLE_FIELD2+" text, "
+TABLE_FIELD3+" text, "
+TABLE_FIELD4+" text )";
db.execSQL(sql);
}

2)  在HelpDB中写个如下函数替代insrtDB 跟 updataDB,今后在其他当地直接拿来用就是了,别想那么多,直接能用这个函数关键是update函数中的where句子写的正确恰当(这儿的正确看工程需求)。

public int operateHProduct(String string1, String string2, Product string3){
int i = 0;
if(updateHProduct(string1, string2, string3) == 0 ){//测验更新数据
i = 1;
insertHProduct(string1, string2, string3);
}
return i;
}


3)   编写在其他activity中常用的回来值为cursor函数,如:拜访整个表的Cursor

public Cursor selectTable(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
return cursor;
}


完好比如,仔细看updateProduct的where束缚,updateProduct的的where能够用以下方法替代:

package com.sqlitedb;
/*打开看接口,模仿数据用户名为lilin
* operateHProduct 增加或修正数据
* deleteHProduct  删去操作
* selectHProducts 获取指向数据库头的cursor,具体操作mainactivity中有,也可参阅本文件中的getIDByUadate
*
* */
import com.ProjectClass.Product;
import com.projectConstant.ProjectConstant;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class HistoryDB extends SDSQLiteOpenHelper {
private final static String DATABASE_NAME = ProjectConstant.projectDBDirName + ProjectConstant.DB_HISTORY;  //数据库名留意加格式名,否则会只树立note_db文件,此处跟sqlitehelper不一样
private final static int DATABASE_VERSION = 1;          //版本号
//product productParent  picturename productname price number
private final static String HSTRYBUYTABLE= ProjectConstant.DB_HSTRYTABLE;
public final static String PRODUCT_ID = "_id";
public final static String HISTORY_TYPE = ProjectConstant.DB_HISTORY_TYPE;
public final static String PRODUCT_CLIENT = ProjectConstant.DB_CLIENT_ID;
public final static String PRODUCT_PARENT = ProjectConstant.DB_PARENT;
public final static String PRODUCT_PICTURENAME = ProjectConstant.DB_PICTURENAME;
public final static String PRODUCT_PRUDUCTNAME = ProjectConstant.DB_PRODUCTNAME;
public final static String PRODUCT_PRICE = ProjectConstant.DB_PRICE;
public final static String PRODUCT_NUMBER = ProjectConstant.DB_NUMBER;
//结构函数
public HistoryDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//创立数据库
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table "+HSTRYBUYTABLE+" ("
+PRODUCT_ID+" integer primary key autoincrement, "
+PRODUCT_CLIENT+" text, "
+HISTORY_TYPE+" text, "
+PRODUCT_PARENT+" text, "
+PRODUCT_PRUDUCTNAME+" text, "
+PRODUCT_PICTURENAME+" text, "
+PRODUCT_PRICE+" text, "
+PRODUCT_NUMBER+" text )";
db.execSQL(sql);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "drop table if exists "+HSTRYBUYTABLE;
db.execSQL(sql);
onCreate(db);
}
//get the first cursor
public Cursor selectHProducts(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(HSTRYBUYTABLE, null, null, null, null, null, null);
return cursor;
}
public long insertHProduct(String clientName, String type, Product myProduct){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(PRODUCT_NUMBER, myProduct.getNumber());
cv.put(PRODUCT_CLIENT, clientName);
cv.put(HISTORY_TYPE, type);
cv.put(PRODUCT_PARENT, myProduct.getProductParent());
cv.put(PRODUCT_PRICE, myProduct.getPrice());
cv.put(PRODUCT_PICTURENAME, myProduct.getPictureName());
cv.put(PRODUCT_PRUDUCTNAME, myProduct.getPocductName());
return db.insert(HSTRYBUYTABLE, null, cv);
}
public void deleteHProduct(String clientName, String type, Product myProduct){
SQLiteDatabase db = this.getWritableDatabase();
String where = PRODUCT_ID+"=?";
String[] whereValues = {getIDByUadate(clientName, myProduct.getPocductName(), type)};
db.delete(HSTRYBUYTABLE, where, whereValues);
}
public int operateHProduct(String clientName, String type, Product myProduct){
int i = 0;
if(updateHProduct(clientName, type, myProduct) == 0 ){
i = 1;
insertHProduct(clientName, type, myProduct);
}
return i;
}
public int updateHProduct(String clientName, String type, Product myProduct){//更改type
SQLiteDatabase db = this.getWritableDatabase();
String where = PRODUCT_ID+"=?";//这儿的where句子有点杂乱能够参阅getIDByUadate进行修正
String[] whereValues = {getIDByUadate(clientName, myProduct.getPocductName(), type)};
ContentValues cv = new ContentValues();
cv.put(HISTORY_TYPE, type);
cv.put(PRODUCT_NUMBER, myProduct.getNumber());
cv.put(PRODUCT_PARENT, myProduct.getProductParent());
cv.put(PRODUCT_PRICE, myProduct.getPrice());
cv.put(PRODUCT_PICTURENAME, myProduct.getPictureName());
return db.update(HSTRYBUYTABLE, cv, where, whereValues);
}
private String getIDByUadate(String clientName, String ProductName, String type){//得到ID号
SQLiteDatabase db = this.getReadableDatabase();
String where = PRODUCT_PRUDUCTNAME+"=? and " + PRODUCT_CLIENT + "=? and " + HISTORY_TYPE  + "=?";
String[] whereValues = {ProductName, clientName, type};
Cursor cursor = db.query(HSTRYBUYTABLE, null, where, whereValues, null, null, null);
cursor.moveToFirst();
if(!cursor.isAfterLast())return cursor.getString(cursor.getColumnIndex(PRODUCT_ID));
return "0";
}
}



这样一个数据库操作的代码中只用三个函数能完结简直一切作业。

    operateHProduct 增加或修正数据//(假如只是要更新数据,更新失利不刺进数据,那么直接用updataProduct())
    deleteHProduct  删去操作
    selectHProducts 获取指向数据库头的cursor

并且运用起来十分简略。



这三个函数的操作能够参阅的mainactity,更多能够参阅下面的一个dome



关于本比如的数据库怎样写在SD卡上,以下一个dome有触及。主要是引证的他人写的SDSqliteOpenHelp类(具体见 />

别的附上曾经写的ecshop 网店雏形的代码(文中的代码在dome中有)下载地址http://pan.baidu.com/share/link?shareid=1333309535&uk=2065228996,这个代码简直触及到30%我所学的东西,里边的代码编写风格,跟内容有必定的价值。下载后先看"阐明.txt"。编码utf-8.

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章