SQLiteDatabase已创建且从未关闭

时间:2011-04-04 05:32:51

标签: android

我希望根据从数据库在微调器中选择的城市名称显示位置名称但是它在微调器中显示城市名称并且我希望它根据在微调器中选择的城市显示位置用于城市选择我使用:: cur = myDataBase.rawQuery(“从CityType中选择cityName“,null);所以它在微调器中显示城市名称。值来自sqlite manager数据库保存在资源文件夹中..但是当我去选择位置它不显示保存在数据库中的任何位置,即微调器中的空白,所以下面没有显示的位置值是两个java类 DataBaseHelper.java和gqmain.java

package cabs.h;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.R.string;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
 public class DataBaseHelper extends SQLiteOpenHelper{
       //The Android's default system path of your application database.
     private static final int DATABASE_VERSION = 1;
        private static String DB_PATH = "/data/data/cabs.h/databases/";
     private static String DB_NAME = "CabBookingDatabase.sqlite";
     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, DATABASE_VERSION);
        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) {
           Log.v("DB Exists", "db exists");
           // By calling this method here onUpgrade will be called on a
           // writeable database, but only if the version number has been
           // bumped
           this.getWritableDatabase();
           }
           dbExist = checkDataBase();
           if (!dbExist) {
           // 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) {
        Log.w("tag", "Upgrading database from version which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS liberQuoti");
        onCreate(db);

   }

   public Cursor getcity()
   {
     String myPath = DB_PATH + DB_NAME;
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     Cursor cur ;
     cur = myDataBase.rawQuery("select cityName from CityType", null);
     int citynameIndex = cur.getColumnIndexOrThrow("cityName");
    //String valuecity = cur.getString(citynameIndex);
    //Log.d("No.of tweets,,,,,,,", valuecity );

    cur.moveToFirst();
  // Log.d("No.of tweets,,,,,,,", +accountnameIndex + "tgr" );


   return cur; 
   }
   **public Cursor getloc()
   {
     String myPath = DB_PATH + DB_NAME;
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     Cursor cur1;
     String saa = cabbookingapplication.Selection;
   //  String sql = " select CityType.rowid from CityType where CityType.cityName = "+saa;
     String sql = "SELECT CityType.rowid, Location.locationName FROM Location, CityType " +
     "WHERE Location.cityId = CityType.rowid " +
     "AND CityType.cityName = " + saa;
        //cur1 = myDataBase.rawQuery(
             //   " SELECT locationName FROM Location WHERE cityId in (" +sql+ ")",null);
     cur1 = myDataBase.rawQuery(
            sql, null);
     cur1.moveToFirst();


   return cur1;** 

   }
     public Cursor getservice()
   {
     String myPath = DB_PATH + DB_NAME;
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     Cursor cur3;
     cur3 = myDataBase.rawQuery("select serviceType from ServiceType", null);
     cur3.moveToFirst();
   return cur3; 
   }
   public Cursor getcabtype()
   {
     String myPath = DB_PATH + DB_NAME;
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     Cursor cur4;
     cur4 = myDataBase.rawQuery("select carType from CarType", null);
     cur4.moveToFirst();
     myDataBase.close();
   return cur4; 
   }
   public Cursor getcabservice()
   {
     String myPath = DB_PATH + DB_NAME;
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     Cursor cur5;
     cur5 = myDataBase.rawQuery("select cabFeatures from CabFeatures", null);
     cur5.moveToFirst();
     myDataBase.close();
   return cur5; 
   }
   public Cursor getday()
   {
     String myPath = DB_PATH + DB_NAME;
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     Cursor cur6;
     cur6 = myDataBase.rawQuery("select dayTravell from DayTravell", null);
     cur6.moveToFirst();
     myDataBase.close();
   return cur6; 
   }

 }
and gqmain.java is

package cabs.h;
import java.io.IOException;
import android.R.string;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
public class gqMain extends Activity {
public  Spinner spinner; 
public  Spinner spinner2; 
static String s13;
private SQLiteDatabase myDataBase;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cform2);
    DataBaseHelper mDbHelper = new DataBaseHelper(this);
    mDbHelper = new DataBaseHelper(this);
    try {

        mDbHelper.createDataBase();

    } catch (IOException ioe) {

        throw new Error("Unable to create database......");

    }

    try {

        mDbHelper.openDataBase();

    }catch(SQLException sqle){

        throw sqle;

    }
    spinner = (Spinner) findViewById(R.id.sp1);  
    spinner2 = (Spinner) findViewById(R.id.sp2); 
    ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    ArrayAdapter adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner2.setAdapter(adapter2);
    Bundle b = getIntent().getExtras();
    final int pos = (b != null)?b.getInt("pos"):-1;

    Button button1 = (Button) findViewById(R.id.btn1);

    cabbookingapplication.Selection = (String)spinner.getSelectedItem();
    cabbookingapplication.Selection2 = (String)spinner2.getSelectedItem();
  button1.setOnClickListener(new View.OnClickListener() {

      public void onClick(View view) {
          //cabbookingapplication cab = new cabbookingapplication();

          cabbookingapplication.Selection = (String)spinner.getSelectedItem();
         String s11= cabbookingapplication.Selection;
          cabbookingapplication.Selection2 = (String)spinner2.getSelectedItem();
          String s12= cabbookingapplication.Selection2;
        EditText mTitleText1 = (EditText) findViewById(R.id.etext1);
         cabbookingapplication.Selection3 =( mTitleText1.getText().toString());
        String s13= cabbookingapplication.Selection3;

        EditText mTitleText2 = (EditText) findViewById(R.id.etext2);
        cabbookingapplication.Selection4 =( mTitleText2.getText().toString());
        String s14= cabbookingapplication.Selection4;
        String ff= s11+","+s12+s13+s14;



//        SharedPreferences settings = getSharedPreferences(PREFS_NAME,0);
//       mTitleText1.setText(String.valueOf(settings.getString("exactadd"," ")));
//          mTitleText2.setText(String.valueOf(settings. getString("nearby"," ")));
//       Editor ed = settings.edit(); 
//         ed.putString("exactadd",mTitleText1.getText().toString());
//         ed.putString("nearby",mTitleText2.getText().toString());
//         ed.commit();
         setResult(RESULT_OK);


         System.out.println("On Submit button Click.......");
         Intent i = new Intent(gqMain.this, ListActivity.class);
         System.out.println("text send ===== "+ff);
         //return edit text value along wid position of list item
         i.putExtra("text", ff);
         i.putExtra("pos", pos);
            startActivity(i);




      }

  });

    try{
         Cursor cur = mDbHelper.getcity(); 

         this.startManagingCursor(cur);
         int accountnameIndex = cur.getColumnIndexOrThrow("cityName");
        if(cur.moveToFirst()){
            do{
                //adapterForSpinner.add(c.getString(firstnameColumnIndex) + "aged " + c.getShort(ageColumnIndex)); 
                adapter.add(cur.getString(accountnameIndex));
            } while(cur.moveToNext());
        }

    } finally {

    }
    try{
     Cursor cur1 = mDbHelper.getloc(); 

     this.startManagingCursor(cur1);
     int accountnameIndex = cur1.getColumnIndexOrThrow("locationName");
       if(cur1.moveToFirst()){
           do{
            //adapterForSpinner.add(c.getString(firstnameColumnIndex) + "aged " + c.getShort(ageColumnIndex)); 
               adapter2.add(cur1.getString(accountnameIndex));
           } while(cur1.moveToNext());
       }

   } finally {

   }

   }
    }

所以该做什么?因为价值也会根据所选择的城市在位置微调器中显示..

我也在getloc()

中尝试了这个查询
String sql = "select CityType.rowid from CityType where CityType.cityName = "
    + saa;
cur1 = myDataBase.rawQuery(
    "SELECT locationName FROM Location WHERE cityId in (" + sql + ")", null);

1 个答案:

答案 0 :(得分:0)

   this.getWritableDatabase();
   }
   dbExist = checkDataBase();

   if (!dbExist) {
   // 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.
   SqlLiteDatabase db=this.getReadableDatabase();
   //CLOSE DATABSE HERE
   db.close();

在代码中查看我的评论。