- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将数据从 json 解析为相应的类数据,他们想将其保存在 ORMLite 中......这是我的类
public class Categories {
ArrayList<Category> categories;
public Categories() {
categories = new ArrayList<Category>();
}
public ArrayList<Category> getCategories() {
return this.categories;
}
}
和级别:
@DatabaseTable(tableName = "levels")
public class Level {
@SerializedName("id")
@DatabaseField(id = true)
int id;
@SerializedName("title")
@DatabaseField(dataType = DataType.STRING)
String title;
public Level() { }
public Level(int id, String title) {
this.id = id;
this.title = title;
}
}
DatabaseHandler 类中的 OnCreate 方法:
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Category.class);
TableUtils.createTable(connectionSource, Level.class);
} catch (SQLException e){
Log.e(TAG, "error creating DB " + DATABASE_NAME);
throw new RuntimeException(e);
}
}
DatabaseHandler 中的 DAO 方法:
public Dao<Category, Integer> getCategoryDao() throws SQLException {
if (simpleCategoryDao == null) {
simpleCategoryDao = getDao(Category.class);
}
return simpleCategoryDao;
}
public Dao<Level, Integer> getLevelDao() throws SQLException {
if (simpleLevelDao == null) {
simpleLevelDao = getDao(Level.class);
}
return simpleLevelDao;
}
public RuntimeExceptionDao<Category, Integer> getSimpleCategoryDao() {
if (categoryRuntimeDao == null) {
categoryRuntimeDao = getRuntimeExceptionDao(Category.class);
}
return categoryRuntimeDao;
}
public RuntimeExceptionDao<Level, Integer> getSimpleLevelDao() {
if (levelRuntimeDao == null) {
levelRuntimeDao = getRuntimeExceptionDao(Level.class);
}
return levelRuntimeDao;
}
我在我的 Activity 中以这种方式从 JSON 解析我的数据:
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
JSONObject data = json.getJSONObject(KEY_DATA);
// getting categories
JSONArray categories = new JSONArray();
categories = data.getJSONArray(KEY_CATEGORIES);
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(categories.toString()).getAsJsonArray();
Type listType = new TypeToken<List<Category>>() {}.getType();
List<Category> tasks = new ArrayList<Category>();
tasks = gson.fromJson(array.toString(), listType);
RuntimeExceptionDao<Category, Integer> simpleDao = getHelper1().getSimpleCategoryDao();
Dao<Category, Integer> categoryDao = databaseHandler.getCategoryDao();
Log.i("categoryDAO",categoryDao.queryForAll().toString());
// getting levels
JSONArray jsonlevels =new JSONArray();
jsonlevels = data.getJSONArray(KEY_LEVELS);
JsonArray levelsarray = parser.parse(jsonlevels.toString()).getAsJsonArray();
Type listlevels = new TypeToken<List<Level>>() {}.getType();
List<Level> levels = new ArrayList<Level>();
levels = gson.fromJson(levelsarray.toString(), listlevels);
Log.i("levelsgson",levels.toString());
RuntimeExceptionDao<Level, Integer> levelDao = getHelper1().getSimpleLevelDao();
Log.i("levelDAO",levelDao.toString());
Dao<Level, Integer> levelsDao = databaseHandler.getLevelDao();
Log.i("levelsDAO",levelsDao.queryForId(3).toString());
我成功获得了类别数据,但是当我想为 Level DAO 实例调用 queryForId() 时出现异常。遇到这样的异常:
java.sql.SQLException: queryForOne from database failed: SELECT * FROM `levels` WHERE `id` = ?
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
at com.j256.ormlite.android.AndroidDatabaseConnection.queryForOne(AndroidDatabaseConnection.java:169)
at com.j256.ormlite.stmt.mapped.MappedQueryForId.execute(MappedQueryForId.java:38)
at com.j256.ormlite.stmt.StatementExecutor.queryForId(StatementExecutor.java:84)
at com.j256.ormlite.dao.BaseDaoImpl.queryForId(BaseDaoImpl.java:219)
at com.assignmentexpert.LoginActivity$1.onClick(LoginActivity.java:119)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: no such table: levels: , while compiling: SELECT * FROM `levels` WHERE `id` = ?
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1324)
at com.j256.ormlite.android.AndroidDatabaseConnection.queryForOne(AndroidDatabaseConnection.java:155)
... 15 more
所以问题是无法创建“级别”表。不明白为什么如果我对类别表使用相同的机制..
经过一些分析,我明白问题出在这个方法中
public void saveContacts(List<Category> contacts) throws SQLException
{
OrmLiteSqliteOpenHelper dbHelper= DatabaseHandler.getInstance(_context);
Dao<Category, Integer> daoContact=dbHelper.getDao(Category.class);
QueryBuilder<Category, Integer> queryBuilder = daoContact.queryBuilder();
Log.i("dao",queryBuilder.selectColumns("title").prepare().toString());
for (Category contact : contacts) {
Log.i("dao",contact.toString());
HelperFactory.GetHelper().getCategoryDao().create(contact);
}
}
在 create() 行上。它抛出这样一组异常:
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.library.DataParsing.saveContacts(DataParsing.java:61)
at com.library.DataParsing.fillCategories(DataParsing.java:45)
at com.library.DatabaseHandler.onCreate(DatabaseHandler.java:85)
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.onCreate(OrmLiteSqliteOpenHelper.java:169)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:126)
at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:63)
at com.j256.ormlite.android.AndroidConnectionSource.getReadOnlyConnection(AndroidConnectionSource.java:51)
at com.j256.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:202)
at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:155)
at com.j256.ormlite.stmt.StatementExecutor.queryForAll(StatementExecutor.java:113)
at com.j256.ormlite.dao.BaseDaoImpl.queryForAll(BaseDaoImpl.java:237)
at com.assignmentexpert.LoginActivity$1.onClick(LoginActivity.java:97)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
请帮忙...
最佳答案
所以 onCreate()
方法在您的应用程序第一次运行时被调用。如果您在以后添加 levels
表(或修改其架构),则需要增加数据库版本,以便可以调用 onUpgrade()
。
您可以从 Android examples 中看到一个典型的辅助模式来自 ORMLite主页。这是 source code for the helper .您的助手中需要类似以下内容。
// any time you make changes to your database objects, you may have to increase
// the database version
private static final int DATABASE_VERSION = 2;
...
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
int oldVersion, int newVersion) {
try {
Log.i(DatabaseHelper.class.getName(), "onUpgrade");
TableUtils.dropTable(connectionSource, SimpleData.class, true);
// after we drop the old databases, we create the new ones
onCreate(db, connectionSource);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);
throw new RuntimeException(e);
}
}
关于android - ORMLite 无法创建第二个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11737214/
使用 ServiceStack.OrmLite,如果查询返回多个结果集,我如何访问所有结果集并将每个结果集分配给相应的 POCO。例如,我有一个包含以下代码的存储过程: SELECT * FROM U
首先,我是 ORMLite 的新手。我希望我的模型类有一个字段,它是一个字符串列表,最终将保存我的模型对象的标签列表。 我应该使用哪些 ORMLite 注释? 首先我不想拥有所有标签的表格,然后使用
在 Ormlite 中,是否可以在不编写实际 SQL 的情况下进行不区分大小写的查询? 例如,如果我正在寻找 列名 - “账户名” 并查询该列,如果我搜索“金融”,我想获得所有“金融”、“金融”、“金
我最近开始使用 ServiceStack 及其 ORMLite 框架。我在谷歌上搜索并浏览了源代码,但找不到任何相关内容。 使用 ORMLite 执行查询时,有没有办法选择特定的列? 类似的东西:Db
我正在寻找一种在 ormlite 中实现分页的好方法,我发现了另一个 question ,其中包含以下代码段: var data = db.Select(predicate).Skip((int) p
这是 Entity Framework : var department = _context.Departments .Include(dep => dep.Empl
我有一张 table CREATE TABLE [dbo].[ServiceTestCase]( [SSN] [int] IDENTITY(600000001,1) NOT NULL,
有没有办法用 servicestack/ormlite 预加载所有嵌套和子嵌套引用? public class Person { public int Id { get; set; }
继 this comment ,如何执行 ServiceStack OrmLite 查询来连接两个或多个表并从每个表中返回一些列? 使用 OrmLite Does_only_populate_Sele
我想知道是否可以查明 ORMLite 的 dao.createOrUpdate() 方法是否实际创建或更新了表行。有一个结果对象(CreateOrUpdateStatus),其中包含这些信息,但所有指
有什么方法可以返回 ServiceStack.OrmLite 中的表的子集吗? 像这样的东西: public class MyStuff { public Guid Id { get; set
使用 ormLite 我可以通过以下方式获取所有记录: myDao.queryForAll(); 如何只获取前 10 条记录而不是所有记录? 最佳答案 您必须使用 QueryBuilder 并设置限制
我正在 ServiceStack 的 OrmLite 中编写分页查询,选择页面范围内的总记录数和记录 ID。假设 query 是一些任意的 SqlExpression 选择一堆记录: var idQu
我正在努力用 ServiceStack 的 ORMLite 替换现有的“重型”商业 ORM。在重型 ORM 中,我们有能力 Hook “OnSaving”或“BeforeSaving”方法以在保存到数
我正在尝试 ServiceStack OrmLite,但现在我被这个异常难住了:A first chance exception of type 'System.NullReferenceExcept
我正在尝试 Ormlite。我发现当我插入一个带有 DateTime 属性的对象时,ormlite 应用它得到 -8:00 (我的时区是 +8)。应按字面意思插入时间。就我而言,它已经是 UTC。 但
我正在对现有的 SQL Server 数据库使用 OrmLite,该数据库已发布用于访问的存储过程。这些 SP 之一采用 3 个 int 参数,但期望其中一个或另一个为空。但是,没有任何参数被声明为可
我正在为数据可视化做一些查询,并依靠 GroupBy、Avg、Sum 和类似函数从数据库中获取良好的数据集。 我想在 ServiceStack OrmLite 中使用类似于 GroupBy 的东西。关
我希望使用 ORMLite 按多个别名表进行分组,但我似乎遇到了问题。 当在 SqlExpression 的 GroupBy 中使用具有匿名类型的 Sql.TableAlias 时,为 group b
这个周末我才第一次发现 ServiceStack,我觉得它非常棒。因此,我已经在将我所有的项目转换为它。然后我遇到了一个小障碍。 我找不到任何提到使用 OrmLite 首先从数据库开始然后将现有模式映
我是一名优秀的程序员,十分优秀!