2017-02-01 11 views
0

ok私はちょうどデータベースからSQLデータを取り出すためにこれを行うべきであるという指示に従ったが、今まで私はこれを私のdatabasehelperクラスの中に入れている。次にデータベースからデータを取得しますか?

public void getIconResource(String tblName) 
    { 
     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); 
      } 
      while (cursor.moveToNext()); 
     } 
     db.close(); 
    } 

だから何とかこれはどのように私は私のMainActivityで値を取得し、整数の配列に保存しない...それは私のテーブルのintが含まれている4列のすべての値を取得しているのでしょうか?

答えて

0

あなたが持っているように、変数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; 
    } 

+0

あなたは私が主な活動でどのように使用できるかを教えてください。たとえば、ある列の1つのデータを 'int data = //配列の4番目の値 'に保存したいとします。 – User9124

+0

" 1つの列のデータ "とはどういう意味ですか?あなたの例では列インデックス3にアクセスしていますが、結果セットを制限していないので、テーブルのすべてのレコードが取得され、列インデックス3に存在するアイテムのコレクションになります。リスト/コレクション/整数の配列コレクション内のインデックス位置を使用して個々のアイテムにアクセスします。 'int itemZero = getIconResource(" myTable ")[0];'コレクションの最初のアイテムを取得します。構造やデータのサンプルを含め、作業しているテーブルの例を挙げることができますか? – gmiley

+0

私の悪い...私は 'myDB = new DatabaseHelper(これ)'の方法で、 'myDB.getIconResource'を使用しました。これはあなたの例ではうまくいきました。 ArrayList リソース= myDB.getIconResource(tblnumber); 'それから' int resource1 = resource.get(0);最初の値を取得するなど。ありがとう – User9124

0

次のコードを試してみることがあります。

databasehelper dbhelper; 
List<Integer> newList = dbhelper.getIconResource("Your tablename"); 
    fot(int i = 0 ; i< newList.size() ; i++){ 
    int yourValue = newList(i); 
    } 
+0

このメソッドを試してみると、私のアプリケーションが実行を停止しました。 – User9124

+0

どのエラーが表示されますか?ログを確認して、私に助けてもらえますか? – tahsinRupam

0

単に)あなたの主なactivtyに

public ArrayList<Integer> getIconResource(String tblName) 
{ 
    SQLiteDatabase db = this.getReadableDatabase(); 

     String getresource = "Select * from " + tblName; 

     Cursor cursor = db.rawQuery(getresource,null); //null for conditions 

ArrayListのデータは=新しいArrayListの<を>(メソッドを呼び出しArrayListの中ですべてのものを追加して、ArrayListの
を返します。

 if(cursor.moveToFirst()) 
    { 
     do 
     { 
      int resource = cursor.getInt(3); 
      data.add(resource); 
     } 
     while (cursor.moveToNext()); 
    } 
    db.close(); 
} 

リターンデータ。 }

+0

MainActivityからこれをどのように呼び出すことができますか? – User9124

関連する問題