Мы нашли много учебников по 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' Использование правильной терминологии является очень важным в ИТ. Вы имели в виду 'column' здесь? Также ваши 'execSQL()' запросы выглядят глупо. Почему вы объединяете строки, а не только одну? –
@MarcinOrlowski Извините за конкатенацию строк. Я использовал переменные раньше, но когда я много разевал имя столбца, я получаю так много переменных для управления – Ben
Сколько столбцов вы получили в таблице? 10? 20? Еще лучше использовать константы вместо того, чтобы вручную набирать имена столбцов, так как последний поразит вас проблемой чеканки-глупого опечатки раньше, чем позже. –