c# andriod开发 sqlite操作
sqlite介绍
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
优势:
- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
- SQLite 不需要配置,这意味着不需要安装或管理。
- 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
- SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
- SQLite 是自给自足的,这意味着不需要任何外部的依赖。
- SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
- SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
- SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
- SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
andriod sdk中自带slqlite数据库
APP截图
引用包
所需权限
AndroidManifest.xml
<manifest xmlns:android&#61;"http://schemas.android.com/apk/res/android" android:versionCode&#61;"1" android:versionName&#61;"1.0" package&#61;"SqliteTest.SqliteTest" android:installLocation&#61;"preferExternal"><uses-sdk android:minSdkVersion&#61;"21" android:targetSdkVersion&#61;"21" /><uses-permission android:name&#61;"android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name&#61;"android.permission.FLASHLIGHT" /><uses-permission android:name&#61;"android.permission.INTERNET" /><uses-permission android:name&#61;"android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name&#61;"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name&#61;"android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name&#61;"android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name&#61;"android.permission.READ_CONTACTS" /><uses-permission android:name&#61;"android.permission.WRITE_CONTACTS" /><application android:allowBackup&#61;"true" android:icon&#61;"&#64;mipmap/ic_launcher" android:label&#61;"&#64;string/app_name" android:roundIcon&#61;"&#64;mipmap/ic_launcher_round" android:supportsRtl&#61;"true" android:theme&#61;"&#64;style/AppTheme">application>
manifest>
界面格式
main.axml
<GridLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"android:orientation&#61;"horizontal"android:paddingLeft&#61;"10dp"android:paddingRight&#61;"10dp"android:rowCount&#61;"6"android:columnCount&#61;"2"> <Buttonandroid:id&#61;"&#64;&#43;id/CreateData" android:layout_columnSpan&#61;"2"android:layout_width&#61;"fill_parent"android:text&#61;"新建数据库" /><Buttonandroid:id&#61;"&#64;&#43;id/CreateTable" android:layout_columnSpan&#61;"2"android:layout_width&#61;"match_parent"android:text&#61;"建表" /><Buttonandroid:id&#61;"&#64;&#43;id/InsertTable"android:layout_columnSpan&#61;"2"android:layout_width&#61;"match_parent"android:text&#61;"插入" /><Buttonandroid:id&#61;"&#64;&#43;id/UpdateTable"android:layout_columnSpan&#61;"2"android:layout_width&#61;"match_parent"android:text&#61;"查看表" /><Buttonandroid:id&#61;"&#64;&#43;id/DeleteTable"android:layout_columnSpan&#61;"2"android:layout_width&#61;"match_parent"android:text&#61;"删除" /> <TextViewandroid:id&#61;"&#64;&#43;id/egsql"android:layout_marginRight&#61;"5dp"android:textSize&#61;"20sp" android:text&#61;"sql语句" /><EditTextandroid:id&#61;"&#64;&#43;id/txtsql"android:textSize&#61;"50sp"android:maxLength&#61;"50" android:layout_width&#61;"fill_parent" />
GridLayout>
代码
MainActivity.cs
using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using System;using SQLite;
using System.IO;
using Environment &#61; System.Environment;namespace SqliteTest
{[Activity(Label &#61; "&#64;string/app_name", Theme &#61; "&#64;style/AppTheme", MainLauncher &#61; true)]public class MainActivity : AppCompatActivity{private Button CreateData;private Button CreateTable;private Button InsertTable;private Button UpdateTable;private Button DeleteTable;private EditText txtsql;[Table("Items")]public class Stock{[PrimaryKey, AutoIncrement, Column("_id")]public int Id { get; set; }[MaxLength(8)]public string Symbol { get; set; }}private SQLiteConnection db &#61; null;protected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);SetContentView(Resource.Layout.main);db &#61; new SQLiteConnection(Connect_SQL());CreateData &#61; FindViewById<Button>(Resource.Id.CreateData);CreateTable &#61; FindViewById<Button>(Resource.Id.CreateTable);InsertTable &#61; FindViewById<Button>(Resource.Id.InsertTable);UpdateTable &#61; FindViewById<Button>(Resource.Id.UpdateTable);DeleteTable &#61; FindViewById<Button>(Resource.Id.DeleteTable);txtsql &#61; FindViewById<EditText>(Resource.Id.txtsql);CreateData.Click &#43;&#61; CreateData_Click;CreateTable.Click &#43;&#61; CreateTable_Click;InsertTable.Click &#43;&#61; InsertTable_Click;UpdateTable.Click &#43;&#61; UpdateTable_Click;DeleteTable.Click &#43;&#61; DeleteTable_Click;}private void txtsql_Click(object sender, EventArgs e){}private void DeleteTable_Click(object sender, EventArgs e){var rowcount &#61; db.Delete<Stock>(1);txtsql.Text &#61; "delete id&#61;1";Console.WriteLine("delete id&#61;1");}private void UpdateTable_Click(object sender, EventArgs e){string bcd &#61; "";var table &#61; db.Table<Stock>();foreach (var s in table){string abc &#61; s.Id &#43; "*** " &#43; s.Symbol;bcd &#61; abc &#43; bcd;Console.WriteLine(s.Id &#43; "*** " &#43; s.Symbol);}txtsql.Text &#61; "***" &#43; bcd;}private void InsertTable_Click(object sender, EventArgs e){var newStock &#61; new Stock();newStock.Symbol &#61; "AAPL";db.Insert(newStock);newStock &#61; new Stock();newStock.Symbol &#61; "GOOG";db.Insert(newStock);newStock &#61; new Stock();newStock.Symbol &#61; "MSFT";db.Insert(newStock);txtsql.Text &#61; "insert ok";Console.WriteLine("insert ok");}private void CreateTable_Click(object sender, EventArgs e){db.CreateTable<Stock>();txtsql.Text &#61; "create table ok";Console.WriteLine("create table ok");}private void CreateData_Click(object sender, EventArgs e){Connect_SQL();}private string Connect_SQL(){string dbPath &#61; Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"database.db3");Console.WriteLine("create data ok");return dbPath;}}
}