2016-07-14 6 views
0

私はSQLiteデータベースのインポートに関する他の質問をした後、データベースで新しいです。この実装を選択すると、どのように検索 "select ... from ..."を検索し、その結果をテーブルに表示できますか? (アンドロイド)dbクエリを作成してテーブルに結果を表示するには?

TestAdapter mDbHelper = new TestAdapter(getContext()); 
    mDbHelper.createDatabase(); 
    mDbHelper.open(); 
    Cursor testdata = mDbHelper.getTestData(); 
    mDbHelper.close(); 

UPDATE 1 がコンテンツをテストするためにこれをしようとしました:

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 = ""; 
private static String DB_NAME ="ACR_DB";// Database name 
private SQLiteDatabase mDataBase; 
private final Context mContext; 

public DataBaseHelper(Context context) 
{ 
    super(context, DB_NAME, null, 1);// 1? Its database Version 
    if(android.os.Build.VERSION.SDK_INT >= 17){ 
     DB_PATH = context.getApplicationInfo().dataDir + "/databases/"; 
    } 
    else 
    { 
     DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; 
    } 
    this.mContext = context; 
} 

public void createDataBase() throws IOException 
{ 
    //If the database does not exist, 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) { 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
} 
01:

TestAdapter mDbHelper = new TestAdapter(getContext()); 
    mDbHelper.createDatabase(); 
    mDbHelper.open(); 
    Cursor testdata = mDbHelper.getTestData(); 
    int number = testdata.getCount(); 
    TextView myTextView = (TextView) getView().findViewById(R.id.textView14); 
    myTextView.setText("My int value is " + number); 
    mDbHelper.close(); 

android.database.sqlite.SQLiteException: Can't downgrade database from version 10 to 1 
                  at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:360) 
                  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:254) 

マイDatabaseHelperのCLASこのエラーを取得します

}

マイtestAdapter

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(); 
    } 
    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 myTable"; 

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

}

+0

どのようなエラーが発生していますか? –

+0

私はActive Androidというライブラリを試してみることをお勧めします。初心者の方がシンプルで素早いです。 – faruk

+0

Thx私はActive Androidを見ていきます。 – Xaloju

答えて

0

私は別のアプリでこのようなものを使用。あなたのアクティビティでは、テーブル行を作成するためのメソッドを記述します。

public Tablelayout table; 

    public void populateTable(String queryResult){ 
      table = (TableLayout)findviewbyid(R.id.<yourtablename>); 
      TableRow tr = new TableRow(this); 
      tr.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT)); 
      TextView myDbResult = new TextView(this); 
      myDbResult.setText(queryResult); 
      tr.addView(myDbResult); 
      table.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT)); 
    } 

DatabaseHelperでこれを行います。

private SQLiteDatabase db; 
public YourActivity yourActivity; 

    public DatabaseHelper(Context c){ 
     myContext = c; 
     yourActivity = (YourActivity) myContext; 

    } 

    public void getData(){ 
     Cursor c = db.rawQuery("SELECT * FROM YourTable", null); 
     c.moveToFirst(); 
     while (c.isAfterLast() == false){ 
      String myQueryResult = cursor.getString(cursor.getColumnIndex("ColumnName")); 
      yourActivity.PopulateArtist(myQueryResult); 
      cursor.moveToNext(); 
     } 

    return c; 
} 

これはデータベーステーブルを経由しなければならず、各エントリについて、メインアクティビティにデータを含む行が作成されます。

0

あなたのエラーログにはDBのバージョンは10だが、1に設定されているという。最後にsuper(context, DB_NAME, null, 1);// 1? Its database Versionを1に設定することから始めることができます。

関連する問題