2012-12-12 2 views
0

그래서 데이터베이스에있는 모든 항목을 표시하는 방법을 알고 있지만 데이터베이스의 특정 행을 하나만 가져 오는 방법을 알아야합니다. 여기 안드로이드에서 자신의 SQL DB에서 특정 항목을 얻는 방법

내는

DataBaseHelper.java

package com.soac.dbtest; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import android.content.Context; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DataBaseHelper extends SQLiteOpenHelper 
{ 
private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window 
//destination path (location) of our database on device 
private static String DB_PATH = "data/data/com.soac.dbtest/databases/"; 
private static String DB_NAME ="team";// Database name 
private SQLiteDatabase mDataBase; 
private final Context mContext; 

public DataBaseHelper(Context context) 
{ 
    super(context, DB_NAME, null, 1);// 1? its Database Version 
    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; 
    this.mContext = context; 
} 

public void createDataBase() throws IOException 
{ 
    //If database not exists copy it from the assets 

    boolean mDataBaseExist = checkDataBase(); 
    if(!mDataBaseExist) 
    { 
     this.getReadableDatabase(); 
     this.close(); 
     try 
     { 
      //Copy the database from assests 
      copyDataBase(); 
      Log.e(TAG, "createDatabase database created"); 
     } 
     catch (IOException mIOException) 
     { 
      throw new Error("ErrorCopyingDataBase"); 
     } 
    } 
} 
    //Check that the database exists here: /data/data/your package/databases/Da Name 
    private boolean checkDataBase() 
    { 
     File dbFile = new File(DB_PATH + DB_NAME); 
     //Log.v("dbFile", dbFile + " "+ dbFile.exists()); 
     return dbFile.exists(); 
    } 

    //Copy the database from assets 
    private void copyDataBase() throws IOException 
    { 
     InputStream mInput = mContext.getAssets().open(DB_NAME); 
     String outFileName = DB_PATH + DB_NAME; 
     OutputStream mOutput = new FileOutputStream(outFileName); 
     byte[] mBuffer = new byte[1024]; 
     int mLength; 
     while ((mLength = mInput.read(mBuffer))>0) 
     { 
      mOutput.write(mBuffer, 0, mLength); 
     } 
     mOutput.flush(); 
     mOutput.close(); 
     mInput.close(); 
    } 

    //Open the database, so we can query it 
    public boolean openDataBase() throws SQLException 
    { 
     String mPath = DB_PATH + DB_NAME; 
     //Log.v("mPath", mPath); 
     mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY); 
     //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
     return mDataBase != null; 
    } 

    @Override 
    public synchronized void close() 
    { 
     if(mDataBase != null) 
      mDataBase.close(); 
     super.close(); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

    } 

} 

testAdapter.java

package com.soac.dbtest; 

import java.io.IOException; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 

public class testAdapter 
{ 
    protected static final String TAG = "DataAdapter"; 

    private final Context mContext; 
    private SQLiteDatabase mDb; 
    private DataBaseHelper mDbHelper; 

    public testAdapter(Context context) 
    { 
     this.mContext = context; 
     mDbHelper = new DataBaseHelper(mContext); 
    } 

    public testAdapter createDatabase() throws SQLException 
    { 
     try 
     { 
      mDbHelper.createDataBase(); 
     } 
     catch (IOException mIOException) 
     { 
      Log.e(TAG, mIOException.toString() + " UnableToCreateDatabase"); 
      throw new Error("UnableToCreateDatabase"); 
     } 
     return this; 
    } 

    public testAdapter open() throws SQLException 
    { 
     try 
     { 
      mDbHelper.openDataBase(); 
      mDbHelper.close(); 
      mDb = mDbHelper.getReadableDatabase(); 
      Log.e(TAG,"opened db"); 
     } 
     catch (SQLException mSQLException) 
     { 
      Log.e(TAG, "open >>"+ mSQLException.toString()); 
      throw mSQLException; 
     } 
     return this; 
    } 

    public void close() 
    { 
     mDbHelper.close(); 
    } 

    public Cursor getTestData() 
    { 
     try 
     { 
      String sql ="SELECT * FROM wwwt"; 

      Cursor mCur = mDb.rawQuery(sql, null); 
      if (mCur!=null) 
      { 
       mCur.moveToNext(); 
      } 
      return mCur; 
     } 
     catch (SQLException mSQLException) 
     { 
      Log.e(TAG, "getTestData >>"+ mSQLException.toString()); 
      throw mSQLException; 
     } 
    } 
} 

Main.java 잘 작동

package com.soac.dbtest; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.widget.Toast; 

public class main extends Activity { 
    /** Called when the activity is first created. */ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     testAdapter mDbHelper = new testAdapter(this); 
     mDbHelper.createDatabase(); 

     mDbHelper.open(); 
     Cursor c = mDbHelper.getTestData(); 
      if (c.moveToFirst()) 
      { 
       do {   
        DisplayTitle(c); 
       } while (c.moveToNext()); 
      } 
    } 

    public void DisplayTitle(Cursor c) { 
     Toast.makeText(
       this, 
       "id: " + c.getString(0) + "\n" + "NAME: " + c.getString(1) 
         + "\n" + "COUNTRY: " + c.getString(2) + "\n" 
         + "POP: " + c.getString(3), Toast.LENGTH_LONG) 
       .show(); 
    } 

} 

코딩,하지만 그것은 모두 통과 나의 따 행을 표시하고 축배에 표시합니다. 하나의 특정 행만 표시하는 방법을 알고 싶습니다.

+0

'문자열 sql = "같은 WHERE 절을 사용하십시오. SELECT * FROM wwwt WHERE -> 행 기준 <-;"' – jlordo

답변

0

특정 행을 표시하려면 데이터베이스에 a primary key의 각 행을 구별하는 식별자 또는 ID가 있어야합니다. 이처럼

:

select * from your_table where id = 1

id는 데이터베이스 테이블의 기본 키가 될 곳.

where some condition은 귀하의 상태 또는 귀하가 데이터베이스에서 가져 가고 싶은 것을 넣는 곳입니다.

+0

Aaah 감사합니다! 그것은 완벽하게 작동했습니다. – Paul

관련 문제