System.EntryPointNotFoundException: Unable to find an entry point named 'sqlite3_column_origin_name' in 'sqlite3'
运行在android真机上后使用读取sqlite出现以上错误
 

最后发现是在android里libsqlite.so不包含对sqlite3_column_origin_name()方法的支持,所以在使用System.Data.DataTable会出现问题,应该是我使用的版本过低的情况,可以使用最新版的尝试.

不过我使用了另一种方法
我修复之前是使用了这种方法来返回一个DataTable

public DataTable QueryDataSet(string queryString)    {        DataSet ds = new DataSet();        try        {            lock (this)            {                Open();                SqliteDataAdapter da = new SqliteDataAdapter(queryString, _dbConnection); //SqliteConnection _dbConnection;  当前使用数据库连接定义                da.Fill(ds);             }        }        catch (Exception ex)        {            Debug.LogError(ex);            Debug.LogError("此时是错误的数据指令为:" + queryString);                   }        finally        {            AutoClose();        }        if (ds.Tables.Count <= 0)        {            return new DataTable();        }        return ds.Tables[0];    }

现在只能去舍弃SqliteDataAdapter来自己构造一个DataTable来避免sqlite3_column_origin_name()

 

public DataTable QueryDataSet(string queryString)    {        //DataSet ds = new DataSet();        DataTable dt = null;        try        {            lock (this)            {                Open();                //SqliteDataAdapter da = new SqliteDataAdapter(queryString, _dbConnection);                //da.Fill(ds);                using (SqliteCommand dbCommand = _dbConnection.CreateCommand())                {                    dbCommand.CommandText = queryString;                    using (SqliteDataReader dataReader = dbCommand.ExecuteReader())                    {                        dt = ToTable(dataReader);                    }                                    }                            }        }        catch (Exception ex)        {            Debug.LogError(ex);            Debug.LogError("此时是错误的数据指令为:" + queryString);        }        finally        {            AutoClose();        }                return dt;    }   private DataTable ToTable(SqliteDataReader reader)    {        DataTable dt = new DataTable();                for(int i = 0; i < reader.FieldCount; i++)        {            string name = reader.GetName(i);            Type t = reader.GetFieldType(i);            dt.Columns.Add(reader.GetName(i),t);        }        while (reader.Read())        {            DataRow dr = dt.NewRow();            for (int i = 0; i < dt.Columns.Count; i++)            {                if (reader.IsDBNull(i))                {                    dr[i] = DBNull.Value;                    continue;                }                object val = reader[i];                if(val.GetType()!= dt.Columns[i].DataType)                {                    val = Convert.ChangeType(val,dt.Columns[i].DataType);                }                dr[i] = val;            }            dt.Rows.Add(dr);        }        return dt;    }


经过测试使用此方法没有问题
 

更多相关文章

  1. android标题栏进度圈使用方法
  2. Android重写onOreate,onPause,onStop等方法时需要注意的问题!
  3. XML解析
  4. android 比较有用的方法总结
  5. 【Android(安卓)开发教程】WebView
  6. android 设置LinearLayout,RelativeLayout等等layout的高和宽
  7. Android(安卓)View(四)-View相关属性详解
  8. 反编译Android部署程序
  9. 一些android错误

随机推荐

  1. Android(安卓)Studio 【Error running ap
  2. android背景图片更换――经典例子
  3. android TextView 跟随 seekBar 一起滑动
  4. EventBus的简单用法及介绍
  5. Android(安卓)Application 和Webview 之
  6. windowIsTranslucent和windowBackground
  7. eclipse开发环境下,如何根据已有代码创建
  8. Android(安卓)8.0 Adaptive Icon特性 for
  9. android TextView设置中文字体加粗
  10. Android(安卓)实现绚丽多彩的TextView