2016-11-29 4 views
-1

テーブルの配列や、コードを使ってテーブルやカラムを動的に追加する方法はありますか? 私は何をしようとしていることはこれです:[]内部SQLテーブル配列

private static final String [] TABLE_NAME = new String ['value to be set in code']; 
+0

'static final'宣言しないで、実行時に計算することができます。あなたは何を達成したいですか? – aha

+0

すべてのJavaコードはクラス内にある必要があることに注意してください。質問を編集して、コードスニペットの一部としてクラス宣言を含める必要があります。 –

+0

'テーブルの配列を持たせることも、コードを使ってテーブルやカラムを動的に追加することもできますか?** ** NO **。データベース構造*を変更するたびに(つまり、表または列を追加または削除することによって)、DATABASE_VERSION定数の値を増やす必要があるためです。または、データベースを削除して再作成します。 –

答えて

0

値は、配列のサイズです。あなたは確かに

public class MyTables { 
    private static final int TABLE_COUNT = 2; 
    private static final String [] TABLE_NAME = new String [TABLE_COUNT]; 
} 

ようなもので、これを動的に割り当てることができますしかし、あなたはまだ名のStringオブジェクトで配列を移入する必要があります。最も明白な方法は、明示的に呼び出されなければならない方法でこれを行うことです。

public class MyTables { 
    private static final int TABLE_COUNT = 2; 
    private static final String [] TABLE_NAME = new String [TABLE_COUNT]; 

    public static void initTableNames() { 
     TABLE_NAME[0] = "TABLE1"; 
     TABLE_NAME[1] = "TABLE2"; 
    } 
} 

欠点は、あなたのコード内のどこかMyTables.initTableNames()で明示的にこれを呼び出す必要があるということです。

public class MyTables { 
    private static final int TABLE_COUNT = 2; 
    private static final String [] TABLE_NAME = new String [TABLE_COUNT]; 

    static { 
     TABLE_NAME[0] = "TABLE1"; 
     TABLE_NAME[1] = "TABLE2"; 
    } 
} 

さて、TABLE_NAMEはできるだけ早くあなたがMyTableクラスを使用して移入されます:Javaは、この問題を回避するためにstatic初期化子を提供します。

しかし、あなたは宣言の中で一つのラインにこのすべてを組み合わせることができますので、このすべてが必要なよりもはるかに複雑です:

public class MyTables { 
    private static final String [] TABLE_NAME = {"TABLE1", "TABLE2"}; 
} 
+0

forループを使用してString値を設定することはできません。また、どのように 'MyTables.initTableNames()'メソッドを使用できますか? – Omar

+0

@Omarはい、私の例では、テーブル名がパターンに従うのでforループを使うことができます。 –

+0

@Omarあなたは 'MyTables.initTableNames()'とタイプして 'MyTables.initTableNames()'を使います。しかし、静的メソッドではなく静的初期化を使用することをお勧めします。 –

0

は、あなたが言っていますか?あなたのsqliteデータベース内のテーブルが何であるかを知りたいのですが、これらのテーブル名を質問で述べたTABLE_NAME配列にどのように格納することができますか?

ある場合は、クエリselect tbl_name from sqlite_master where type ="table"でカーソルを使用して、配列内のデータをフェッチできます。 sqlite_masterテーブルには、すべてのテーブル、ビュー、および対応するsqlsの情報があります。