了解Android.com&s&在SQL数据库中保存数据教程 [英] Understanding Android.com's "Saving Data in SQL Databases" Tutorial

查看:34
本文介绍了了解Android.com&s&在SQL数据库中保存数据教程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在阅读本教程:http://developer.android.com/training/basics/data-storage/databases.html,它提出了很多问题。

这是我在学习本教程时编写的代码:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;

public final class SongDbHelper extends SQLiteOpenHelper {
    // If you change the database schema, you must increment the database version.
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "Song.db";
    private static final String TEXT_TYPE = " TEXT";
    private static final String PRIMARY_KEY_TYPE = " INTEGER PRIMARY KEY";
    private static final String COMMA_SEP = ",";
    private static final String SQL_CREATE_ENTRIES =
            "CREATE TABLE " + SongEntry.TABLE_NAME + " (" +
                    SongEntry._ID + PRIMARY_KEY_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_SONG_TITLE + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_ENGLISH_LYRICS + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_ROMAJI_LYRICS + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_KANJI_LYRICS + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_INFO + TEXT_TYPE +
            " )";
    private static final String SQL_DELETE_ENTRIES =
            "DROP TABLE IF EXISTS " + SongEntry.TABLE_NAME;

    public SongDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_ENTRIES);
    }
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // This database is only a cache for online data, so its upgrade policy is
        // to simply to discard the data and start over
        db.execSQL(SQL_DELETE_ENTRIES);
        onCreate(db);
    }
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        onUpgrade(db, oldVersion, newVersion);
    }


    public static abstract class SongEntry implements BaseColumns {
        public static final String TABLE_NAME = "Song";
        public static final String COLUMN_NAME_SONG_TITLE = "song_title";
        public static final String COLUMN_NAME_ENGLISH_LYRICS = "english_lyrics";
        public static final String COLUMN_NAME_ROMAJI_LYRICS = "romaji_lyrics";
        public static final String COLUMN_NAME_KANJI_LYRICS = "kanji_lyrics";
        public static final String COLUMN_NAME_INFO = "info";

    }
}
  1. 我们是否应该在应用每次打开时都调用SongDbHelper.onCreate()?(我设想将其放入我的主活动的onCreate()方法中。

  2. 如果您多次调用SongDbHelper.onCreate(),它是重新创建表,还是SongDbHelper.onCreate()只是静默正常失败?

  3. APP为什么要调用SongDbHelper.onCreate()呢?如果我将我的应用放到应用商店上,难道我不会只让人们下载我已经填满数据的数据库吗?

  4. 何时/在我的应用程序中调用SongDbHelper.onUpgrade()?我假设当用户注意到"这个应用程序有可用的更新。点击这里下载它"或类似的东西时,就会发生这种情况。我只是感到困惑,因为我假设用户只是下载了一个数据库完好无损的.db文件,因此不需要调用SongDbHelper.onCreate()

  5. 如果APP必须调用SongDbHelper.onCreate(),它如何在数据库中填充值?我认为如果我还有填充值的代码,这将违背数据库的目的,因为这样值就会重复(在代码数据库中)。

  6. 向数据库填充值的最佳方式是什么?使用终端,或以编程方式在应用程序之外的单独程序中,还是仅在Android应用程序中?

推荐答案

答案:

第1,2,3点:正如您在this link所遵循的教程中简单提到的,我们不应该调用SongDbHelper.onCreate()。当我们要从Helper类引用数据库时,我们使用CONSTUCTOR,而不是它:

SongDbHelper mDbHelper = new SongDbHelper(getContext());
// this will call super method internally and
// this will create table in database

第四点:onUpgrade()也不是我们明确要求的责任。当我们更改数据库模式时,我们会更新DATABASE_VERSION,Android框架将在内部为我们调用onUpgrade()

第五点:您可以从xmldatabase逐个存储歌词。据我所知,这条路是对的

更新:

最好的方法是在之前download it from the web server创建的Web服务器上store your database,并使应用程序然后读/写到数据库。此不会违背数据库的用途,而且不会重复数据库条目和代码条目(XML)。除此之外,您应用程序大小也会更小,因为应用程序将在运行时下载数据库,而不是最初存储在设备内存中

这篇关于了解Android.com&s&在SQL数据库中保存数据教程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆