• Android下创建一个SQLite数据库


    数据库:SQLite(轻量级,嵌入式的数据库)

    大量的相似结构的数据的储存,快速的查询。特殊的文件(按照一定的格式生成)

    数据库的创建

    创建文件

    1.声明文件对象,文件是不会被创建出来的。

    File file = new File("文件名称");

    2.写文件(文件才会被创建出来)

    FileOutputStream fos = new FileOutputStream(file);

    fos.write("hdahfdsaklfh".getbytes());

    创建数据库

    1.实现SQLiteOpenHelper的子类PersonSQLiteOpenHelper

    public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
    
        public PersonSQLiteOpenHelper(Context context, String name,
                CursorFactory factory, int version) {
            super(context, name, factory, version);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void onCreate(SQLiteDatabase arg0) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
    
        }
    }

    SQLiteOpenHelper的几个参数的解释如下:

    android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)
    
    Create a helper object to create, open, and/or manage a database. This method always returns very quickly. The database is not actually created or opened until one of getWritableDatabase or getReadableDatabase is called.
    
    Parameters:
    context to use to open or create the database
    name of the database file, or null for an in-memory database
    factory to use for creating cursor objects, or null for the default
    version number of the database (starting at 1); if the database is older, onUpgrade will be used to upgrade the database; if the database is newer, onDowngrade will be used to downgrade the database

    2.getWritableDatabase/getReadableDatabase()

    新建TestPersonDB.java

    package com.wuyudong.db.test;
    
    import com.wuyudong.db.PersonSQLiteOpenHelper;
    
    import android.test.AndroidTestCase;
    
    public class TestPersonDB extends AndroidTestCase {
        public void testCreateDB() throws Exception {
            PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext());
            helper.getWritableDatabase();
        }
    }

    3.onCreate() 数据库第一次创建的执行的方法,适合做数据库表结构的初始化

        // Called when the database is created for the first time.
        // 在数据库第一次创建的时候执行的方法
        // 如果数据库已经创建完毕,就不会再去执行了。
        // 适合做数据库表结构的初始化操作
        // db代表的就是当前的数据库
        @Override
        public void onCreate(SQLiteDatabase db) {
            // 初始化数据库的表结构
            db.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))");
        }

    注意:

    sqlite数据库是一个嵌入式轻量级的数据库,内部不区分数据类型的,不对数据的长度校验。

    新建AndroidTest工程test

    将AndroidManifest.xml中的如下相关的代码复制到本项目的AndroidManifest.xml中

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.wuyudong.db.test"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="8" />
    
        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.wuyudong.db" />
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <uses-library android:name="android.test.runner" />
        </application>
    
    </manifest>

    复制后的代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.wuyudong.db"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.wuyudong.db" />
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <uses-library android:name="android.test.runner" />
    
            <activity
                android:name="com.wuyudong.db.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    项目结构如下:

    PersonSQLiteOpenHelper.java完整代码如下:

    package com.wuyudong.db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
    
        /**
         * 定义一个数据库创建的帮助类,里面有两个方法需要实现 相当于 file类
         * 
         * @author Administrator
         * 
         */
        public PersonSQLiteOpenHelper(Context context) {
            // context 上下文
            // person.db 数据库文件名称
            // factory 游标工厂
            // version 数据库的版本号 从1开始
            super(context, "person.db", null, 1);
            // TODO Auto-generated constructor stub
        }
    
        // Called when the database is created for the first time.
        // 在数据库第一次创建的时候执行的方法
        // 如果数据库已经创建完毕,就不会再去执行了。
        // 适合做数据库表结构的初始化操作
        // db代表的就是当前的数据库
        @Override
        public void onCreate(SQLiteDatabase db) {
            // 初始化数据库的表结构
            db.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))");
        }
    
        // 当数据库的版本号发生升级的时候调用。
        // 数据库只能升级不能降级。
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
    
        }
    }

    运行程序

    打开person.db

  • 相关阅读:
    Python格式化输出%s和%d
    操作数据库
    协议类介绍
    并发和并行和压测 、对带宽的理解解释
    悠悠大神的 并发当前目录下所有文件的方法(还没试过)
    post参数的方法 json data 和特别的传参
    接口测试简介
    appium的三种等待方式 (还没实践过,记录在此)
    人生进步目标
    保持一个会话 添加 HTTP Cookie管理器
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5561216.html
Copyright © 2020-2023  润新知