Click here to Skip to main content
15,881,248 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
I am new to the coding. I want to take input from the user and the input will be an integer value.
ex: if input is 5
I want to execute select statement where in the query will return everything in the 5th row of a table in the database.
How can i achieve this? I have copied my database to assets folder and have the following code.
Java
package com.example.c;

import java.io.IOException;

import android.os.Bundle;
import android.app.Activity;
import android.database.SQLException;
import android.view.Menu;

public class C extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.c);
      DataBaseHelper myDbHelper = new DataBaseHelper(this);
      try {
         myDbHelper.createDataBase();
      }
      catch (IOException ioe) {
         throw new Error("Unable to create database");
      }
      try {
         myDbHelper.openDataBase();
      }
      catch (SQLException sqle) {
         throw sqle;
      }
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.c, menu);
      return true;
   }
}


and the DataBaseHelper class is as below
Java
package com.example.c;

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.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class DataBaseHelper extends SQLiteOpenHelper {
   //The Android's default system path of your application database.
   private static String DB_PATH = "/data/data/com.example.c/databases/";
   private static String DB_NAME = "MyDatabase";
   private SQLiteDatabase myDataBase;
   private final Context myContext;

   /**
   * Constructor
   * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
   * @param context
   */
   public DataBaseHelper(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 {
         String 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
      String 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.
}


For the above code, i am not able to execute any queries. The emulator shows it stopped. From the DDMS view->file explorer-> selecting the package->databases, i found the database copied but it only consists of android_metadata table. The tables in my database are not in it.
Posted
Updated 21-Sep-13 22:24pm
v3

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900