当前位置: 首页 > 面试题库 >

使用ORMLite进行SQL异常准备查询

松嘉运
2023-03-14
问题内容

我正在使用ORM(ORMlite),并且所有通话都进展顺利,直到出现以下错误。

线程“主”中的异常org.h2.jdbc.JdbcSQLException:SQL语句“ SELECT * FROM”“ STORIES”“
WHERE”“ TITLE”“ =’Deepcut大小写导致’NOT FOLLOWED [*]”“; SQL语句:SELECT * FROM
StoriesWHEREtitle=’在org.h2.message.DbException.get(DbException.java:167)处org.h2.message.DbException.getJdbcSQLException(DbException.java:327)的’Deepcut
case导致’not follow’[42000-152]
org.h2.message.DbException.getSyntaxError(DbException.java:179)的org.h2.message.DbException.get(DbException.java:144)org.h2.command.Parser.getSyntaxError(Parser.java:480)的org.h2.message.DbException.getSyntaxError(DbException.java:179)在org.h2.engine.Session.prepareCommand(Session.java:374)在org.h2.engine.Session.prepareLocal(Session.java:426)的org.h2.command.Parser.prepareCommand(Parser.java:229)
)于org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.prepareCommand(JdbcConnection.java:1093)于org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:71)处。com.j256.ormlite.jdbc.JdbcDatabaseConnection.compileStatement(JdbcDatabaseConnection.java:83)处com.j256.ormlite.stmt.mapped.MappedPreparedStmt.compile(MappedPreparedStmt.java:44)处com.j256.ormlite
com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:119)上的com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:189)上的.stmt.StatementExecutor.buildIterator(StatementExecutor.java:169)
)119)com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:189)119)com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:189)

我对发生的事情感到困惑。我从这些行中调用搜索:

// get our query builder from the DAO
QueryBuilder<Story, Integer> queryBuilder = StoryDao.queryBuilder();
// the 'title' field must be equal to title (a variable)
queryBuilder.where().eq(Story.TITLE_FIELD_NAME, title);
// prepare our sql statement
PreparedQuery<Story> preparedQuery = queryBuilder.prepare();
// query for all stories that have that title
List<Story> accountList = StoryDao.query(preparedQuery);

问题答案:

SQL语句“ SELECT * FROM”“ STORIES”“ WHERE”“ TITLE”“中的语法错误…

@bemace是正确的,因为标题中似乎有引号正在加紧查询所生成的字符串的转义。

在ORMLite中,您应该使用该SelectArg功能,该功能将使用SQL生成查询?参数,然后将字符串直接传递给准备好的语句。

请参阅上的文档SelectArg。有了它,您将执行以下操作:

QueryBuilder<Story, Integer> queryBuilder = StoryDao.queryBuilder();
SelectArg titleArg = new SelectArg();
queryBuilder.where().eq(Story.TITLE_FIELD_NAME, titleArg);
PreparedQuery<Story> preparedQuery = queryBuilder.prepare();
titleArg.setValue(title);
List<Story> accountList = StoryDao.query(preparedQuery);


 类似资料:
  • 问题内容: 我正在使用Jesey在Java(JAX-RS)中实现Restful Web Service。我在Tomcat v7.0上运行它,我使用Hibernate将数据映射到数据库(MySQL)。我有一个查询来获取可交付成果的列表: 它给了我一百个可交付成果,但我想在Task表中拥有前三名。感谢您的帮助。如何修改查询? 请注意,这三个可交付成果不应重复。 与@FGreg答案存在冲突。当我使用这些

  • 我正在尝试编写一个静态类的单元测试。我实际上想验证那个类上的一个方法是否被调用。 我的测试编译了,但是当我运行它时,我得到了这个异常: 但是,我的类在注释中。我的类是一个抽象类,但它在其中定义了几个静态方法。无法更改。 ServiceRunnerBase是一个抽象类,具有以下内容(我不能发布代码,它是专有的) 私有静态成员,有些成员用标记 静态方法,有些是私有的,有些是受保护的,有些是公共的 我试

  • 问题内容: 我正在尝试在SQL Server中解析以下xml,以获取所有3个ID 使用查询 我得到的结果为100010011002,但我想将结果显示为一列或CSV格式。 任何帮助都将得到应用。 问题答案: 使用MS SQL Server,这将为您提供行。 如果只需要一个值(如本例中所示),则在节点上切碎的速度要快得多(三倍)。

  • 我正在为spring批处理使用java配置(spring boot)。我有一个员工Id列表,对于每个Id,我需要运行一个查询(如下所示),然后处理数据。 我知道我们可以使用阅读器。setPreparedStatementSetter动态设置上述SQL中的参数。但是,我不确定如何对列表中的每个员工id重复批处理过程。即使我将reader()标记为@StepScope,也只会调用一次reader。(即

  • 使用 Raw SQL 查询,无需使用 ORM 表定义 多数据库,都可直接使用占位符号 ?,自动转换 查询时的参数,支持使用 Model Struct 和 Slice, Array ids := []int{1, 2, 3} p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids) 创建一个 RawSeter o := orm.NewOrm