2010-12-08 15 views
0

ここでの基本的な質問は、文字列配列内の位置に文字列変数を追加することはできますか?ここで文字列変数に文字列変数を格納することはできますか? (Java)

は。私は

public static final String CAT_BUD_TAB = "CAT_BUD_TAB"; 
public static final String inI = "INSERT INTO "; 
public static final String val = " VALUES "; 

public static final String[] catInsertArray = new String[13]; 

catInsertArray[0] = inI + CAT_BUD_TAB + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0);"; 

をやろうとしている。しかし、明らかにそれは含まれる文字列の先頭をマークするために「期待していますので、仕事に行くのではない何だ、これは動作しますとにかくありますか?

心配していないSQLイムいや

EDIT

、私は単なる文字列変数からテキストとテキストのビットを組み合わせて、配列内の1つの長い文字列としてそれらすべてを保持しようとしている。Jを持っている可能性がありますこの編集を無視して元の質問をもう一度読んだら、もっと混乱させてしまいました。

括弧を削除して、上記のコードブロックをすべての関連コードで更新しました。

が、日食はまだ「これらのトークンを削除し、トークンの構文エラー」があります言っていると波線赤は、コードの行全体(catInsertArray [0] = ....)

ペーストビンを並べていますあなたが見ても十分であれば、ここにあるクラスのクラスhttp://pastebin.com/cKa0sKEj

+1

私は混乱しています、あなたは実際に何をしたいですか? –

+1

私は混乱していますが、上記のコードは完全に有効です。実際のSQL文が有効かどうか疑問に思っていますか? – user489041

+0

返信ありがとうございますが、明らかに私は上記の元の投稿を編集していません。あなたはコードが完全に有効だと言っていますが、残念ながら私はまだ構文エラーを受けています。 – Holly

答えて

3

私はあなたの元の問題は、メソッド本体の外にいたコードを持っていた疑いがあります。このデモクラスはコンパイルされて実行され、あなたがしていたことと何が正しいのかを示すコメントがあります。

public class StringTest 
{ 

    public static final String crT = "CREATE TABLE "; 
    public static final String inI = "INSERT INTO "; 
    public static final String val = " VALUES "; 

    public static final String[] catInsertArray = new String[13]; 

    // you were probably doing this, which is not allowed in Java because you are writing code outside of a method body or static initializer block 
    //catInsertArray[0] = inI + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0);"; 

    static 
    { 
     // static initialize your static member 
     catInsertArray[0] = inI + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0);"; 
    } 

    public static void main(String [] args) 
    { 
     // You can put code in a method 
     //catInsertArray[0] = inI + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0);"; 

    } 
} 

あなたの新しいコメント - あなたのペーストビンのリンクにあるコードにはいくつかの問題があります。私が持っていることの1つは、あなたがDatabaseConstantsクラスの内部にネストされたインターフェイスを宣言している理由です。あなたが定数のためのクラスを作っているので、これは不必要なようです。

さらに、static initializer blockを除外して、配列をString配列に配置します。以下のコードを参照してください。

package com.geistware.studentbudgetapp; 

import android.provider.BaseColumns; 

public class DatabaseConstants { 

    //Variables for DDL statements and such 
    public static final String crT = "CREATE TABLE "; 
    public static final String inI = "INSERT INTO "; 
    public static final String val = " VALUES "; 

    //Table Names 
    public static final String CAT_BUD_TAB = "CAT_BUD_TAB"; 
    public static final String TWO_WEE_TAB = "TWO_WEE_TAB"; 

    //columns from the category_budget_table 
    public static final String CAT_ITEM = "CAT_ITEM"; 
    public static final String IN_OUT = "IN_OUT"; 
    public static final String BUDGET_AMOUNT = "BUDGET_AMOUNT"; 
    public static final String ACTUAL_AMOUNT = "ACTUAL_AMOUNT"; 
    public static final String AMOUNT_STRAYED = "AMOUNT_STRAYED"; 
    public static final String OVERBUDGET_TF = "OVERBUDGET_TF"; 
    public static final String AUTOSPEND_TF = "AUTOSPEND_TF"; 

    //Initial DDL Statements and Initial INSERT statements to populate table 
    public static final String createCATBUDTAB = (crT + CAT_BUD_TAB + 
      "(_id INTEGER PRIMARY KEY, CAT_ITEM TEXT, IN_OUT TEXT, BUDGET_AMOUNT REAL, ACTUAL_AMOUNT REAL, AMOUNT_STRAYED REAL, OVERBUDGET_TF INTEGER, AUTOSPEND_TF INTEGER);"); 
    public static final String createTWOWEETAB = (crT + TWO_WEE_TAB + 
      "(_id INTEGER PRIMARY KEY, SUB_CAT_ITEM TEXT, CAT_ITEM TEXT, COST REAL, ESSENTIAL_TF INTEGER, CURRENT_LAST TEXT, WEEK_ID INTEGER);"); 

    public static String[] catInsertArray = new String[13]; 

    // you still need to to put this code into a static initializer block 
    static 
    { 
     catInsertArray[0] = inI + CAT_BUD_TAB + val + "(null, 'Student Loan', 'in', 0.00, 0.00, 0.00, 0, 0);"; 
    } 

} 

しかし、定数のリストのようなもののために、私はenumerationを使用することを好むだろうが、うまくいけば、これは、少なくとも作業ビルドを取得する右のトラックにあなたを取得します。

+0

ああ、あなたは正しいでしょう!ありがとう私はしようとすると、上記のように実装されます。 – Holly

+0

私はあなたが示唆したようにそれを設定しようとしたと私はまだ私はまだerrorlessを得ることができないので、何かが不足していると思う、私はpastebinあなたがそれを見て、私がそれをどのようにセットアップするべきか教えてくれるほど親切であれば、このクラスの? http://pastebin.com/cKa0sKEj – Holly

+0

実際にそれ以上の手探りでそれはあなたが正しいと思われる、今私のエラーメッセージは、変数を見つけることができないということについてです、そして、彼らはグローバルではないので、 !私の愚かな。今私はちょうど私は私のインターフェイスメソッド(ガイドに従って)でそれらを必要とする私はあなたが既にそれを持っている必要がない場合、偉大な、心配しないで、あなたはすでに私の質問に答えている! – Holly

2

変数の値も文字列であれば、それを行うことができます。配列の位置は単なるコンテナであることに注意してください。

しかし、メソッドを呼び出すのではないので、かっこを削除してください。次のようにしてください:

array[position] = stringVariable1 + stringVariable2 + " some other string"; 
+0

感謝しますが、私はまだ構文エラーがあります。 – Holly

2

なぜSQLの完全な部分を区別する必要がありますか?

StringBuffer/StringBuilderを使用して必要なビットを連結して、引用符をエスケープすることができます。

0
  1. 配列
  2. あなたが やっていることと、「運用」たくさん間違ってありますの値を構築して 構文的には何も問題はありません。

    • "CREATE TABLE"、 "INSERT INTO"などは変数ではなく、定数であってはなりません。テキストを定数に変換すると、ソースコードで使用される文字の総数が減少する可能性がありますが、不要な複雑さが増します。
    • SQL文にはハードコードされたパラメータがあります。これは、PreparedStatementがはるかに有用かもしれないところです。
    • インデックスを指定して配列を構築するのは少し怖いです。他に何をしているのかに応じて、リストが意味を成すかもしれません。
+0

すべての情報をお寄せいただきありがとうございます。明らかに私はこれを非常に新しくしています。私は新しいことをたくさん学習して​​きました。これは変更のために学んだことを適用しようとする私の試みです。私はグーグルに戻る必要があるかもしれないように見えます。 – Holly

関連する問題