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()”吗?