如何检查xamarin数据库中是否存在数据

时间:2017-09-23 12:21:36

标签: xamarin.android

大家好我已经在xamarin中实现了sqlite数据库,我需要搜索taht数据库中是否存在任何特定数据。

我想根据相册密钥

检查数据库中是否存在数据或行

这是我的数据库类

namespace FacebookAuth
{
    class DatabaseHelper
    {
        Java.IO.File dir = new Java.IO.File(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Android/data/com.abhijit.testing.app/databases");

        public bool createDataBase()
        {
            try
            {
                using (var connection = new SQLiteConnection(Path.Combine(dir.AbsolutePath, "album.db")))
                {
                    connection.CreateTable<AlbumTable>();
                    return true;
                }
            }
            catch (SQLiteException e)
            {
                return false;
            }
        }

        public bool InsertIntoTable(AlbumTable album)
        {
            try
            {
                System.Console.Write("Data Saved Successfully");

                using (var connection = new SQLiteConnection(Path.Combine(dir.AbsolutePath, "album.db")))
                {
                    connection.Insert(album);
                    return true;
                }
            }
            catch (SQLiteException e)
            {
                return false;
            }
        }

        public List<AlbumTable> getalldata()
        {
            try
            {
                using (var connection = new SQLiteConnection(Path.Combine(dir.AbsolutePath, "album.db")))
                {
                    return connection.Table<AlbumTable>().ToList();
                }
            }
            catch (SQLiteException ex)
            {
                return null;
            }
        }

        public List<AlbumTable> SelectAlbum(string orderid)
        {
            try
            {
                using (var connection = new SQLiteConnection(Path.Combine(dir.AbsolutePath, "album.db")))
                {
                    return connection.Query<AlbumTable>("SELECT * From album Where AlbumKey=?", orderid);//not working exception raised that invalid table name
                }
            }
            catch (SQLiteException ex)
            {
                return null;
            }
        }

        public bool DeleteFromTable(AlbumTable album)
        {
            try
            {
                System.Console.Write("Data Saved Successfully");

                using (var connection = new SQLiteConnection(Path.Combine(dir.AbsolutePath, "album.db")))
                {
                    connection.Delete(album);
                    return true;
                }
            }
            catch (SQLiteException e)
            {
                return false;
            }
        }
    }
}

,数据库的列名如下

K
class AlbumTable
{
    [PrimaryKey]
    public string Id { get; set; }

    public string ZipFillPath { get; set; }

    public string CoverPhotoPath { get; set; }

    public string AlbumKey { get; set; }

    public string NoOfPages { get; set; }

    public string Email { get; set; }

    public string LastName { get; set; }

    public string FirstName { get; set; }

    public string City { get; set; }

    public string Address1 { get; set; }

    public string ZipPostalCode { get; set; }

    public string PhoneNumber { get; set; }
}

如何检查db中是否存在该值

2 个答案:

答案 0 :(得分:0)

  1. Android Device Monitor打开Tools->Android->Android Device Monitor enter image description here
  2. 导航到您的数据库文件并将数据库文件复制到您的PC中。 enter image description here
  3. 您可以使用任何SQLite浏览器打开数据库,以检查您的数据是否在数据库中。例如http://sqlitebrowser.org/

答案 1 :(得分:0)

docs非常擅长提供易于理解的说明。

您需要将您的ID列设为int,然后才能使用Get<T>()方法

public List<AlbumTable> SelectAlbum(int orderid)
{
    try
    {
        using (var connection = new SQLiteConnection(Path.Combine(dir.AbsolutePath, "album.db")))
        {
            return connection.Get<AlbumTable>(orderid);
        }
    }
    catch (SQLiteException ex)
    {
        return null;
    }
}

如果您希望使用Sql(请参阅下一点,了解您可能需要的原因),您需要创建具有已定义名称的表,否则为表提供的名称可能是一些以编程方式创建的非人类友好的内部乱语。

[Table("Albums")]
class AlbumTable
{
    [PrimaryKey]
    public int Id { get; set; }
...

如果你必须将id列保持为字符串(即你无法控制数据库),你可以使用linq get

return connection.Get<AlbumTable>().FirstOrDefault(a => a.Id == orderid);

请注意,这会将所有数据加载到内存中,因此如果您在数据库中获取大量数据以及失去数据库的内置优势,性能将会非常糟糕 - 存储和搜索数据就是他们为数据库构建的。这不是实体框架,因此对于复杂查询,请使用上面的直接Sql语句。