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数据库
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="SqliteTest.SqliteTest" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">application>
manifest>
界面格式
main.axml
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:rowCount="6"
android:columnCount="2">
<Button
android:id="@+id/CreateData"
android:layout_columnSpan="2"
android:layout_width="fill_parent"
android:text="新建数据库" />
<Button
android:id="@+id/CreateTable"
android:layout_columnSpan="2"
android:layout_width="match_parent"
android:text="建表" />
<Button
android:id="@+id/InsertTable"
android:layout_columnSpan="2"
android:layout_width="match_parent"
android:text="插入" />
<Button
android:id="@+id/UpdateTable"
android:layout_columnSpan="2"
android:layout_width="match_parent"
android:text="查看表" />
<Button
android:id="@+id/DeleteTable"
android:layout_columnSpan="2"
android:layout_width="match_parent"
android:text="删除" />
<TextView
android:id="@+id/egsql"
android:layout_marginRight="5dp"
android:textSize="20sp"
android:text="sql语句" />
<EditText
android:id="@+id/txtsql"
android:textSize="50sp"
android:maxLength="50"
android:layout_width="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 = System.Environment;
namespace SqliteTest
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
private Button CreateData;
private Button CreateTable;
private Button InsertTable;
private Button UpdateTable;
private Button DeleteTable;
// private Button egsql;
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 = null;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.main);
db = new SQLiteConnection(Connect_SQL());
CreateData = FindViewById<Button>(Resource.Id.CreateData);
CreateTable = FindViewById<Button>(Resource.Id.CreateTable);
InsertTable = FindViewById<Button>(Resource.Id.InsertTable);
UpdateTable = FindViewById<Button>(Resource.Id.UpdateTable);
DeleteTable = FindViewById<Button>(Resource.Id.DeleteTable);
// egsql = FindViewById
txtsql = FindViewById<EditText>(Resource.Id.txtsql);
CreateData.Click += CreateData_Click;
CreateTable.Click += CreateTable_Click;
InsertTable.Click += InsertTable_Click;
UpdateTable.Click += UpdateTable_Click;
DeleteTable.Click += DeleteTable_Click;
// txtsql.Click += txtsql_Click;
}
//取值
private void txtsql_Click(object sender, EventArgs e)
{
}
//删除
private void DeleteTable_Click(object sender, EventArgs e)
{
var rowcount = db.Delete<Stock>(1);
txtsql.Text = "delete id=1";
Console.WriteLine("delete id=1");
}
//查询
private void UpdateTable_Click(object sender, EventArgs e)
{
string bcd = "";
var table = db.Table<Stock>();
foreach (var s in table)
{
string abc = s.Id + "*** " + s.Symbol;
bcd = abc + bcd;
Console.WriteLine(s.Id + "*** " + s.Symbol);
}
txtsql.Text = "***" + bcd;
}
//插入
private void InsertTable_Click(object sender, EventArgs e)
{
var newStock = new Stock();
newStock.Symbol = "AAPL";
db.Insert(newStock);
newStock = new Stock();
newStock.Symbol = "GOOG";
db.Insert(newStock);
newStock = new Stock();
newStock.Symbol = "MSFT";
db.Insert(newStock);
txtsql.Text = "insert ok";
Console.WriteLine("insert ok");
}
//建表
private void CreateTable_Click(object sender, EventArgs e)
{
db.CreateTable<Stock>();
txtsql.Text = "create table ok";
Console.WriteLine("create table ok");
}
//创建数据库
private void CreateData_Click(object sender, EventArgs e)
{
Connect_SQL();
}
//创建链接数据库
private string Connect_SQL()
{
string dbPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Personal),
"database.db3");
// txtsql.Text = "create data ok";
Console.WriteLine("create data ok");
return dbPath;
}
}
}