SQLite数据库

作者: 于无声处写写写 | 来源:发表于2018-07-08 11:07 被阅读9次

    通过SQLiteOpenHelper类可以实现对数据库的创建和升级。首先,SQLiteOpenHelper是一个抽象类,如果要使用这个类,只能通过创建一个帮助类去继承他。这个抽象类中有两个抽象方法,onCreate()和onUpgrade(),我们需要在自己的类中实现并重写这两个方法,然后在这两个方法中去创建和升级数据库的逻辑。

    SQLiteOpenHelper类中还有两个非常重要的实例方法,getWritableDatabase()和getReadableDatabase(),这两个方法都能够创建或者打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象,当磁盘空间已经满的时候,getReadableDatabase()方法返回的对象将以只读的方式打开数据库,getWritableDatabase()方法将出现异常。

    SQLiteOpenHelper类有两个可以用的构造方法,一般用参数比较少的那个。
    SQliteOpenHelper(Context context,"databasename",null,"version of database"){}

    实例

    创建一个名为book的数据库

    • 新建一个类继承自SQLiteHelper,要重写里面的主要方法,同时在onCreate()方法中执行SQL语句。
    package ouc.b304.com.sqlitetest;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
    public class MySQLite extends SQLiteOpenHelper {
    
        private static final String TAG="DATABASE";
        private static final String CREATETABLE="create table book("+" id integer primary key autoincrement,"+"author text"+"price real"+"pages integer"+"name text)";
    
    
    
        public MySQLite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
    
    
    
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
            sqLiteDatabase.execSQL(CREATETABLE);
            Log.d(TAG,"is created");
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    
        }
    }
    
    • 在MainActivity中实现布局和逻辑
    package ouc.b304.com.sqlitetest;
    
    import android.database.sqlite.SQLiteOpenHelper;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button button = findViewById(R.id.btn_createdatabase);
            final SQLiteOpenHelper myHelper = new MySQLite(getApplicationContext(), "book", null, 1);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    myHelper.getWritableDatabase();
                }
            });
        }
    
    }
    
    • 在实例化自己的SQLiteHelper类以后,要通过getWritableDatabase()方法才能得到数据库实例。
    • 如果数据库已经成功创建,那么再次点击创建的时候,数据库不会重复创建。

    对数据库进行升级

    如果想要在数据库中再次添加一张表,可以通过在自建SQLiteHelper类中的onUpgrade()方法中添加逻辑实现,并不能在onCreate()方法中添加逻辑实现新表的创建,同时应该在onUpgrade()方法中进行逻辑的判断,因为前提是数据库的表从来没有新建过,如果一旦onCreate()方法执行过一次之后,那么再次修改onCreate()方法是无用的。

    如果想实现数据库的升级,应当在MainActivity中创建MyHelper实例的时候把versioncode更改为比1大的数。

    相关文章

      网友评论

        本文标题:SQLite数据库

        本文链接:https://www.haomeiwen.com/subject/xugnuftx.html