开始学习android 的sqlite

1,关于sqlite



是一个嵌入式数据库,非常的小。适合移动开发。
http://www.sqlite.org/download.html
下载地址:
支持mac,windows,linux系统。直接安装就行了。
同时还有源代码,可以学习下。
文档:
http://www.sqlite.org/docs.html
android下面的已经有支持了。
https://developer.android.com/training/basics/data-storage/databases.html?hl=zh-cn
支持阅读官网文档就可以了。

2,使用SQLiteOpenHelper 完成crud



首先要写一个pojo对象

public class UserInfo {

    private Integer id;
    private String name;
    private Integer age;
    private Integer sex;
    private String city;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", city='" + city + '\'' +
                '}';
    }
}

对user表进行crud操作:

package com.demo.sqlitetest;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.nfc.Tag;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class UserHelper extends SQLiteOpenHelper {

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "UserInfo.db";
    public static final String TABLE_NAME = "user_info";

    //创建数据库。
    private static final String SQL_CREATE_ENTRIES =
            "CREATE TABLE IF NOT EXISTS  " + TABLE_NAME + " (id INTEGER PRIMARY KEY,name TEXT,age INTEGER,sex INTEGER,city TEXT)";
    //删除数据库。
    private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME;

    public UserHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_ENTRIES);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(SQL_DELETE_ENTRIES);
        onCreate(db);
    }

    @Override
    public void close() {
        super.close();
        Log.v("SQLite", "##################cloes db.##################");
    }

    public void save() {
        Random random = new Random();
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", "zhangsan_" + random.nextInt());
        contentValues.put("age", random.nextInt());
        contentValues.put("sex", random.nextInt());
        contentValues.put("city", "city_" + random.nextInt());
        getWritableDatabase().insert(UserHelper.TABLE_NAME, "", contentValues);
    }

    public List<UserInfo> queryAll() {
        List<UserInfo> list = new ArrayList<UserInfo>();
        Cursor cursor = getReadableDatabase().rawQuery("select * from " + UserHelper.TABLE_NAME + " limit 5", null);
        while (cursor.moveToNext()) {
            UserInfo userInfo = new UserInfo();
            userInfo.setId(cursor.getInt(cursor.getColumnIndex("id")));
            userInfo.setName(cursor.getString(cursor.getColumnIndex("name")));
            userInfo.setAge(cursor.getInt(cursor.getColumnIndex("age")));
            userInfo.setSex(cursor.getInt(cursor.getColumnIndex("sex")));
            userInfo.setCity(cursor.getString(cursor.getColumnIndex("city")));
            //增加到数据中。
            list.add(userInfo);
        }
        if (cursor != null) {
            cursor.close();
        }
        return list;
    }

    public void delete() {
        List<UserInfo> list = queryAll();
        //只删除第一个。
        if (list != null && list.size() > 0) {
            UserInfo userInfo = list.get(0);
            String[] whereArgs = {userInfo.getId() + ""};
            getWritableDatabase().delete(UserHelper.TABLE_NAME, "id = ? ", whereArgs);
        }
    }

    public void update() {
        List<UserInfo> list = queryAll();
        //只更新第一个。
        if (list != null && list.size() > 0) {
            Random random = new Random();
            UserInfo userInfo = list.get(0);
            ContentValues values = new ContentValues();
            values.put("name", "lisi_" + random.nextInt());

            String[] args = {String.valueOf(userInfo.getId())};
            //更新数据。
            getWritableDatabase().update(UserHelper.TABLE_NAME, values, "id = ? ", args);
        }
    }

}

mainActivity代码:

package com.demo.sqlitetest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.util.List;

public class DatabaseMainActivity extends AppCompatActivity {

    private static final String TAG = "dataBaseTest:";

    UserHelper helper = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_database_main);

        //c创建对象。
        helper = new UserHelper(getBaseContext());

        Button btn1 = (Button) findViewById(R.id.button1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //保存。
                for (int i = 0; i < 10; i++) {
                    helper.save();
                }
                //查询。
                List<UserInfo> list = helper.queryAll();
                for (UserInfo userInfo : list) {
                    Log.v(TAG, userInfo.toString());
                }
                //更新
                helper.update();
                //删除
                helper.delete();
            }
        });
    }

    //在每次注销的时候关闭。
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (helper != null) {
            helper.close();
        }
        Log.v(TAG, "############# close db ############");
    }

}

4,总结



本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53319494
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

作为对比,发现在android下面使用sqlite和mysql差不多。
但是使用sqliteHelper之后会方便很多。创建表和查询其实其实差不多。
就是调用函数和普通的jdbc不太一样。适应下就行了。
官方给的sqlite就已经不错了,不需要再使用orm了。自己做个对象转换就行了。
没有必要封装,比较作为android的客户端,大小也是很重要的。

时间: 2024-11-03 09:12:34

开始学习android 的sqlite的相关文章

菜鸟初步学习android,遇到这个问题,求解答?

问题描述 菜鸟初步学习android,遇到这个问题,求解答? android.database.sqlite.SQLiteException: near ""value"": syntax error (code 1): while compiling: insert into person(_idnamephone) value(???) 解决方案 values你少了s 解决方案二: 基本语法错误 values 解决方案三: values 很明显的错误. 解决方案

源代码-我在学习Android 的ZXing开源项目二维码时 有几个类 不清楚他具体的意义,功能。

问题描述 我在学习Android 的ZXing开源项目二维码时 有几个类 不清楚他具体的意义,功能. ①BitMatrix.java ②ByteMatrix.java ③MultiFormatWriter.java ④QRCodeWriter.java 这4个 我实在不懂 这功能,这里面哪个 是将输入字符串 变成那个0,1 那个的?用什么算法了...我这是Android工程. 谢谢了...

Android中SQLite数据库操作

一.基础知识: 1.SQLite的数据类型: NULL:空值. INTEGER:带符号的整型,具体取决有存入数字的范围大小. REAL:浮点数字,存储为8-byte IEEE浮点数. TEXT:字符串文本. BLOB:二进制对象. smallint 16位元的整数. interger 32位元的整数. decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数.如果没有特别指定,则系统会设为 p=5; s=0 . floa

可能是最早的学习Android N新特性的文章

可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android N相比于Android 6.0增加了哪些新的功能呢,开发者要关心哪些API呢,通过本篇文章,将一一得到答案. Android N的新特性 分屏多窗口(Multi-Window Support) 还在为看美剧的时候,收到微信消息而在两个应用间来回切换而烦恼吗.在Android N上,再也不用烦恼这个

android中sqlite一直报错

问题描述 android中sqlite一直报错 在应用中用到sqlite,创建了一些表,代码如下: db.execSQL("CREATE TABLE IF NOT EXISTS " + GAMES_HISTORY_TABLE+ " (" + GAME_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT, " + RIGHT_DRILLS + "INTEGER NOT NULL, " + NUM_

Android中SQLite应用详解

上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取.

android的sqlite 上传数据库到ftp,再下载下来后,为什么打不开?

问题描述 android的sqlite 上传数据库到ftp,再下载下来后,为什么打不开? android的sqlite数据库,存在data/data/packagename/databases/下, 用org.apache.commons.net.ftp.FTPClient 上传数据库到ftp,再下载下来后,为什么提示损坏,打不开? 我测试过,ftp上的文件是正确的,下载也成功了,文件有更新,文件的大小和ftp上的也是一样的.但是为什么打不开呢?用sqlexpert打开sqlite,提示data

21天学习android开发教程之SurfaceView与多线程的混搭_Android

上一篇简单介绍了SurfaceView的基本使用,这次就介绍SurfaceView与多线程的混搭.SurfaceView与多线程混搭,是为了防止动画闪烁而实现的一种多线程应用.android的多线程用法与JAVA的多线程用法完全一样,本文不做多线程方面的介绍了.直接讲解SurfaceView与多线程的混合使用,即开一条线程专门读取图片,另外一条线程专门绘图.         本文程序运行截图如下,左边是开单个线程读取并绘图,右边是开两个线程,一个专门读取图片,一个专门绘图:   对比一下,右边动

android下sqlite的blob类型不能存储超过2兆的文件

问题描述 android下sqlite的blob类型不能存储超过2兆的文件 android下sqlite的blob类型不能存储超过2兆的文件,存储1M多的文件都没问题, 超过两兆程序马上就崩溃,大家是否发现了这个情况. 解决方案 sqlite本来就是轻量级的数据库,数据库就是小数据类的存储,不然存图片,存文件 那就应该叫服务器了 解决方案二: 我有一个建议,你把图片分块存储,不要整个存入blob,取出的时候做个拼接 解决方案三: 把文件或者图片存储在文件系统中,sqlite中只存储文件的目录