我們發現很多關於sqlite的教程,使用常量來管理sqlite文件方法中的請求......但這是一個好方法嗎? Immagine我們重命名一個數據庫的三倍列,我們將有三次使用不同名稱的同一個常量。在sqlite版本中使用常量
那麼最佳實踐是什麼?至於我自己,我寫的版本那樣:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 4) {
db.execSQL("ALTER TABLE " + "demandes" + " RENAME TO demandes2");
db.execSQL("CREATE TABLE " + "demandes" + "(" + "id" + " INTEGER PRIMARY KEY," + "xmlSendLead" + " TEXT," + "statutEnvoieSendLead" + " INTEGER," + "dateEnvoieSendLead" + " DATETIME," + "contactWebId" + " INTEGER," + "xmlSimulation" + " TEXT," + "statutEnvoieSimulation" + " INTEGER," + "dateEnvoieSimulation" + " DATETIME" + ")");
db.execSQL("INSERT INTO " + "demandes" + " (" + "id" + "," + "xmlSendLead" + "," + "statutEnvoieSendLead" + "," + "dateEnvoieSendLead" + ")" + " SELECT id, xml, statutEnvoie, dateEnvoie" + " FROM demandes2;");
db.execSQL("DROP TABLE demandes2");
System.out.println("v4 parsed");
}
if (oldVersion < 5) {
db.execSQL("CREATE TABLE " + "leads" + "(" + "id" + " INTEGER PRIMARY KEY," + "xmlSendLead" + " TEXT," + "statutSendLead" + " INTEGER," + "dateSendLead" + " DATETIME," + "contactWebId" + " INTEGER," + "xmlSimulation" + " TEXT," + "statutSendSimulation" + " INTEGER," + "dateSendSimulation" + " DATETIME" + ")");
db.execSQL("INSERT INTO " + "leads" + " (" + "id" + "," + "xmlSendLead" + "," + "statutSendLead" + "," + "dateSendLead" + "contactWebId" + "," + "xmlSimulation" + "," + "statutSendSimulation" + "," + "dateSendSimulation" + ")" + " SELECT id, xml, statutEnvoie, dateEnvoie" + " FROM demandes2;");
db.execSQL("CREATE TABLE " + "leads" + "(" + "id" + " INTEGER PRIMARY KEY," + "prepaymentPenaltyPercentage" + " REAL," + "notaryFeeGrid" + " INTEGER," + "immoRatePercentage" + " REAL," + "immoMinMonthly" + " INTEGER," + "immoMaxMonthly" + " INTEGER," + "fileFeePercentage" + " REAL," + "date" + " DATETIME," + "consoRatePercentage" + " REAL," + "consoMinMonthly" + " INTEGER," + "consoMaxMonthly" + " INTEGER," + "bankFeePercentage" + " REAL)");
}
}
所以在這裏我不會做名之間的錯誤......因爲我使用常量的其他方法。你有什麼想法 ?
其他方法:
private static final int DATABASE_VERSION = 5;
private static final String DATABASE_NAME = "solutis.db";
private static final String KEY_ID = "id";
private static final String TABLE_LEADS = "leads";
private static final String KEY_XML_SENDLEAD = "xmlSendLead";
private static final String KEY_STATUTENVOIE_SENDLEAD = "statutEnvoieSendLead";
private static final String KEY_DATEENVOIE_SENDLEAD = "dateEnvoieSendLead";
private static final String KEY_CONTACTWEBID = "contactWebId";
private static final String KEY_XML_SIMULATION = "xmlSimulation";
private static final String KEY_STATUTENVOIE_SIMULATION = "statutEnvoieSimulation";
private static final String KEY_DATEENVOIE_SIMULATION = "dateEnvoieSimulation";
private static final String TABLE_SIMULATIONPARAMS = "simulationParams";
private static final String KEY_BANKFEEPERCENTAGE = "bankFeePercentage";
private static final String KEY_CONSOMAXMONTHLY = "consoMaxMonthly";
private static final String KEY_CONSOMINMONTHLY = "consoMinMonthly";
private static final String KEY_CONSORATEPERCENTAGE = "consoRatePercentage";
private static final String KEY_FILEFEEPERCENTAGE = "fileFeePercentage";
private static final String KEY_IMMOMAXMONTHLY = "immoMaxMonthly";
private static final String KEY_IMMOMINMONTHLY = "immoMinMonthly";
private static final String KEY_IMMORATEPERCENTAGE = "immoRatePercentage";
private static final String KEY_PREPAYMENTPENALTYPERCENTAGE = "prepaymentPenaltyPercentage";
private static final String KEY_NOTARYFEEGRID = "notaryFeeGrid";
private static final String KEY_DATE = "date";
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_DEMANDES_TABLE = "CREATE TABLE " + TABLE_LEADS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_XML_SENDLEAD + " TEXT," + KEY_STATUTENVOIE_SENDLEAD + " INTEGER," + KEY_DATEENVOIE_SENDLEAD + " DATETIME," + KEY_CONTACTWEBID + " INTEGER," + KEY_XML_SIMULATION + " TEXT," + KEY_STATUTENVOIE_SIMULATION + " INTEGER," + KEY_DATEENVOIE_SIMULATION + " DATETIME" + ")";
db.execSQL(CREATE_DEMANDES_TABLE);
/*
String CREATE_DEMANDES_TABLE = "CREATE TABLE " + TABLE_LEADS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_XML_SENDLEAD + " TEXT," + KEY_STATUTENVOIE_SENDLEAD + " INTEGER," + KEY_DATEENVOIE_SENDLEAD + " DATETIME" + ")";
db.execSQL(CREATE_DEMANDES_TABLE);
*/
}
public Demande addDemande(Demande demande) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_XML_SENDLEAD, demande.getXmlSendLead());
values.put(KEY_STATUTENVOIE_SENDLEAD, demande.getStatutEnvoieSendLead());
values.put(KEY_DATEENVOIE_SENDLEAD, demande.getDateEnvoieSendLead());
values.put(KEY_CONTACTWEBID, demande.getContactWebId());
values.put(KEY_XML_SIMULATION, demande.getXmlSimulation());
values.put(KEY_STATUTENVOIE_SIMULATION, demande.getStatutEnvoieSimulation());
values.put(KEY_DATEENVOIE_SIMULATION, demande.getDateEnvoieSimulation());
//long test = db.insert(TABLE_LEADS, null, values);
//int test2 = (int) test;
//demande.setID(test2);
long insert = db.insert(TABLE_LEADS, null, values);
int insertDemande = (int) insert;
demande.setId(insertDemande);
db.close();
return demande;
}
'variable'使用適當的術語在IT中非常重要。你在這裏指的是「專欄」嗎?你的'execSQL()'查詢看起來也是無稽之談。爲什麼要連接字符串,而不是隻有一個? –
@MarcinOrlowski對不起,我之前使用變量的字符串連接,但是當我多次改變列名時,我得到很多變量來管理 – Ben
您在表中獲得了多少列? 10? 20?更好地使用常量,而不是手動輸入列名,因爲後者會在早些時候發現追逐愚蠢的錯字問題。 –