Android SQLite 示例 [关闭]

Posted

技术标签:

【中文标题】Android SQLite 示例 [关闭]【英文标题】:Android SQLite Example [closed] 【发布时间】:2012-08-14 11:43:56 【问题描述】:

我是 android 新手,我必须创建一个需要使用 SQLite 数据库的应用程序。 我对 SQLite 的装备不太好。

能否告诉我SQLiteOpenHelper类的用途和用途,并提供一个简单的数据库创建和插入示例?

【问题讨论】:

sqlite-tutorial 技术太多了。我没有时间回忆它到底是什么,所以赞成。 【参考方案1】:

Sqlite 帮助类帮助我们管理数据库创建和版本管理。 SQLiteOpenHelper 负责所有数据库管理活动。要使用它, 1.覆盖SQLiteOpenHelperonCreate(), onUpgrade()方法。可选择覆盖 onOpen() 方法。 2.使用该子类创建可读或可写数据库,并使用 SQLiteDatabase 的四个 API 方法insert(), execSQL(), update(), delete() 来创建、读取、更新和删除表的行。

创建 MyEmployees 表并选择和插入记录的示例:

public class MyDatabaseHelper extends SQLiteOpenHelper 

    private static final String DATABASE_NAME = "DBName";

    private static final int DATABASE_VERSION = 2;

    // Database creation sql statement
    private static final String DATABASE_CREATE = "create table MyEmployees
                                 ( _id integer primary key,name text not null);";

    public MyDatabaseHelper(Context context) 
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    

    // Method is called during creation of the database
    @Override
    public void onCreate(SQLiteDatabase database) 
        database.execSQL(DATABASE_CREATE);
    

    // Method is called during an upgrade of the database,
    @Override
    public void onUpgrade(SQLiteDatabase database,int oldVersion,int newVersion)
        Log.w(MyDatabaseHelper.class.getName(),
                         "Upgrading database from version " + oldVersion + " to "
                         + newVersion + ", which will destroy all old data");
        database.execSQL("DROP TABLE IF EXISTS MyEmployees");
        onCreate(database);
    

现在你可以像下面这样使用这个类了,

public class MyDB  

    private MyDatabaseHelper dbHelper;  

    private SQLiteDatabase database;  

    public final static String EMP_TABLE="MyEmployees"; // name of table 

    public final static String EMP_ID="_id"; // id value for employee
    public final static String EMP_NAME="name";  // name of employee

    /** 
     * 
     * @param context 
     */  
    public MyDB(Context context)  
        dbHelper = new MyDatabaseHelper(context);  
        database = dbHelper.getWritableDatabase();  
    


    public long createRecords(String id, String name)  
        ContentValues values = new ContentValues();  
        values.put(EMP_ID, id);  
        values.put(EMP_NAME, name);  
        return database.insert(EMP_TABLE, null, values);  
        

    public Cursor selectRecords() 
        String[] cols = new String[] EMP_ID, EMP_NAME;  
        Cursor mCursor = database.query(true, EMP_TABLE,cols,null  
            , null, null, null, null, null);  
        if (mCursor != null)   
            mCursor.moveToFirst();  
          
        return mCursor; // iterate to get each value.
    

现在您可以在活动中使用 MyDB 类来进行所有数据库操作。创建记录将帮助您插入值,类似地您可以拥有自己的更新和删除函数。

【讨论】:

非常感谢您为我提供了数据库的演示骨架。它真的非常有用和高效,足以回答我的相关查询。再次感谢.. 问候 :) @JJPA - 使用 SQLiteOpenHelper 导致我的应用程序在 android 2.X 上失败并出现错误 CREATE TABLE android_metadata failed ... 在 4.x 上工作正常 + 知道如何解决这个问题吗? @user1492955 This 可能会对您有所帮助。 @JJPA - 这个问题是我发布的,我没有得到回复 这是我编写/使用的一个包装器,它使在 android 环境中使用 SQLite 变得稍微容易一些 - SqlDb【参考方案2】:

以下链接对你有帮助

1. Android Sqlite Database

2. Tutorial 1

数据库助手类:

管理数据库创建和版本管理的帮助类。

您创建一个实现onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabase, int, int) 和可选的onOpen(SQLiteDatabase) 的子类,该类负责打开数据库(如果存在),如果不存在则创建它,并根据需要对其进行升级。事务用于确保数据库始终处于合理状态。

此类使ContentProvider 实现可以轻松地将数据库的打开和升级推迟到第一次使用,以避免因长时间运行的数据库升级而阻塞应用程序启动。

你需要更多参考这个链接Sqlite Helper

【讨论】:

tuturial_2 离线。【参考方案3】:

DBHelper 类负责处理 sqlite 数据库的打开和关闭以及创建和更新,关于它如何工作的一篇不错的文章是 here。当我开始使用 android 时,它非常有用(但是我最近一直在使用 Objective-c,并且忘记了它的大部分用途。

【讨论】:

【参考方案4】:

使用 Helper 类,您可以访问 SQLite 数据库,并可以通过覆盖 onCreate() 和 onUpgrade() 方法对其执行各种操作。

http://technologyguid.com/android-sqlite-database-app-example/

【讨论】:

以上是关于Android SQLite 示例 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

支持 UPSERT 的 Android SQLite ORM? [关闭]

在 Android SQLite 中处理日期的最佳方式 [关闭]

什么是 SQLite?可以放音频文件并与android一起使用吗? [关闭]

Android SQLite DB 何时关闭

Android - 关闭数据库后可以使用 SQLite 光标吗?

从 Android Studio 浏览 SQLite 数据库 [关闭]