2017-01-31 3 views
0

Мы нашли много учебников по 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; 
} 
+1

'variable' Использование правильной терминологии является очень важным в ИТ. Вы имели в виду 'column' здесь? Также ваши 'execSQL()' запросы выглядят глупо. Почему вы объединяете строки, а не только одну? –

+0

@MarcinOrlowski Извините за конкатенацию строк. Я использовал переменные раньше, но когда я много разевал имя столбца, я получаю так много переменных для управления – Ben

+0

Сколько столбцов вы получили в таблице? 10? 20? Еще лучше использовать константы вместо того, чтобы вручную набирать имена столбцов, так как последний поразит вас проблемой чеканки-глупого опечатки раньше, чем позже. –

ответ

0

Когда вы пишете имена таблиц/столбцов непосредственно в SQL заявления, вы увеличиваете риск того, что вы его где-то орфографические ошибки, и что приложение будет взрывать позже. Если вместо этого вы используете константы, компилятор будет жаловаться на любые опечатки.

В общем, вы всегда должны использовать константы.

Однако даже использование констант не защищает от случайного использования неправильного. Итак, вы все равно должны проверить весь свой код.

Если вы считаете, что фактические имена таблиц и столбцов более читабельны, чем TABLE_THIS и KEY_THAT, и если вы уверены, что ваши тесты поймают все ошибки, вы можете решить не использовать константы. И будет ли это решение хорошей идеей, это то, что вам нужно будет выяснить сами.

+0

Как обрабатывать приложения с большой базой данных – Ben

Смежные вопросы