Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从内部SQLite数据库生成listview_Android_Sqlite - Fatal编程技术网

Android 从内部SQLite数据库生成listview

Android 从内部SQLite数据库生成listview,android,sqlite,Android,Sqlite,我希望从现有数据库中创建一个列表视图(尽管我看到的所有教程都是在代码中创建数据库的) 我有一个名为Favorites的内部SQLite数据库,它只包含用户最喜欢的运动的列表,如何将代码链接到该数据库,而不是每次创建一个新的数据库并将其链接到列表视图 非常感谢您无需在每次运行时创建数据库。SQLiteOpenHelper类只创建一次数据库。所以只需创建一个DatabaseAdapter来查询数据库 编辑: 创建一个类DatabaseAdapter,如下所示: public class Databa

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

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


非常感谢

您无需在每次运行时创建数据库。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方法仅在第一次创建数据库时调用。

您不需要在每次运行时创建数据库。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方法仅在第一次创建数据库时被调用。

这就是您想要的吗

希望这能有所帮助

要填充列表视图:

这就是您想要的吗

希望这能有所帮助


要填充列表视图:

假设您已经在
SQLite浏览器
或任何其他
SQLiteGUI工具
中创建了数据库

在包中创建一个
SQLHELPER
类。 只需复制粘贴下面的一个

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

 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;

    }


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

在创建之前为SQLHelper创建实例

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;
        }
}
召唤

在活动的存储区中

helper.close();
现在,您可以访问SQLHelper中定义的方法来从数据库中获取值

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

helper.getFavoriteSList()
将在游标中返回数据


使用
适配器
将光标数据绑定到
列表视图
。。(网上提供了各种教程,介绍如何将
列表视图
与数据库绑定)

假设您已在
SQLite浏览器
或任何其他
SQLite GUI工具
中创建了数据库

在包中创建一个
SQLHELPER
类。 只需复制粘贴下面的一个

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

 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;

    }


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

在创建之前为SQLHelper创建实例

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;
        }
}
召唤

在活动的存储区中

helper.close();
现在,您可以访问SQLHelper中定义的方法来从数据库中获取值

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

helper.getFavoriteSList()
将在游标中返回数据


使用
适配器
将光标数据绑定到
列表视图
。。(网上提供了各种教程如何将
listview
与数据库绑定)

再次创建数据库(该数据库而不是每次创建一个新数据库)是什么意思?现有数据库意味着什么?您是否使用SQLite Browser创建了一个数据库,并将其存储在assets文件夹中并尝试访问它?@gunaselan是的,没错,我想将其链接到ListView,然后查看从外部数据库访问数据的教程。和从数据库加载数据到listview的教程。再次创建数据库(该数据库而不是每次创建一个新数据库)是什么意思?现有数据库意味着什么?您是否使用SQLite Browser创建了一个数据库,并将其存储在assets文件夹中并尝试访问它?@gunaselan是的,没错,我想将其链接到ListView,然后查看从外部数据库访问数据的教程。以及从数据库将数据加载到listview的教程。非常感谢。那我该怎么做呢?非常感谢。那我该怎么做呢?那我该怎么把它链接到列表视图呢?你不是那种搜索谷歌的人;-)下面是代码:那么我如何将它链接到列表视图?你不是那种搜索谷歌的人;-)代码如下:我一直试图将helper.getFavoriteSList()链接到一个指向listview的游标,但它不起作用。。。。有什么提示吗?@ZachRyall您能在所需的活动中访问“helper.getFavoriteSList()”吗?我一直在尝试将helper.getFavoriteSList()链接到指向列表视图的光标,但它不起作用。。。。有什么提示吗?@ZachRyall您能在所需的活动中访问“helper.getFavoriteSList()”吗?