2017-02-01 1 views
0

오케이 그냥 데이터베이스에서 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

글쎄, 변수 resourcewhile 루프에만 적용됩니다. 그렇지 않은 경우에도 각 루프 반복에서 항상 덮어 쓰게됩니다.

대신 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으로이 함수를 호출하고 그러나 필요한 출력을 사용합니다 다음은 위의 매개 변수가있는 쿼리를 사용하여 가능한 모든 SQL 주입 공격을 방지

int iconResource = getIconResource(5); // returns the IconResource for IconId = 5 

및 SQL 서버로 전송 된 동적 연결된 문자열의 사용을 피합니다.

+0

내 주전원에서 어떻게 사용할 수 있는지 보여주세요.예를 들어'int data = // 배열의 네 번째 값 '에 열의 한 데이터를 저장하려고합니다. – User9124

+0

"열의 한 데이터"란 무엇을 의미합니까? 예에서는 열 인덱스 3에 액세스하지만 결과 집합을 제한하지 않으므로 테이블의 모든 레코드를 가져 와서 열 인덱스 3에있는 항목 컬렉션을 얻게됩니다. 목록/모음/정수 배열. 콜렉션의 인덱스 위치를 사용하여 개별 항목에 액세스합니다.'int itemZero = getIconResource ("myTable") [0];'컬렉션의 첫 번째 항목을 가져옵니다. 구조 및 데이터 샘플을 포함하여 작업중인 테이블의 예를 들려 줄 수 있습니까? – gmiley

+0

내 나쁜 ... 나는'myDB = new DatabaseHelper (방법) '방식으로 아래에'myDB.getIconResource'를 사용했다. 당신의 예제에서 잘 작동한다. ArrayList resource = myDB.getIconResource (tblnumber);'then'int resource1 = resource.get (0); 첫 번째 값을 얻는 등등. 덕분에 – User9124

0

다음과 같은 코드를 시도 할 수 있습니다 :

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; 
    } 

그런 다음 MainActivity에서이 메서드를 호출하고 또 다른 정수 유형 목록에서 목록을 저장합니다.

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

는)
단순히> (= 새로운 ArrayList를

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에 데이터 주 activty에 <을하는 방법을 부르는 ArrayList의 모든 것을 추가하고 ArrayList의를 반환;

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

return data; }

+0

MainActivity에서 이것을 어떻게 호출합니까? – User9124

관련 문제