专栏首页陶士涵的菜地[android] android下创建一个sqlite数据库

[android] android下创建一个sqlite数据库

Sqlite数据库是开源的c语言写的数据库,android和iphone都使用的这个,首先需要创建数据库,然后创建表和字段,android提供了一个api叫SQLiteOpenHelper数据库的打开和创建类。

具体使用比如:创建一个class叫PersonSQLiteOpenHelper用户数据库类,继承SQLiteOpenHelper,父类是个抽象类要实现onCreate()和onUpgrate()方法,此时会报错要求创建构造方法,构造方法的参数:Context上下文作用是告诉程序数据库创建在哪个目录下,String name数据库文件的名字,factory游标工厂一般我们都写null系统默认的,version数据库的版本从1开始,构造方法完成数据库就可以被创建。

OnCreate(SQLiteDatabase db)方法是数据库第一次被创建时回掉,用来创建表以及初始化参数,参数就是我们创建的数据库。调用SQLiteDatabase对象的execSQL()方法执行sql语句,首先要创建表和mysql的基本一样,执行这条sql语句,create table person (id integer primary key autoincrement,name varchar(20) not null default “” ) varchar的数字实际没有意义,给程序员看的,超过了也无所谓。

当new出来helper对象的时候,数据库并不会被创建,只有当helper对象调用了getWritableDatabase()方法或者getReadableDatabase()时候才会被创建。使用测试用例来测试一下,但是helper类需要上下文对象,测试框架提供了一个方法叫getContext()来得到上下文对象,数据库文件的地址/data/data/包名/database/下面,是私有的权限

helper代码:

package com.tsh.database;

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

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
    /**
     * 构造方法
     * @param context
     */
    public PersonSQLiteOpenHelper(Context context) {
        super(context, "person.db", null, 1);
    }
    /**
     * 数据库第一次创建完成的回调
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql="create table person (id integer primary key autoincrement,name varchar(10) not null default '')";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

测试用例:

package com.tsh.database.test;

import com.tsh.database.PersonSQLiteOpenHelper;

import android.test.AndroidTestCase;

public class TestPersonDb extends AndroidTestCase {
    public void testPerson() throws Exception{
        PersonSQLiteOpenHelper helper =new PersonSQLiteOpenHelper(getContext());
        helper.getWritableDatabase();
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 成熟项目的Flutter快速引入以及Flutter、Native混合开发探究

    又有两个月没有发文了,最近我司逐渐开始在成熟的项目中引入 Flutter 作为一种新的开发方式。作为比较早吃螃蟹的人,我也在组内为三四十个同学做了一次 Flu...

    何时夕
  • 如何让你的app在后台被干掉后优雅的启动

    作为一名Android开发师,肯定在处理用户的体验上下一定的功夫。有这么一个场景,在用户用着你开发的app的时候,突然某个聊天工具来消息了,切换到聊天工具后长时...

    Android技术干货分享
  • [译]C++ 和 Android 本地 Activity 初探

    我会带你完成一个简单的 Android 本地 Activity。我将介绍一下基本的设置,并尽力将进一步学习所需的工具提供给你。

    Android 开发者
  • Android 应用构建速度提升的十个小技巧

    应用的构建速度会直接影响开发效率,本文将带您通过改造一个 Android 应用: “Google 追踪圣诞老人 (Google Santa Tracker)” ...

    用户1907613
  • 【连载】聊聊 APK(四) —— 脱离 AS 手工创造 APK 文件

    想进大厂,就关注「 程序亦非猿 」 时不时 8:38 推送优质文章,觉得有用,置顶加星标

    程序亦非猿
  • 你不知道的 Java 注解那些事!

    注解对于开发人员来讲既熟悉又陌生,熟悉是因为只要你是做开发,都会用到注解(常见的 @Override),陌生是因为即使不使用注解也照常能够进行开发,注解不是必须...

    周三不加班
  • Android Q 手势导航背后的故事

    新引入的手势导航是 Android Q 带来的主要变化之一。简而言之,采用这款新系统导航模式后,用户无需借助任何虚拟按键,只要滑动手势便能完成多种操作,包括:...

    Android 开发者
  • RecyclerView实现混合布局

    PS:好长时间不写博客了,起初是不知道写些什么,后来接触了到了很多东西,原本看似简单的东西,背后都隐藏着巨大的秘密,想handler的使用,一般情况下会引起内存...

    cMusketeer
  • Azkaban-3.x源码编译以及Solo-Server模式部署

    查看azkaban-3.73.1/gradle/wrapper/gradle-wrapper.properties文件:

    CoderJed
  • 成功逆袭:越来越胖怎么能忍,我的APK瘦身之路!

    随着版本迭代,功能增加安装包体积也会慢慢增大。本文主要是介绍APK瘦身中用到的一些方法。

    Android技术干货分享

扫码关注云+社区

领取腾讯云代金券