在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.(用可移植类库PCL项目也可以的.)

如果需要源码可以联系我.10元收费哈..

以下内容包括

1.在安卓中创建sqlite数据库;

2.检查数据库是否存在;

3.返回数据库路径;

4.插入数据(前置知识,dapper的使用方法或petapoco的);

5.查询数据;

本人小菜鸟一枚,以下代码写得很烂,希望有好的想法可以指点下我.

知识点提示

1.安卓sqlite数据提交,默认每一次都是事务提交,所以如果不采用一次性全部事务提交,会造成很多事务的建立.也就是把提交部分,用一个事务包起来,不要不用事务.否则很慢.

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; using System.IO;
using Mono.Data.Sqlite;
using System.Data;
using Android.Util;
using Microsoft.CSharp;
using Mono.CSharp;
using Dapper;
using BaseModel;
using PetaPocoForMobile; namespace monoandroid1.Controllers
{
[Activity(Label = "启动页", MainLauncher = true, Icon = "@drawable/icon")]
public class Start : Activity
{
private TextView tips;
private EditText keyword; protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Create your application here
SetContentView(Resource.Layout.Main);
tips = FindViewById<TextView>(Resource.Id.Results); Button BtCreatDatabase = FindViewById<Button>(Resource.Id.CreatDatabase);
BtCreatDatabase.Click += new EventHandler(CreatDatabase); Button BtImportData = FindViewById<Button>(Resource.Id.ImportData);
BtImportData.Click += delegate { ImportData(); }; Button BtDataDisplay = FindViewById<Button>(Resource.Id.DataDisplay);
BtDataDisplay.Click += delegate
{
keyword = FindViewById<EditText>(Resource.Id.Input);
tips.Text = DataDisplay(keyword.Text) == null ? "查询不到" : DataDisplay(keyword.Text).UserName;
}; Button BtCheckDatabase = FindViewById<Button>(Resource.Id.CheckDatabase);
BtCheckDatabase.Click += delegate
{
CheckDatabase("/data/data/monoandroid1.monoandroid1/files/UserData.db3");
};
}
/// <summary>
/// 创建数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void CreatDatabase(object sender, EventArgs e)
{
string databaseName = "UserData.db3";
string dbFilePath = GetDatabaseFilePath(databaseName);
bool existsDB = CheckDatabase(dbFilePath);
if (existsDB == true)
{
SqliteConnection.CreateFile(dbFilePath);
} var conn = new SqliteConnection("Data Source=" + dbFilePath);
var commands = new[]
{
"drop table if exists dog",
"create table if not exists dog (UserId integer primary key autoincrement, UserName varchar(20),Age int,Address varchar(50))",
};
try
{
if (conn.State == ConnectionState.Broken)
conn.Close();
if (conn.State == ConnectionState.Closed)
{
conn.Open();
} foreach (string cmd in commands)
using (SqliteCommand sqlitecmd = conn.CreateCommand())
{
sqlitecmd.Connection = conn;
sqlitecmd.CommandText = cmd;
sqlitecmd.CommandType = CommandType.Text;
//conn.Open();
sqlitecmd.ExecuteNonQuery();
//conn.Close();
} tips.Text = "数据库创建成功";
}
catch (System.Exception sysExc)
{
tips.Text = "Exception: " + sysExc.Message;
}
finally
{
if (conn.State != ConnectionState.Closed)
{
conn.Close();
}
conn.Dispose();
}
} /// <summary>
/// 返回数据库完整路径
/// </summary>
/// <param name="databaseName">数据库名</param>
/// <returns>返回数据库完整路径</returns>
private string GetDatabaseFilePath(string databaseName)
{
string documents = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string dbFilePath = Path.Combine(documents, databaseName);
return dbFilePath;
} /// <summary>
/// 检查数据库是否存在
/// </summary>
/// <param name="dbFilePath"></param>
/// <returns>true不存在,false已经存在</returns>
private bool CheckDatabase(string dbFilePath)
{
bool exists = File.Exists(dbFilePath);
if (!exists)
{
//SqliteConnection.CreateFile(dbFilePath);
tips.Text = "数据库不存在";
Log.Info("CreateFile", "路径不存在数据库,并创建数据库");
return true;
}
else
{
tips.Text = "数据库已经存在";
Log.Info("CreatFile", "已经存在数据库,放弃创建");
return false;
}
}
private SqliteConnection OpenDatabase()
{
string databaseName = "UserData.db3";
string dbFilePath = GetDatabaseFilePath(databaseName);
//<add name="ConnectionStringName" connectionString="sever=服务器名;database=数据库名;User ID=用户;Password=密码" providerName="System.Data.SqlClient" />
//<add name="ConnectionStringName" connectionString="Data Source=服务器名;Initial Catalog=数据库名;User ID=用户;Password=密码" providerName="System.Data.SqlClient" />
string connectionstr = "Data Source=" + dbFilePath;
SqliteConnection connection = new SqliteConnection(connectionstr);
if (connection.State == ConnectionState.Broken)
connection.Close();
if (connection.State == ConnectionState.Closed)
{
connection.Open();
} return connection;
}
/// <summary>
/// 导入数据
/// </summary>
protected void ImportData()
{
//dapper版
// List<Dog> Dogs = new List<Dog>();
// for (int i = 0; i < 100000; i++)
// { // Dogs.Add(new Dog { UserId = i, UserName = "DogName" + i.ToString(), Age = i, Address = "ADD" + i.ToString() }); // }
// string sql ="INSERT INTO dog (UserId,UserName,Age,Address) VALUES (@UserId,@UserName,@Age,@Address)";
// using (SqliteConnection connection = OpenDatabase())
// {
// //SqlConnection connection = GetOpenConnection(sqlconnectionString);
// //插入100000条数据到数据库
// DateTime starttime = DateTime.Now;
// TimeSpan timespan;
// int records = 0; // using (var trans = connection.BeginTransaction())
// {
// try
// {
// records += connection.Execute(sql, Dogs, trans, 30, CommandType.Text);
//// for (int i = 0; i < 100000; i++)
//// {
//// connection.Execute("INSERT INTO dog (UserId,UserName,Age,Address) VALUES (@UserId,@UserName,@Age,@Address)",
//// new { );//System.Guid.NewGuid().ToString()全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。
//// }
// }
// catch (DataException ex)
// {
// trans.Rollback();
// throw ex;
// }
// finally
// {
// trans.Commit();
// timespan = DateTime.Now.Subtract(starttime);//获取就是开始时间很结束时间差
// if (connection.State != ConnectionState.Closed)
// {
// connection.Close();
// }
// connection.Dispose();
// tips.Text = "数据导入完成" + timespan.ToString();
// }
// }
// } //petapoco版 //var db = new PetaPocoForMobile.Database(OpenDatabase());
//SqliteConnection connection = OpenDatabase()
using (SqliteConnection connection = OpenDatabase())
{
int records = 0;
using (var db = new PetaPocoForMobile.Database(connection))
{
List<Dog> Dogs = new List<Dog>();
for (int i = 0; i < 10000; i++)
{
Dogs.Add(new Dog { UserId = i, UserName = "DogName" + i.ToString(), Age = i, Address = "ADD" + i.ToString() });
}
DateTime starttime = DateTime.Now;
TimeSpan timespan;
using (var ts = db.GetTransaction())
{
try
{
//插入100000条数据到数据库
foreach (Dog item in Dogs)
{
db.Insert("dog", "UserId", item);//速度稍微慢点点,没多少差别
//db.Execute("INSERT INTO dog (UserId,UserName,Age,Address) VALUES (@0,@1,@2,@3)", item.UserId, item.UserName, item.Age, item.Address);
}
ts.Complete();
}
catch (Exception ex)
{
throw ex;
}
finally
{
timespan = DateTime.Now.Subtract(starttime);//获取就是开始时间很结束时间差
if (connection.State != ConnectionState.Closed)
{
connection.Close();
}
connection.Dispose();
tips.Text = "数据导入完成" + timespan.ToString();
}
}
} } } /// <summary>
/// 根据ID查询单条数据
/// </summary>
/// <param name="keyword"></param>
/// <returns></returns>
protected Dog DataDisplay(string keyword)
{
SqliteConnection connection = OpenDatabase();
//获取单条记录
//var edog = connection.Query<Dog>("select * from dog where id = @Id", new { Id = 2 }).Single<Dog>();
//var edog = connection.Query<Dog>("select * from dog where UserId = @UserId", new { UserId = keyword }).SingleOrDefault<Dog>();
try
{
var edog = connection.Query<Dog>("select * from dog where UserId = @UserId", new { UserId = keyword }).SingleOrDefault<Dog>();
return edog;
}
catch (System.Exception sysExc)
{
//tips.Text = "Exception: " + sysExc.Message;
//Log.Info("e", "Exception: " + sysExc.Message); return null;
}
finally
{
if (connection.State != ConnectionState.Closed)
{
connection.Close();
}
connection.Dispose();
}
} }
}

mono for android中使用dapper或petapoco对sqlite进行数据操作的更多相关文章

  1. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

  2. Mono For Android中AlarmManager的使用

    最近做了一个应用,要求如下: 程序运行之后的一段时间,分别触发3个不同的事件.当然很快就想到了Android中的AlarmManager和BroadcastReceiver.但是毕竟Mono环境和Ja ...

  3. Mono For Android中简单实现按钮的动画效果

    Android中动画的分Tween Animation和Frame Animation,本节主要讲Tween Animation的实现. 一般是通过XML文件来定义动画的,具体如下: 1.在项目res ...

  4. Mono For Android中完美使用百度地图SDK(v2.1.2&v2.1.3)(转)

    在Xamarin Mono For Android的开发中,如果要使用第三方的jar,就必须进行绑定.通过创建Java Bindings Library项目来自动生成C#到java的代码映射代码,最终 ...

  5. Android中API建议的方式实现SQLite数据库的增、删、改、查的操作

    package com.examp.use_SQLite.dao; import java.util.ArrayList; import java.util.List; import android. ...

  6. Android中使用BufferedReader.readline阻塞读取不到数据,但是ready返回true

    通过socket测试工具在电脑上发送消息,Android真机可以收到响应BufferedReader.ready()返回true,但是readline却一直阻塞. 原因:readline()只有在遇到 ...

  7. Android中Service通信(一)——启动Service并传递数据

    启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...

  8. Android 中如何获取 H5 保存在 LocalStorage 的数据

    主要分三步: 写个接口,接收 Js 回调 添加到 WebView 主动调用 Js 获取 比如我要获取保存在 LocalStorage 中的 userKey 字段: 1.写个接口,接收 Js 回调 pu ...

  9. 在Android中afinal框架下實現sqlite數據庫版本升級的辦法

    public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 這個方法在實現時需要重寫.   pub ...

随机推荐

  1. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  2. 在离线环境中发布.NET Core至Windows Server 2008

    在离线环境中发布.NET Core至Windows Server 2008 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布 ...

  3. 阿里签名中URLEncode于C#URLEncod不同之处

    问题 如上图所示,阿里云的PercentEncode 转换! 为 %21 PercentEncode 源码为: package com.aliyuncs.auth; import java.io.Un ...

  4. Hawk 4.4 执行器

    执行器是负责将Hawk的结果传送到外部环境的工具.你可以写入数据表,数据库,甚至执行某个特定的动作,或是生成文件等等. 在调试模式下,执行器都是不工作的.这是为了避免产生副作用.否则,每刷新一遍数据, ...

  5. JavaScript基础知识总结(四)

    JavaScript语法 八.函数 函数就是完成某个功能的一组语句,函数由关键字function + 函数名 + 加一组参数定义: 函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可 ...

  6. 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

    坏味道--夸夸其谈未来性(Speculative Generality) 特征 存在未被使用的类.函数.字段或参数. 问题原因 有时,代码仅仅为了支持未来的特性而产生,然而却一直未实现.结果,代码变得 ...

  7. AbpZero--2.如何启动

    1.直接启动 VS中直接启动 2.IIS站点 IIS中配置一个站点来启动(推荐) 3.登录 系统默认创建2个用户 默认用户名:admin 密码:123qwe 租户:Default  默认用户名:adm ...

  8. iptables

    一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...

  9. java中的内部类

    /** * 内部类 ?? * 定义在一个内部的类,被称为内部类. * 内部类里有类体,方法体 * 内部类所在的类,被称为外部类. * --------------------------------- ...

  10. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...