あなたが持っているように、変数resource
は、while
ループにのみスコープされています。そうでなくても、各ループの繰り返しで常に上書きされます。
代わりに、while
ループ中にコレクションの上位を宣言し、それぞれの値をAdd
にする必要があります。整数の場合は、関数を再定義してコレクションを返すこともできます。
public List<int> getIconResource(String tblName)
{
SQLiteDatabase db = this.getReadableDatabase();
List<int> myVals = new List<int>();
String getresource = "Select * from " + tblName;
Cursor cursor = db.rawQuery(getresource, null); //null for conditions
if (cursor.moveToFirst())
{
do
{
myVals.Add(cursor.getInt(3));
}
while (cursor.moveToNext());
}
db.close();
return myVals;
}
また、メモとして... SQLクエリの文字列連結は、災害のためのレシピです。さらに進める前に、SQLインジェクションとベストプラクティスを参照して回避してください。早い段階で良い習慣に入るのは時間を割く価値があります。
EDIT /補遺
また、あなたのテーブルのクエリから返された結果セットを制限しない限り、あなたはすべてのレコードを取得します。あなたがここに持っている機能は実際には使用されておらず、おそらくそれが持つ利点よりも多くの問題を引き起こすでしょう。私はIconId
に基づいて特定のIconResource
を返すより使用可能な機能の一例として、示唆している:もちろん
public int getIconResource(int iconId)
{
SQLiteDatabase db = this.getReadableDatabase();
String getresource = "select IconResource from IconTable where IconId = ?";
PreparedStatement pstmnt = db.prepareStatement(getresource);
pstrmnt.setString(1, iconId);
ResultSet rset = db.executeQuery();
int iconResource;
if (rset.next())
iconResource = rset.getInt("IconResource");
db.close();
return iconResource;
}
、上記のあなたのテーブル構造の仮定を行っています。上記を使用して
は、他の場所であなたのコードでは、あなたは単にIconId
でこの関数を呼び出すと、しかし、必要な出力を使用します。
int iconResource = getIconResource(5); // returns the IconResource for IconId = 5
上記のパラメータ化クエリを使用して、任意の可能なSQLインジェクション攻撃を防ぎ、 SQLサーバーに送信された動的連結文字列の使用を避けます。 MainActivityでこのメソッドを呼び出すと、別の整数型のリストにリストを保存すると
public List<Integer> getIconResource(String tblName)
{
List<Integer> list = new ArrayList<Integer>();
list.clear();
SQLiteDatabase db = this.getReadableDatabase();
String getresource = "Select * from " + tblName;
Cursor cursor = db.rawQuery(getresource,null); //null for conditions
if(cursor.moveToFirst())
{
do
{
int resource = cursor.getInt(3);
list.add(resource);
}
while (cursor.moveToNext());
}
db.close();
return list;
}
:
あなたは私が主な活動でどのように使用できるかを教えてください。たとえば、ある列の1つのデータを 'int data = //配列の4番目の値 'に保存したいとします。 – User9124
" 1つの列のデータ "とはどういう意味ですか?あなたの例では列インデックス3にアクセスしていますが、結果セットを制限していないので、テーブルのすべてのレコードが取得され、列インデックス3に存在するアイテムのコレクションになります。リスト/コレクション/整数の配列コレクション内のインデックス位置を使用して個々のアイテムにアクセスします。 'int itemZero = getIconResource(" myTable ")[0];'コレクションの最初のアイテムを取得します。構造やデータのサンプルを含め、作業しているテーブルの例を挙げることができますか? – gmiley
私の悪い...私は 'myDB = new DatabaseHelper(これ)'の方法で、 'myDB.getIconResource'を使用しました。これはあなたの例ではうまくいきました。 ArrayListリソース= myDB.getIconResource(tblnumber); 'それから' int resource1 = resource.get(0);最初の値を取得するなど。ありがとう –
User9124