2012-03-03 15 views
0

私はアンドロイドのsqliteデータベースを使用してサンプルアプリケーションを作成しました。私の要件はHow can i use Sqlite database in my android activity?です(親切にこのリンクをnoitceしています)。私はどのように私はアンドロイドsqliteデータベースから選択したIDの値を取得できますか?

public class DatabaseHandler extends SQLiteOpenHelper { 

     // The Android's default system path of your application database. 
     private static String DB_PATH = "/data/data/com.sqlite.example/databases/"; 

     private static String DB_NAME = "answers"; 

     private SQLiteDatabase myDataBase; 

     private final Context myContext; 
     String myPath; 

     /** 
     * Constructor Takes and keeps a reference of the passed context in order to 
     * access to the application assets and resources. 
     * 
     * @param context 
     */ 
     public DatabaseHandler(Context context) { 

      super(context, DB_NAME, null, 1); 
      this.myContext = context; 
     } 

     /** 
     * Creates a empty database on the system and rewrites it with your own 
     * database. 
     * */ 
     public void createDataBase() throws IOException { 

      boolean dbExist = checkDataBase(); 

      if (dbExist) { 
       // do nothing - database already exist 
      } else { 

       // By calling this method and empty database will be created into 
       // the default system path 
       // of your application so we are gonna be able to overwrite that 
       // database with our database. 
       this.getReadableDatabase(); 

       try { 

        copyDataBase(); 

       } catch (IOException e) { 

        throw new Error("Error copying database"); 

       } 
      } 

     } 

     /** 
     * Check if the database already exist to avoid re-copying the file each 
     * time you open the application. 
     * 
     * @return true if it exists, false if it doesn't 
     */ 
     private boolean checkDataBase() { 

      SQLiteDatabase checkDB = null; 

      try { 
       myPath = DB_PATH + DB_NAME; 
       checkDB = SQLiteDatabase.openDatabase(myPath, null, 
         SQLiteDatabase.OPEN_READONLY); 

      } catch (SQLiteException e) { 

       // database does't exist yet. 

      } 

      if (checkDB != null) { 

       checkDB.close(); 

      } 

      return checkDB != null ? true : false; 
     } 

     /** 
     * Copies your database from your local assets-folder to the just created 
     * empty database in the system folder, from where it can be accessed and 
     * handled. This is done by transfering bytestream. 
     * */ 
     private void copyDataBase() throws IOException { 

      // Open your local db as the input stream 
      InputStream myInput = myContext.getAssets().open(DB_NAME); 

      // Path to the just created empty db 
      String outFileName = DB_PATH + DB_NAME; 

      // Open the empty db as the output stream 
      OutputStream myOutput = new FileOutputStream(outFileName); 

      // transfer bytes from the inputfile to the outputfile 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = myInput.read(buffer)) > 0) { 
       myOutput.write(buffer, 0, length); 
      } 

      // Close the streams 
      myOutput.flush(); 
      myOutput.close(); 
      myInput.close(); 

     } 

     public void openDataBase() throws SQLException { 

      // Open the database 
      myPath = DB_PATH + DB_NAME; 
      myDataBase = SQLiteDatabase.openDatabase(myPath, null, 
        SQLiteDatabase.OPEN_READONLY); 

     } 

     @Override 
     public synchronized void close() { 

      if (myDataBase != null) 
       myDataBase.close(); 

      super.close(); 

     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 

     } 

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

     } 

     // Add your public helper methods to access and get content from the 
     // database. 
     // You could return cursors by doing "return myDataBase.query(....)" so it'd 
     // be easy 
     // to you to create adapters for your views. 

     public List<Contact> getAllContacts(int muNumber) { 
      List<Contact> contactList = new ArrayList<Contact>(); 
      // Select All Query 
      String selectQuery = "SELECT * FROM ANSWER WHERE ID= " + muNumber; 
    System.out.println("QUERY STRING IS......>>>>>> " + selectQuery); 

      SQLiteDatabase db = this.getWritableDatabase(); 
      Cursor cursor = db.rawQuery(selectQuery, null); 

      // looping through all rows and adding to list 
      if (cursor.moveToFirst()) { 
       do { 
        Contact contact = new Contact(); 
        contact.setID(Integer.parseInt(cursor.getString(0))); 
        contact.setName(cursor.getString(1)); 
        // contact.setPhoneNumber(cursor.getString(2)); 
        // Adding contact to list 
        contactList.add(contact); 
       } while (cursor.moveToNext()); 
      } 

      // return contact list 
      return contactList; 
     } 
} 

answers.db

database image

012 DataBaseHandler.javaこれを行うには、次のコード、

MainClass.java

public class MainClass extends Activity implements OnClickListener { 

    Button NUM_INPUT; 
    EditText enter_NUM; 
    int number; 
    DatabaseHandler db = new DatabaseHandler(this); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sai_answers_home); 
     NUM_INPUT = (Button) findViewById(R.id.answerButton); 
     enter_NUM = (EditText) findViewById(R.id.saiAnssersEditText); 
     NUM_INPUT.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if (v.getId() == R.id.answerButton) { 
      number = Integer.parseInt(this.enter_NUM.getText().toString()); 
      // /System.out.println("EDITTEXTVALUE" + number); 
      Log.d("Reading: ", "Reading all contacts.."); 
      List<Contact> contacts = db.getAllContacts(number); 
      for (Contact cn : contacts) { 
       String log = "Id: " + cn.getID() + " ,Name: " + cn.getName(); 
       // Writing Contacts to log 
       Log.d("Name: ", log); 
      } 
      db.close(); 
     } 
    } 
} 

を使用しました

私はこのコードを実行するとエラーが発生しました。"android.database.sqlite.SQLiteException:そのようなテーブルはありません:ANSWER:、コンパイル中に:SELECT * FROM ANSWER WHERE ID = 3"。私の正確な要件は、MainActivityクラスのボタンをクリックすると、入力された値がデータベースに渡されます。最後にデータベースを検索し、データベースに存在する対応する値を返します。例えば、私は2を入力し、データベースからボタンをクリックします。私は "オレンジ"を得るでしょう、これをどのように達成することができますか?前もって感謝します。

答えて

1

変数DB_NAME = "answers"にテーブル名を記述しましたが、クエリでテーブル名ANSWERにアクセスしようとしています。唯一のスペルミス。あなたは

"ID = ANSWER SELECT * FROM" を言及している。しかし、テーブル名が答えではない答えであるので、あなたが

"IDの答えSELECT * FROM"」として言及する必要があり、選択クエリで

+0

私はそれを変更しましたが、同じエラーが発生します – Aerrow

+1

非常に奇妙な、あなたのコードをクリーニングして再実行してください。私は見ることができる唯一のエラーです – Android

関連する問題