谁能解释一下android数据库创建数据库时的工作流程

发布于 2025-01-02 18:12:36 字数 3488 浏览 1 评论 0原文

流动的包是关于数据库连接类的。它创建一个数据库,并包含一些其他方法。但我不太清楚它是如何工作的,以及工作流程是什么。有人可以向我解释一下吗?

package panda.com.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.*;
import android.util.Log;
import android.database.sqlite.*;

public class DBAdapter{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_ISBN = "isbn";
    public static final String KEY_TITLE = "title";
    public static final String KEY_PUBLISHER = "publisher";
    private static final String TAG = "DBAdapter";
    private static final String DATABASE_NAME = "books";
    private static final String DATABASE_TABLE = "titles";
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_CREATE =
    "create table titles (_id integer primary key autoincrement, "
    + "isbn text not null, title text not null, "
    + "publisher text not null);";
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx){
        this.context=ctx;
        DBHelper=new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper{
        DatabaseHelper(Context context){
            super(context,DATABASE_NAME,null,DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db){
            db.execSQL(DATABASE_CREATE);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
            Log.w(TAG, "Upgrading database from version " + oldVersion + "to" + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS titles");
            onCreate(db);
        }
    }
    public DBAdapter open() throws SQLException
    {
        db=DBHelper.getWritableDatabase();
        return this;
    }
    public void close(){
        DBHelper.close();
    }
    public long insertTitle(String isbn, String title, String publisher){
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ISBN, isbn);
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_PUBLISHER, publisher);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }
    public boolean deleteTitle(long rowId){
        return db.delete(DATABASE_TABLE, KEY_ROWID+"="+rowId, null)>0;
    }
    public Cursor getAlltitles(){
        return db.query(DATABASE_TABLE, new String[]{
                KEY_ROWID,
                KEY_ISBN,
                KEY_TITLE,
                KEY_PUBLISHER
        }, null, null, null, null, null);
    }
    public Cursor getTitle(long rowId) throws SQLException
    {
        Cursor mCursor = 
                db.query(true, DATABASE_TABLE, new String[]{
                        KEY_ROWID,
                        KEY_ISBN,
                        KEY_TITLE,
                        KEY_PUBLISHER
                }, KEY_ROWID+"="+rowId, null, null, null, null, null);
        if(mCursor != null){
            mCursor.moveToFirst();
        }
        return mCursor;
    }
    public boolean updateTitle(long rowId, String isbn,String title,String publisher)
    {
        ContentValues args=new ContentValues();
        args.put(KEY_ISBN, title);
        args.put(KEY_TITLE, title);
        args.put(KEY_PUBLISHER, publisher);
        return db.update(DATABASE_TABLE, args, KEY_ROWID+"="+rowId, null)>0;
    }
}

The flowing package is about a database connection class. It create a database, and contains some other methods. But I am not really clear how it works, and what the workflow is.Can anyone explain it to me?

package panda.com.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.*;
import android.util.Log;
import android.database.sqlite.*;

public class DBAdapter{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_ISBN = "isbn";
    public static final String KEY_TITLE = "title";
    public static final String KEY_PUBLISHER = "publisher";
    private static final String TAG = "DBAdapter";
    private static final String DATABASE_NAME = "books";
    private static final String DATABASE_TABLE = "titles";
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_CREATE =
    "create table titles (_id integer primary key autoincrement, "
    + "isbn text not null, title text not null, "
    + "publisher text not null);";
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx){
        this.context=ctx;
        DBHelper=new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper{
        DatabaseHelper(Context context){
            super(context,DATABASE_NAME,null,DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db){
            db.execSQL(DATABASE_CREATE);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
            Log.w(TAG, "Upgrading database from version " + oldVersion + "to" + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS titles");
            onCreate(db);
        }
    }
    public DBAdapter open() throws SQLException
    {
        db=DBHelper.getWritableDatabase();
        return this;
    }
    public void close(){
        DBHelper.close();
    }
    public long insertTitle(String isbn, String title, String publisher){
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ISBN, isbn);
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_PUBLISHER, publisher);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }
    public boolean deleteTitle(long rowId){
        return db.delete(DATABASE_TABLE, KEY_ROWID+"="+rowId, null)>0;
    }
    public Cursor getAlltitles(){
        return db.query(DATABASE_TABLE, new String[]{
                KEY_ROWID,
                KEY_ISBN,
                KEY_TITLE,
                KEY_PUBLISHER
        }, null, null, null, null, null);
    }
    public Cursor getTitle(long rowId) throws SQLException
    {
        Cursor mCursor = 
                db.query(true, DATABASE_TABLE, new String[]{
                        KEY_ROWID,
                        KEY_ISBN,
                        KEY_TITLE,
                        KEY_PUBLISHER
                }, KEY_ROWID+"="+rowId, null, null, null, null, null);
        if(mCursor != null){
            mCursor.moveToFirst();
        }
        return mCursor;
    }
    public boolean updateTitle(long rowId, String isbn,String title,String publisher)
    {
        ContentValues args=new ContentValues();
        args.put(KEY_ISBN, title);
        args.put(KEY_TITLE, title);
        args.put(KEY_PUBLISHER, publisher);
        return db.update(DATABASE_TABLE, args, KEY_ROWID+"="+rowId, null)>0;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

这样的小城市 2025-01-09 18:12:36

您有 2 个类 -

  1. DatabaseHelper - 此类负责创建您的数据库并在需要时升级它(如果 newVersion > oldVersion,onUpgrade 方法将执行)。

  2. DBAdapter 类包含用于从数据库插入、更新和获取记录的方法。这些方法与它们计划使用的特定数据库相关,而不是 DatabaseHelper 方法,后者是 sqlite DB 的通用方法。

我希望它能帮助你

You have 2 classes -

  1. DatabaseHelper - this class is responsible for creating Your db and upgrading it if needed (onUpgrade method will execute if newVersion > oldVersion).

  2. DBAdapter class contains method for inserting, updating and fetching records from the DB. These methods are relevant for the specific DB they were planned to work with, as opposed to DatabaseHelper methods, which are generic to sqlite DB.

I hope it helps You

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文