Xamarin.Android 本地数据库 SQLiteDatabase 操作-阿里云开发者社区

开发者社区> swjian1997> 正文

Xamarin.Android 本地数据库 SQLiteDatabase 操作

简介: 目的:使用 SQLiteDatabase 创建本地数据库、表,并对数据进行增删改查操作。 引用命名空间: using Android.App; using Android.Widget; using Android.
+关注继续查看

目的:使用 SQLiteDatabase 创建本地数据库、表,并对数据进行增删改查操作。

引用命名空间:

using Android.App;
using Android.Widget;
using Android.OS;
using Android.Database.Sqlite;
using Android.Content;
using System.IO;
using System.Data;
using Mono.Data.Sqlite;
using System;
using Android.Database;
using System.Collections.Generic; 

Person类

public class Person
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string IdCard { get; set; }
    public string Sex { get; set; }
    public string Age { get; set; }
}

创建局部变量Localhost_DataBase,以及控件,model类

SQLiteDatabase Localhost_DataBase = null;

Person person; 
List<Person> list = new List<Person>(); 
ListView lv_Person;

创建数据库

/// <summary>
/// 创建数据库
/// </summary>
void CreateDataBase()
{
    try
    {
        //打开或创建数据库 名称为:AssetsManage.db
        Localhost_DataBase = OpenOrCreateDatabase("AssetsManage.db", FileCreationMode.Private, null);

        //判断是否存在数据库
        if (string.IsNullOrEmpty(GetSharedPreferences("AssetsManage", 0).GetString("AssetsManage", "")))//未创建数据库
        {
            File.Create(Localhost_DataBase.Path);
            //继续创建数据表
            CreateTable();
            //存取已创建数据库信息
            GetSharedPreferences("AssetsManage", 0).Edit().PutString("AssetsManage", "OK").Commit();
        }
    }
    catch
    {
        //存取创建数据库时的异常
        GetSharedPreferences("Exception", 0).Edit().PutString("DataBaseException", "异常").Commit();
    }
}

创建表

/// <summary>
/// 创建表
/// </summary>
void CreateTable()
{
    string db = Localhost_DataBase.Path;
    var conn = new SqliteConnection("Data Source=" + db);
    //这里可以创建多张表
    var commands = new[] { 
                    "CREATE TABLE tb_person (Id int,name varchar(20),sex varchar(80),age varchar(20),idcard varchar(18))",

                    "CREATE TABLE tb_grade (uId int,mathgrade varchar(5),Chinese varchar(5),English varchar(5))"
    };
    try
    {
        foreach (var cmd in commands)
        {
            using (var sqlitecmd = conn.CreateCommand())
            {
                sqlitecmd.CommandText = cmd;
                sqlitecmd.CommandType = CommandType.Text;
                conn.Open();
                sqlitecmd.ExecuteNonQuery();
                conn.Close();
            }
        }

        InsertData();
    }
    catch (System.Exception e)
    {
        //存取创建数据表时的异常
        GetSharedPreferences("Exception", 0).Edit().PutString("DataTableException", "异常").Commit();
    }
}

向表中插入模拟数据

/// <summary>
/// 插入数据
/// </summary>
void InsertData()
{
    for(int i=1;i<=10;i++)
    {  
        ContentValues cv = new ContentValues();
        cv.Put("Id", i.ToString());
        cv.Put("name", "张三" + i.ToString());
        cv.Put("sex", new Random().Next(1, 2) == 1 ? "" : "");
        cv.Put("age", (20 + i).ToString());
        cv.Put("idcard", "21072619971111111" + (i - 1).ToString());
        Localhost_DataBase.Insert("tb_person", null, cv);

        ContentValues cv1 = new ContentValues();
        cv1.Put("uId", i);
        cv1.Put("mathgrade", new Random().Next(1, 100));
        cv1.Put("Chinese", new Random().Next(1, 100));
        cv1.Put("English", new Random().Next(1, 100));
        Localhost_DataBase.Insert("tb_grade", null, cv1);
    }
}

查询表中数据

/// <summary>
/// 查询数据
/// </summary>
void QueryData()
{
    ICursor ic =  Localhost_DataBase.Query("tb_person", null, null, null, null, null, null);    //全部查询 
    //ICursor ic = Localhost_DataBase.Query("tb_person", null, " id =? and name =?", new string[] { "1","张三1" }, null, null, null);    //条件查询
    for (int i = 0; i < ic.Count; i++)
    {
        if (i == 0)             //确定游标位置
        {
            ic.MoveToFirst();
        }
        else
        {
            ic.MoveToNext();
        }

        person = new Person(); 
        person.Id = ic.GetString(ic.GetColumnIndex("Id")); 
        person.Name = ic.GetString(ic.GetColumnIndex("name"));
        person.Age = ic.GetString(ic.GetColumnIndex("age"));
        person.Sex= ic.GetString(ic.GetColumnIndex("sex"));
        person.IdCard = ic.GetString(ic.GetColumnIndex("idcard")); 
        list.Add(person); 
    }
    lv_Person.Adapter = new ListViewAdapter(this, list);
}

根据条件删除表中数据

/// <summary>
/// 删除数据
/// </summary>
/// <param name="id"></param>
void DeleteData(string id)
{
    Localhost_DataBase.Delete("tb_person", " Id=?", new string[] { id });
    //Localhost_DataBase.Delete("tb_person", null, null);       //删除表中所有数据
}

根据条件修改表中数据

/// <summary>
/// 修改数据
/// </summary>
/// <param name="name"></param>
void UpdateData(string id)
{
    ContentValues cv = new ContentValues();
    cv.Put("name", "张三1000");
    Localhost_DataBase.Update("tb_person", cv, " Id=?  ", new string[] { id });
}

ListViewAdapter 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace LocalhostDataBaseTest
{
    public class ListViewAdapter:BaseAdapter<Person>
    {
        Activity context;
        public List<Person> mings;

        public ListViewAdapter(Activity context, List<Person> mings)
        {
            this.context = context;
            this.mings = mings;
        }

        public override int Count
        {
            get
            {
                return this.mings.Count;
            }
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public override Person this[int position]
        {
            get
            {
                return this.mings[position];
            }
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var itme = this.mings[position];

            convertView = LayoutInflater.From(context).Inflate(Resource.Layout.Person_Items, parent, false);

            TextView item_id = convertView.FindViewById<TextView>(Resource.Id.item_id);
            TextView item_name = convertView.FindViewById<TextView>(Resource.Id.item_name);
            TextView item_idcard = convertView.FindViewById<TextView>(Resource.Id.item_idcard);
            TextView item_sex = convertView.FindViewById<TextView>(Resource.Id.item_sex);
            TextView item_age = convertView.FindViewById<TextView>(Resource.Id.item_age);

            item_id.Text = (position + 1).ToString();
            item_name.SetText(itme.Name, TextView.BufferType.Normal);
            item_idcard.SetText(itme.IdCard, TextView.BufferType.Normal);
            item_sex.SetText(itme.Sex, TextView.BufferType.Normal);
            item_age.SetText(itme.Age, TextView.BufferType.Normal); 

            return convertView;
        }
    }
}

OnCreate调用

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    // Set our view from the "main" layout resource
    SetContentView(Resource.Layout.Main);

    lv_Person = FindViewById<ListView>(Resource.Id.listViewPerson);
    CreateDataBase();
    DeleteData("10");
    UpdateData("9");
    QueryData();
}

到这里就结束了,那里写的不足希望大家补充~ 

链接: https://pan.baidu.com/s/1QhDkfSXyVlmWEnIU6VGy-g

密码: isa8

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
oracl使用DataBase Configuration Assistant创建、删除数据库
原文:oracl使用DataBase Configuration Assistant创建、删除数据库可以使用DataBase Configuration Assistant来创建一个心得数据库。Database Configuration Assistant简称是DBCA,是创建、配置以及管理数据库的一个工具。
1269 0
Android Studio 通过一个登录功能介绍SQLite数据库的使用
前言:         SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
4231 0
黑马程序员 十、IO 文件操作(2)
Java帮帮-IT资源分享网  十、IO 文件操作(2) 1、内存操作流 操作内存流的时候(从读取出来,注意一定要把真正的数据用toByteArray或者toCharArray 将数据读出来) 之前的文件操作流是以文件的输入输出为主的,当输出的位置变成了内存,那么就称为内 存操作流。此时要使用内存流完成内存的输入和输出操作。 如果程序运行过程中要产生一些临时文
1216 0
使用iOS原生sqlite3框架对sqlite数据库进行操作(五)
使用iOS原生sqlite3框架对sqlite数据库进行操作
25 0
android sqlite 操作
引用:http://www.eifr.com/article.php?id=1364    1. /*    2. Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete) 操作(这些操作简称为CRUD)。
590 0
+关注
swjian1997
热爱新技术,喜欢专研,目前了解范围:.net,C#,Xamarin.Android,MySQL,SQL Server,HTML,Linux,Python
62
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载