簡體   English   中英

我想使用Java字符串數組循環在SQLite中創建多個表。 編程錯誤?

[英]I would like to create multiple tables in SQLite using Java String Array Loop. Bad programming?

我想在我的應用程序中創建一個SQLite數據庫,但是我沒有執行db.execSQL的嚴格文本,而是這樣做的:

@Override
public void onCreate(SQLiteDatabase db) {
    CREATE_TABLE_QUERY = createCreateQuery(COL_APPLICATIONS);
    db.execSQL(CREATE_TABLE_QUERY);
}


public static String createCreateQuery(String[] COLUMNS) {
    String Query;
    Query = "CREATE TABLE " + TABLE_NAME_APPLICATIONS + " (";
    Query += COLUMNS[0] + " " + COLUMNS[1] + " PRIMARY KEY AUTOINCREMENT, ";
    for(int i = 2; i < COLUMNS.length; i ++){
        Query += COLUMNS[i] + " ";
        i++;
        Query += COLUMNS[i];
        if(i < COLUMNS.length-1) {
        Query += ", ";
        }
        Query += ")";
    }

    return Query;

}

很顯然,我傳入了靜態字符串數組。

這是不好的編程嗎? 與之相比,它是否消耗了不必要的RAM /處理量?

Query = "CREATE TABLE APPLICATIONSTB (ID INTEGER..."

對於每個表?

另外,如果我不將靜態字符串數組傳遞給createCreateQuery,那么為什么會出錯呢?

即時構建SQL語句很好。 與運行該語句實際花費的時間相比,構建該語句所花費的時間並不算什么。

但是,存在一些代碼問題:

  • 不要在循環中附加)
  • 變量和參數名稱應位於camelCase中。
  • 不要構建一個String使用String += String 使用StringBuilder

修改后的代碼:

public static String buildCreateTable(String tableName, String ... columnsAndTypes) {
    StringBuilder sql = new StringBuilder();
    sql.append("CREATE TABLE ").append(tableName).append(" ( ")
       .append(columnsAndTypes[0]).append(' ').append(columnsAndTypes[1]).append(" PRIMARY KEY AUTOINCREMENT");
    for(int i = 2; i < columnsAndTypes.length; i+=2)
        sql.append(", ").append(columnsAndTypes[i]).append(' ').append(columnsAndTypes[i + 1]);
    sql.append(" )");
    return sql.toString();
}

測試

System.out.println(buildCreateTable("MyTable", "MyId"  , "INTEGER",
                                               "MyName", "TEXT",
                                               "MyData", "BLOB"));

輸出量

CREATE TABLE MyTable ( MyId INTEGER PRIMARY KEY AUTOINCREMENT, MyName TEXT, MyData BLOB )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM