Android_SQLite之创建数据库

今天我们主要学习了SQLite.主要是其中的创建数据库,连接这块。

现在我们先简单讲解下什么是SQLite

一、SQLite 简介

  Google为Andriod的较大的数据处理提供了SQLite, 他在数据存储、管理、维护等各方面都相当出色, 功能也非常的强大.

二、SQLite 特点

  1.轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能, 而且那个动态库的尺寸想当小。

  2.独立性 SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

  3.隔离性 SQLite 数据库中所有的信息(比如表、视图、触发器等) 都包含在一个文件夹内,方便管理和维护。

  4.跨平台 SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统 也是能够运行,比如:Android。

  5.多语言接口 SQLite 数据库支持多语言编程接口。

  6.安全性 SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。 这意味着多个进程可以在同一时间从同一数据库读取数据, 但只能有一个可以写入数据。

三、创建数据库类

先新建一个 MyDatabaseOpenHelper.class 文件 继承自 SQLiteOpenHelper 类。

注意 :SQLiteOpenHelperSQLiteDatebase 的一个帮助类 用来管理数据库的创建和版本的更新 ,并实现它的OnCreate OnUpdate方法。

 1 package com.example.winxin2;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6 import android.util.Log;
 7 
 8 public class MyDatabaseOpenHelper extends SQLiteOpenHelper{
 9 
10     private static final String DB_NAME = "mydata.db";//数据库名
11     private static final int version = 1;//数据库版本
12     
13     
14     public MyDatabaseOpenHelper(Context context) {
15         super(context, DB_NAME, null, version);
16         
17     }
18     
19     //问题:什么时候执行? 当没有前生的时候执行
20     //onCrate 是一个回调函数
21     @Override
22     public void onCreate(SQLiteDatabase db) {
23         //编写 
24         //建表语句
25         Log.i("hey", "没有数据库,创建数据库。");
      //创建表 t_message
      //autoincrement 自动生成序列。
26 String sql_message = "create table t_message (uid integer primary key autoincrement,toul varchar(50),userName varchar(50),lastMessage varchar(50),datetime varchar(50))"; 27 db.execSQL(sql_message); 28 } 29 30 @Override 31 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 32 33 } 34 35 }

 四、连接数据库 插入数据

  我们在 MaiinActivity.class 中对我们数据库进行连接,并插入数据。

在这里我们得明确两个概念:

  1. getReadableDatebase()    创建或打开一个只读数据库

  2.getWritableDatebase()    创建或打开一个读写数据库

下面是两种插入数据的方法。

 1   //创建数据库 
 2         MyDatabaseOpenHelper helper = new MyDatabaseOpenHelper(this);
 3         SQLiteDatabase db = helper.getWritableDatabase();
 4         
 5         //ContentValues 其实是一个map 对象 google 工程师封装的方法
 6         ContentValues values = new ContentValues();
 7         
 8         //一一对应填充数据
 9         values.put("userName", "android");
10         values.put("toul", "xxx");
11         values.put("lastMessage", "今天学习了SQLite");
12         values.put("datetime", "11月29号");
13         
14         db.insert("t_Message", null, values);
15         //方法二:使用sql 语句
16         String sql = "insert into t_Message(toul,userName,lastMessage,datetime) values(?,?,?,?)";
17         //
18         String[] sqlVales = {
19                 "aaa","oracle","oracle快忘记了","11月20日"
20         };
21         db.execSQL(sql,sqlVales);
22         //关闭数据库连接
23         db.close();

五、运行结果

 

今天的内容就是简单的创建sqlite,连接数据库,创建表和插入数据。

下面讲解一些类的方法,希望大家自己去尝试使用。

1.SQLiteDatabase类

常用方法:

(int) delete(String table,String whereClause,String[] whereArgs)  删除数据行的便捷方法

(long) insert(String table,String nullColumnHack,ContentValues values)

添加数据行的便捷方法

(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

更新数据行的便捷方法
(void) execSQL(String sql)

执行一个SQL语句,可以是一个select或其他的sql语句

(void) close() 关闭数据库

(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

查询指定的数据表返回一个带游标的数据集

(Cursor) rawQuery(String sql, String[] selectionArgs)

运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)

2.SQLiteDatabase类

使用insert方法

ContentValues cv = new ContentValues();

//实例化一个ContentValues用来装载待插入的数据

cv.put("username","Jack Johnson");

//添加用户名 cv.put("password","iLovePopMusic");

//添加密码 db.insert("user",null,cv);//执行插入操作

使用execSQL方式来实现

String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL语句

db.execSQL(sql);//执行SQL语句

数据的删除

String whereClause = "username=?";//删除的条件

String[] whereArgs = {"Jack Johnson"};//删除的条件参数

db.delete("user",whereClause,whereArgs);//执行删除

String sql = "delete from user where username='Jack Johnson'";//删除操作的SQL语句

db.execSQL(sql);//执行删除操作

数据修改

ContentValues cv = new ContentValues();//实例化

ContentValues cv.put("password","iHatePopMusic");//添加要更改的字段及内容

String whereClause = "username=?";//修改条件

String[] whereArgs = {"Jack Johnson"};//修改条件的参数

db.update("user",cv,whereClause,whereArgs);//执行修改

String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL语句

db.execSQL(sql);//执行修改

数据查询

通过query实现查询的 public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

table 表名称
column 列名称数组
selection 条件子句,,相当于where 
selectionArgs 条件语句的参数数组
groupBy 分组
having 分组条件
orderBy 排序类
limit 分页查询的限制
Cursor 返回值,相当于结果集resultSet

游标(Cursor)

getCount() 总记录条数
isFirst() 判断是否第一条记录
isLast() 判断是否最后一条记录
moveToFirst() 移动到第一条记录
moveToLast() 移动到最后一条记录
move(int offset) 移动[是指偏移量而不是指移到指定位置]
moveToNext() 移动到吓一条记录
moveToPrevious() 移动到上一条记录
getColumnIndex(String columnName) 获得指定列索引的int类型值
游标(Cursor)
Cursor c = db.query("user",null,null,null,null,null,null);//查询并获得游标
if(c.moveToFirst()){//判断游标是否为空
    for(int i=0;i<c.getCount();i++){
        c.moveToNext();
        String username = c.getString(c.getColumnIndex("username");
        String password = c.getString(c.getColumnIndex("password"));
    }

rawQuery实现的带参数查询

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
    String password = c.getString(c.getColumnIndex("password"));
}
原文地址:https://www.cnblogs.com/heyhhz/p/6113632.html