1

我希望ListView从现有数据库中创建一个(尽管我看到的所有教程都在代码中创建了一个数据库)

我有一个名为 Favorites 的内部 SQLite 数据库,它只包含用户最喜欢的运动列表,如何将代码链接到该数据库,而不是每次都创建一个新数据库并将其链接到一个Listview

非常感谢

4

3 回答 3

1

假设您已经在SQLite Browser或任何其他SQLiteGUI Tool...

在 中创建一个SQLHELPERYour package。只需复制粘贴下面的一个

只需在行中添加您的详细信息

 private static String DB_PATH="data/data/com.AZone.egba/databases/";

    //replace it(com.AZone.egba) with your package name

    //Create a folder named "Database" inside assets folder
    private static final String DATABASE_NAME="abc.db"; // your database name here

其余的班级会记住相同的

package com.AZone.egba.SqlHelper;

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

import android.R.string;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.SQLException;
import android.media.JetPlayer.OnJetEventListener;
import android.util.Log;
import android.widget.Toast;

public class SQLHelper extends SQLiteOpenHelper {

    private static String DB_PATH="data/data/com.AZone.egba/databases/";

    //replace it(com.AZone.egba) with your package name

    //Create a folder named "Database" inside assets folder
    private static final String DATABASE_NAME="abc.db"; // your database name here
    private static final String DATABASE_PATH_ASSETS="Database"+File.separator;
    private static final int SCHEMA_VERSION=1;

    public SQLiteDatabase myDataBase;
    private final Context myContext;



    public SQLHelper(Context context) {
        super(context, DATABASE_NAME,null,SCHEMA_VERSION);
        this.myContext=context;
        // TODO Auto-generated constructor stub
    }

    public void createDataBase() throws IOException{
        boolean dbExist=checkDatabase();

        if(dbExist){

        }
        else {
            this.getReadableDatabase();
            try{

                copyDataBase();

            }catch (IOException e) {
                throw new Error("Error Copying Database");
            }
        }
    }

    private boolean checkDatabase(){
        SQLiteDatabase checkDB=null;
        try{
            String myPath=DB_PATH+DATABASE_NAME;
            checkDB=SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

        }
        catch (SQLiteException e) {
            // TODO: handle exception
        }

        if(checkDB!=null){
            checkDB.close();
        }
        return checkDB !=null?true:false;
    }

    private void copyDataBase() throws IOException{
        InputStream myInput= myContext.getAssets().open(DATABASE_PATH_ASSETS+DATABASE_NAME);
        String outFileName=DB_PATH+DATABASE_NAME;
        OutputStream myOutput=new FileOutputStream(outFileName);
        byte[] buffer=new byte [1024];
        int length;
        while((length=myInput.read(buffer))>0){
            myOutput.write(buffer,0,length);
        }

        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

    public void openDataBase() throws SQLException {
        String mypath= DB_PATH+DATABASE_NAME;
        myDataBase=SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);
    }
     @Override
        public synchronized void close() {

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

        }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub


    }



/////////////////////////////////////////CUSTOM FUNCTIONS/////////////////////////////////////////////  




    public Cursor GetFavouritesList(){

        try
        {
            return(getReadableDatabase().rawQuery("SELECT _id,Name,Code FROM tblfavourites",null));
        }
        catch(SQLiteException e)
        {
            Log.e("tblfavourites", e.toString());
        }
        return null;

    }


}

为了使其工作,您必须将数据库保存在资产文件夹中(这里我在文件夹数据库中创建了进一步的步骤)

在此处输入图像描述

之前为 SQLHelper 创建实例onCreate

SQLHelper helper=null;

然后在您的活动的 onCreate() 中调用以下方法

public void initialazeDatabase()
{
helper=new SQLHelper(this);

        try{
            helper.createDataBase();
        }catch (IOException ioe) {
            throw new Error("Unable To Create Database");
        }
        try{
             helper.openDataBase();
        }catch (SQLException sqle) {
            throw sqle;
        }
}

称呼

onDestroy活动中

helper.close();

现在您可以访问 SQLHelper 中定义的方法以从数据库中获取值

helper.GetFavouritesList()在任何地方 使用

helper.GetFavouritesList()将在光标中返回数据....

用于Adapter将游标数据绑定到List view..(网上有各种教程如何绑定listview数据库)

于 2013-04-08T11:49:59.640 回答
0

您不需要在每次运行时都创建数据库。SQLiteOpenHelper 类只创建一次数据库。所以只需创建一个 DatabaseAdapter 来查询数据库。

编辑:

创建一个类 DatabaseAdapter,如下所示:

public class DatabaseAdapter {
    protected SQLiteDatabase database;  
    public DatabaseAdapter(Context context) {
        MyDatabaseHelper databaseHelper = new MyDatabaseHelper(context, "my_db");
        database = databaseHelper.getWritableDatabase();        
    }

    protected class MyDatabaseHelper extends SQLiteOpenHelper {
        public MyDatabaseHelper(Context context, String name) {
            super(context, name, null, 1);
        } 

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_DATABASE_QUERY);
        }

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

    // Your methods that works with database comes here
}

MyDatabaseHelper 类的 onCreate 方法仅在第一次创建数据库时被调用。

于 2013-04-08T11:31:24.820 回答
0

那是你要的吗?

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

希望这能有所帮助。

并填写列表视图:http ://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

于 2013-04-08T11:43:51.897 回答