Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在sqlite版本控制中使用常量_Android_Sqlite - Fatal编程技术网

Android 在sqlite版本控制中使用常量

Android 在sqlite版本控制中使用常量,android,sqlite,Android,Sqlite,我们在sqlite文件的方法中找到了很多关于sqlite使用常量管理请求的教程。。。但这是一个好办法吗?在引擎中,我们将数据库的列重命名三次,我们将有三次相同的常量使用不同的名称 那么,最佳实践是什么?对于我自己,我编写的版本控制如下: @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 4) { db.execS

我们在sqlite文件的方法中找到了很多关于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)");
    }
}

当您将表/列名直接写入SQL语句时,您会增加在某个地方拼写错误的风险,并且应用程序稍后会崩溃。 如果改用常量,编译器会抱怨任何输入错误

因此,一般来说,您应该始终使用常量

但是,即使使用常量也不能防止意外使用错误的常量。 因此,您仍然需要测试所有代码


如果您认为实际的表/列名比table_THIS和KEY_that更可读,并且如果您确信您的测试将捕获所有错误,那么您可以决定不使用常量。而这个决定是否是一个好主意,则需要你自己去发现。

变量
使用合适的术语在其中是非常关键的。你是指这里的
?另外,您的
execSQL()
查询看起来毫无意义。为什么要连接字符串,而不是只有一个?@MarcinOrlowski很抱歉我以前使用的字符串连接变量,但当我多次更改列名时,我需要管理这么多变量表中有多少列?10? 20? 最好使用常量,而不是手动键入列名,因为后者迟早会给你带来愚蠢的打字错误问题。@MarcinOrlowski对我来说,这看起来很难管理,好吧,现在是一个小数据库,但如何使用大量数据的大应用程序呢?这取决于。有些可能使用ORM,或者通过某种模型类以其他方式隔离DB层。那是个大问题,不能讨论。这是一个很受欢迎的话题
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;
}