html5中文学习网

您的位置: 首页 > android » 正文

Android学习笔记-保存数据到SQL数据库中(Saving Data in SQL Databases)_Android

[ ] 已经帮助:人解决问题

知识点:Gg5HTML5中文学习网 - HTML5先行者学习网

1.使用SQL Helper创建数据库Gg5HTML5中文学习网 - HTML5先行者学习网
2.数据的增删查改(PRDU:Put、Read、Delete、Update)Gg5HTML5中文学习网 - HTML5先行者学习网

背景知识:Gg5HTML5中文学习网 - HTML5先行者学习网

上篇文章学习了android保存文件,今天学习的是保存数据到SQL数据库中。相信大家对数据库都不陌生。对于大量重复的,有特定结构的数据的保存,用 SQL数据库 来保存是最理想不过了。Gg5HTML5中文学习网 - HTML5先行者学习网

下面将用一个关于联系人的数据库Demo来具体学习。Gg5HTML5中文学习网 - HTML5先行者学习网

具体知识:Gg5HTML5中文学习网 - HTML5先行者学习网

1.定义Contract类Gg5HTML5中文学习网 - HTML5先行者学习网

在创建SQL数据库之前,要创建Contract类。那什么是Contract类呢?Gg5HTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
Gg5HTML5中文学习网 - HTML5先行者学习网
Contract Class的定义:Gg5HTML5中文学习网 - HTML5先行者学习网
    Contract Class,又可以叫做Companion Class。Gg5HTML5中文学习网 - HTML5先行者学习网
    Android Developer的帮助文档是这么说的:Gg5HTML5中文学习网 - HTML5先行者学习网
   < A contract class is a container for constants that define names for URIs, Gg5HTML5中文学习网 - HTML5先行者学习网
     tables, and columns. The contract class allows you to use the same constantsGg5HTML5中文学习网 - HTML5先行者学习网
     across all the other classes in the same package. This lets you change a Gg5HTML5中文学习网 - HTML5先行者学习网
     column name in one place and have it propagate throughout your code.>Gg5HTML5中文学习网 - HTML5先行者学习网
     Contact 类是定义URI、表、列的名字的容器。这个类允许我们在同一包的不同类下使用相同的常量。Gg5HTML5中文学习网 - HTML5先行者学习网
     我们在一处修改了列名,同时传播到我们代码的每个地方。Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
Gg5HTML5中文学习网 - HTML5先行者学习网
package com.example.sqlitetest;Gg5HTML5中文学习网 - HTML5先行者学习网
//Contract类Gg5HTML5中文学习网 - HTML5先行者学习网
public class Contact {Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    int _id;Gg5HTML5中文学习网 - HTML5先行者学习网
    String _name;Gg5HTML5中文学习网 - HTML5先行者学习网
    String _phone_number;Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    public Contact(){Gg5HTML5中文学习网 - HTML5先行者学习网
        Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    public Contact(int id, String name, String _phone_number){Gg5HTML5中文学习网 - HTML5先行者学习网
        this._id = id;Gg5HTML5中文学习网 - HTML5先行者学习网
        this._name = name;Gg5HTML5中文学习网 - HTML5先行者学习网
        this._phone_number = _phone_number;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    public Contact(String name, String _phone_number){Gg5HTML5中文学习网 - HTML5先行者学习网
        this._name = name;Gg5HTML5中文学习网 - HTML5先行者学习网
        this._phone_number = _phone_number;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    public int getID(){Gg5HTML5中文学习网 - HTML5先行者学习网
        return this._id;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    public void setID(int id){Gg5HTML5中文学习网 - HTML5先行者学习网
        this._id = id;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    public String getName(){Gg5HTML5中文学习网 - HTML5先行者学习网
        return this._name;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    public void setName(String name){Gg5HTML5中文学习网 - HTML5先行者学习网
        this._name = name;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    public String getPhoneNumber(){Gg5HTML5中文学习网 - HTML5先行者学习网
        return this._phone_number;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

    public void setPhoneNumber(String phone_number){Gg5HTML5中文学习网 - HTML5先行者学习网
        this._phone_number = phone_number;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

2.使用SQLHelper创建数据库Gg5HTML5中文学习网 - HTML5先行者学习网

          就像保存文件在内部存储一样,Android在私有的应用存储空间存储我们的数据库,这样就保证我们的数据是安全的。不能被其他应用访问到。Gg5HTML5中文学习网 - HTML5先行者学习网

在设备上存储的数据库保存在:Gg5HTML5中文学习网 - HTML5先行者学习网
             /data/data/<package_name>/databases目录下Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

为了使用SQLiteOpenHelper,我们需要创建一个重写了onCreate(),onUpgrade()和onOpen()回调方法的子类。Gg5HTML5中文学习网 - HTML5先行者学习网

3.数据的增删改查Gg5HTML5中文学习网 - HTML5先行者学习网

增:传ContentValue值到insert()方法。Gg5HTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
 Gg5HTML5中文学习网 - HTML5先行者学习网
ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_PH_NO, contact.getPhoneNumber()); Gg5HTML5中文学习网 - HTML5先行者学习网
  Gg5HTML5中文学习网 - HTML5先行者学习网
db.insert(TABLE_CONTACTS, null, values);Gg5HTML5中文学习网 - HTML5先行者学习网
db.close();Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网

删:delete()方法Gg5HTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
        new String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
db.close();Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网

 改:update()方法Gg5HTML5中文学习网 - HTML5先行者学习网

 

复制代码 代码如下:
Gg5HTML5中文学习网 - HTML5先行者学习网
 SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网

ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_PH_NO, contact.getPhoneNumber());Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
          ew String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
 

Gg5HTML5中文学习网 - HTML5先行者学习网

查:query()方法Gg5HTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getReadableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网

Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,Gg5HTML5中文学习网 - HTML5先行者学习网
                KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",Gg5HTML5中文学习网 - HTML5先行者学习网
                new String[] { String.valueOf(id) }, null, null, null, null);Gg5HTML5中文学习网 - HTML5先行者学习网
if (cursor != null)Gg5HTML5中文学习网 - HTML5先行者学习网
cursor.moveToFirst();Gg5HTML5中文学习网 - HTML5先行者学习网

Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),Gg5HTML5中文学习网 - HTML5先行者学习网
                cursor.getString(1), cursor.getString(2));Gg5HTML5中文学习网 - HTML5先行者学习网

return contact;Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

完整DatabaseHelper代码如下:Gg5HTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
Gg5HTML5中文学习网 - HTML5先行者学习网
package com.example.sqlitetest;Gg5HTML5中文学习网 - HTML5先行者学习网

import java.util.ArrayList;Gg5HTML5中文学习网 - HTML5先行者学习网
import java.util.List;Gg5HTML5中文学习网 - HTML5先行者学习网

import android.content.ContentValues;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.content.Context;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.database.Cursor;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.database.sqlite.SQLiteDatabase;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.database.sqlite.SQLiteOpenHelper;Gg5HTML5中文学习网 - HTML5先行者学习网

public class DatabaseHelper extends SQLiteOpenHelper {Gg5HTML5中文学习网 - HTML5先行者学习网

    // 数据库版本Gg5HTML5中文学习网 - HTML5先行者学习网
    private static final int DATABASE_VERSION = 1;Gg5HTML5中文学习网 - HTML5先行者学习网

    // 数据库名Gg5HTML5中文学习网 - HTML5先行者学习网
    private static final String DATABASE_NAME = "contactsManager";Gg5HTML5中文学习网 - HTML5先行者学习网

    //Contact表名Gg5HTML5中文学习网 - HTML5先行者学习网
    private static final String TABLE_CONTACTS = "contacts";Gg5HTML5中文学习网 - HTML5先行者学习网

    //Contact表的列名Gg5HTML5中文学习网 - HTML5先行者学习网
    private static final String KEY_ID = "id";Gg5HTML5中文学习网 - HTML5先行者学习网
    private static final String KEY_NAME = "name";Gg5HTML5中文学习网 - HTML5先行者学习网
    private static final String KEY_PH_NO = "phone_number";Gg5HTML5中文学习网 - HTML5先行者学习网

    public DatabaseHelper(Context context) {Gg5HTML5中文学习网 - HTML5先行者学习网
        super(context, DATABASE_NAME, null, DATABASE_VERSION);Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

    // 创建表Gg5HTML5中文学习网 - HTML5先行者学习网
    @OverrideGg5HTML5中文学习网 - HTML5先行者学习网
    public void onCreate(SQLiteDatabase db) {Gg5HTML5中文学习网 - HTML5先行者学习网
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("Gg5HTML5中文学习网 - HTML5先行者学习网
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"Gg5HTML5中文学习网 - HTML5先行者学习网
                + KEY_PH_NO + " TEXT" + ")";Gg5HTML5中文学习网 - HTML5先行者学习网
        db.execSQL(CREATE_CONTACTS_TABLE);Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

    // 更新表Gg5HTML5中文学习网 - HTML5先行者学习网
    @OverrideGg5HTML5中文学习网 - HTML5先行者学习网
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Gg5HTML5中文学习网 - HTML5先行者学习网
        // 删除旧表Gg5HTML5中文学习网 - HTML5先行者学习网
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);Gg5HTML5中文学习网 - HTML5先行者学习网

        //再次创建表Gg5HTML5中文学习网 - HTML5先行者学习网
        onCreate(db);Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

    /**Gg5HTML5中文学习网 - HTML5先行者学习网
     *增删改查操作Gg5HTML5中文学习网 - HTML5先行者学习网
     */Gg5HTML5中文学习网 - HTML5先行者学习网

    // 增加新的联系人Gg5HTML5中文学习网 - HTML5先行者学习网
    void addContact(Contact contact) {Gg5HTML5中文学习网 - HTML5先行者学习网
        SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网

        ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
        values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
        values.put(KEY_PH_NO, contact.getPhoneNumber());Gg5HTML5中文学习网 - HTML5先行者学习网

        // 插入行Gg5HTML5中文学习网 - HTML5先行者学习网
        db.insert(TABLE_CONTACTS, null, values);Gg5HTML5中文学习网 - HTML5先行者学习网
        db.close(); // 关闭数据库的连接Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

    // 获取联系人Gg5HTML5中文学习网 - HTML5先行者学习网
    Contact getContact(int id) {Gg5HTML5中文学习网 - HTML5先行者学习网
        SQLiteDatabase db = this.getReadableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网

        Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,Gg5HTML5中文学习网 - HTML5先行者学习网
                KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",Gg5HTML5中文学习网 - HTML5先行者学习网
                new String[] { String.valueOf(id) }, null, null, null, null);Gg5HTML5中文学习网 - HTML5先行者学习网
        if (cursor != null)Gg5HTML5中文学习网 - HTML5先行者学习网
            cursor.moveToFirst();Gg5HTML5中文学习网 - HTML5先行者学习网

        Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),Gg5HTML5中文学习网 - HTML5先行者学习网
                cursor.getString(1), cursor.getString(2));Gg5HTML5中文学习网 - HTML5先行者学习网
        return contact;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
    Gg5HTML5中文学习网 - HTML5先行者学习网
    // 获取所有联系人Gg5HTML5中文学习网 - HTML5先行者学习网
    public List<Contact> getAllContacts() {Gg5HTML5中文学习网 - HTML5先行者学习网
        List<Contact> contactList = new ArrayList<Contact>();Gg5HTML5中文学习网 - HTML5先行者学习网
        // Select All QueryGg5HTML5中文学习网 - HTML5先行者学习网
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;Gg5HTML5中文学习网 - HTML5先行者学习网

        SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
        Cursor cursor = db.rawQuery(selectQuery, null);Gg5HTML5中文学习网 - HTML5先行者学习网

        if (cursor.moveToFirst()) {Gg5HTML5中文学习网 - HTML5先行者学习网
            do {Gg5HTML5中文学习网 - HTML5先行者学习网
                Contact contact = new Contact();Gg5HTML5中文学习网 - HTML5先行者学习网
                contact.setID(Integer.parseInt(cursor.getString(0)));Gg5HTML5中文学习网 - HTML5先行者学习网
                contact.setName(cursor.getString(1));Gg5HTML5中文学习网 - HTML5先行者学习网
                contact.setPhoneNumber(cursor.getString(2));Gg5HTML5中文学习网 - HTML5先行者学习网
                contactList.add(contact);Gg5HTML5中文学习网 - HTML5先行者学习网
            } while (cursor.moveToNext());Gg5HTML5中文学习网 - HTML5先行者学习网
        }Gg5HTML5中文学习网 - HTML5先行者学习网

        return contactList;Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

    // 更新单个联系人Gg5HTML5中文学习网 - HTML5先行者学习网
    public int updateContact(Contact contact) {Gg5HTML5中文学习网 - HTML5先行者学习网
        SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网

        ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
        values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
        values.put(KEY_PH_NO, contact.getPhoneNumber());Gg5HTML5中文学习网 - HTML5先行者学习网

        //更新行Gg5HTML5中文学习网 - HTML5先行者学习网
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
                new String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

    // 删除单个联系人Gg5HTML5中文学习网 - HTML5先行者学习网
    public void deleteContact(Contact contact) {Gg5HTML5中文学习网 - HTML5先行者学习网
        SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
                new String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
        db.close();Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网
    // 获取联系人数量Gg5HTML5中文学习网 - HTML5先行者学习网
    public int getContactsCount() {Gg5HTML5中文学习网 - HTML5先行者学习网
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;Gg5HTML5中文学习网 - HTML5先行者学习网
        SQLiteDatabase db = this.getReadableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
        Cursor cursor = db.rawQuery(countQuery, null);Gg5HTML5中文学习网 - HTML5先行者学习网
        cursor.close();Gg5HTML5中文学习网 - HTML5先行者学习网

        return cursor.getCount();Gg5HTML5中文学习网 - HTML5先行者学习网
    }Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

还有一些代码不是本次学习的重点,就不贴出来了。有需要的留言找我要。Gg5HTML5中文学习网 - HTML5先行者学习网

 Demo运行效果图:Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

Gg5HTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助