繁体   English   中英

如何在Android中使用SQLite数据库从数据库中选择数据?

[英]how to select data from database using SQLite database in android?

我是Android开发的新手,想使用Assets文件夹中的.sq3文件选择数据并预填充SQLite数据库,但是在其路径上出现异常。 所以我该怎么做? 这是我的代码。

package com.wiztech.wahab;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.ContentValues;
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;

public class DataBaseManager extends SQLiteOpenHelper{

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


// private static String DB_NAME = "BlueConnect.sq3";
 private static String DB_NAME = "database.sq3";



private SQLiteDatabase myDataBase; 
private SQLiteDatabase myData; 

private final Context myContext;

public DataBaseManager(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{  
        CopyFiles();
    }
}


private void CopyFiles()
{
    try
    { 
       InputStream is = myContext.getAssets().open(DB_NAME); 
       File outfile = new File(DB_PATH,DB_NAME);
       outfile.getParentFile().mkdirs();
       outfile.createNewFile();

      if (is == null)
      throw new RuntimeException("stream is null");
      else
      {
         FileOutputStream out = new FileOutputStream(outfile);      
      // BufferedOutputStream out = new BufferedOutputStream( new       FileOutputStream(outfile));
          byte buf[] = new byte[128];
            do {
          int numread = is.read(buf);
                if (numread <= 0)
                    break;
          out.write(buf, 0, numread);
           } while (true);

            is.close();
            out.close();
      }
       //AssetFileDescriptor af = am.openFd("world_treasure_hunter_deluxe.apk");
    }
    catch (IOException e)
    {
          throw new RuntimeException(e); 
    }

}    

/**
 * 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){

    }

    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.
 * */
@SuppressWarnings("unused")
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) {

}


//---retrieve records---
public Cursor selectQuery(String query) throws SQLException 
{
    String myPath = DB_PATH + DB_NAME;
    //myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    myData =  SQLiteDatabase.openDatabase(myPath,null, SQLiteDatabase.CREATE_IF_NECESSARY); 
    Cursor mCursor =myData.rawQuery(query, null);
    mCursor.moveToFirst();      
    myData.close();
    return mCursor;
}


////////// For Insert And Update Data ////////
public void insert_update(String query) throws SQLException 
{
    String myPath = DB_PATH + DB_NAME;
    myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    myData.execSQL(query);
    myData.close();        
}

public boolean UpdateVote_Individual(String rowid,String value,String count) {
    String myPath = DB_PATH + DB_NAME;
    myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

      ContentValues args = new ContentValues();
      args.put("total_votes", count);
      return myData.update("promotors", args, 
              "promoter_id='" + rowid+"'", null) > 0;           
  }


}






package com.wiztech.wahab;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Criteria_Activity extends Activity {

DataBaseManager db;
Cursor cur;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.out.println("reached inside Criteria_Activity");
    setContentView(R.layout.criteria);

    db = new DataBaseManager(getBaseContext());
    cur = db.selectQuery("select * from  client_table1;");

    if(cur.moveToFirst()) {

        do {

            String age = cur.getString(1);
            String gender = cur.getString(2);
            String prof = cur.getString(3);
            String hobby = cur.getString(4);
            String likes = cur.getString(5);
            String dislikes = cur.getString(6);

            TextView ag = (TextView) findViewById(R.id.age_value);
            if(age.length()==0||age==""){
                age="Not Saved";
                ag.setTextSize(16);
                ag.setTextColor(Color.GRAY);
            }
            ag.setText(age);

            TextView gend = (TextView) findViewById(R.id.gender_value);
            if(gender.length()==0||gender==""){
                gender="Not Saved";
                gend.setTextSize(16);
                gend.setTextColor(Color.GRAY);
            }
            gend.setText(gender);

            TextView pr = (TextView) findViewById(R.id.prof_value);
            if(prof.length()==0||prof==""){
                prof="Not Saved";
                pr.setTextSize(16);
                pr.setTextColor(Color.GRAY);
            }
            pr.setText(prof);

            TextView hobbie = (TextView) findViewById(R.id.hobby_value);
            if(hobby.length()==0||hobby==""){
                hobby="Not Saved";
                hobbie.setTextSize(16);
                hobbie.setTextColor(Color.GRAY);
            }
            hobbie.setText(hobby);

            TextView lykes = (TextView) findViewById(R.id.likes_value);
            if(likes.length()==0||likes==""){
                likes="Not Saved";
                lykes.setTextSize(16);
                lykes.setTextColor(Color.GRAY);
            }
            lykes.setText(likes);

            TextView dislykes = (TextView) findViewById(R.id.dislikes_value);
            if(dislikes.length()==0|| dislikes==""){
                dislikes="Not Saved";
                dislykes.setTextSize(16);
                dislykes.setTextColor(Color.GRAY);
            }
            dislykes.setText(dislikes);

        }while(cur.moveToNext());
        cur.close();
    }//end if(cur.moveToFirst..........

    Button criteria_edit_btn = (Button) findViewById(R.id.cr_edit_btn);

    criteria_edit_btn.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent update_criteria_intent = new Intent(getParent(),    Edit_Criteria_Activity.class);
            TabGroupActivity parentActivity = (TabGroupActivity)getParent();
            parentActivity.startChildActivity("Edit_Criteria_Activity", update_criteria_intent);
        }           
    });

}// end onCreate

 }//end this.Activity

好吧,只需阅读日志中的内容即可。 您正在对client_table1进行选择,但该表不存在。 您首先必须创建表。

请阅读本教程,了解如何通过使用SQLiteOpenHelper类在Android上使用sqlite:

http://www.vogella.de/articles/AndroidSQLite/article.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM