gpt4 book ai didi

android - 从内部 SQLite 数据库制作 ListView

转载 作者:行者123 更新时间:2023-11-30 03:40:11 25 4
gpt4 key购买 nike

我正在寻找从现有数据库创建一个ListView(尽管我看到的所有教程都是在代码中创建一个数据库)

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

非常感谢

最佳答案

假设您已经在 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 文件夹中(这里我在文件夹数据库中进一步创建了一个步骤)

enter image description here

onCreate 之前为 SQLHelper 创建实例

SQLHelper helper=null;

然后在您的 Activity 的 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;
}
}

打电话

在 Activity 的onDestroy

helper.close();

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

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

helper.GetFavouritesList() 将返回 Cursor 中的数据....

使用Adapter将游标数据绑定(bind)到Listview..(网上有各种教程如何绑定(bind)listview与数据库)

关于android - 从内部 SQLite 数据库制作 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15877880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com