Sql 不支持的操作异常mybatis
在这段代码中,我想要的是一个来自外部的随机SQL查询,它将被加载到一个属性文件中。到现在为止,我已经有了一个属性文件,其中包含一个查询来测试这一点。所以我想要一些数据,标题和下面的所有数据。基本上只是数据开始,就像这个测试应该做的那样。但是我得到了下面链接的错误消息。我一辈子都搞不清楚我的问题在哪里。请帮忙!:) 我有以下代码 DataHandler类Sql 不支持的操作异常mybatis,sql,exception-handling,mybatis,Sql,Exception Handling,Mybatis,在这段代码中,我想要的是一个来自外部的随机SQL查询,它将被加载到一个属性文件中。到现在为止,我已经有了一个属性文件,其中包含一个查询来测试这一点。所以我想要一些数据,标题和下面的所有数据。基本上只是数据开始,就像这个测试应该做的那样。但是我得到了下面链接的错误消息。我一辈子都搞不清楚我的问题在哪里。请帮忙!:) 我有以下代码 DataHandler类 public class DataHandler{ DataService dataService = new DataService();
public class DataHandler{
DataService dataService = new DataService();
public String getPropertyValue() throws IOException {
Properties prop = new Properties();
String propFileName = "randomSqlQuery.properties";
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);
prop.load(inputStream);
if (inputStream == null) {
throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
}
String result = prop.getProperty("sqlQuery");
return result;
}
public Data getKeysAndValues() throws IOException {
String query = getPropertyValue();
List<List<Object>> randomSqlQuery = dataService.getRandomSqlQuery(query);
List<List<Object>> recordList = new ArrayList<>();
List<String> headline = new ArrayList();
if (randomSqlQuery != null && randomSqlQuery.size() > 0) {
{
List<Object> record = randomSqlQuery.get(0);
getHeadlines(record, headline);
}
for (int i = 1; i < randomSqlQuery.size(); i++) {
List<Object> singleRecord = randomSqlQuery.get(i);
recordList.add(singleRecord);
System.out.println(recordList);
}
}
return new DataImpl(headline, recordList);
}
private void getHeadlines(List<Object> record, List<String> headline) {
for (Object headlineName : record) {
headline.add((String) headlineName);
System.out.println(headlineName);
}
}
}
这是我的错误
### Error querying database. Cause: java.lang.UnsupportedOperationException
### The error may exist in nd/mappers/DataMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT * FROM PERSON ### Cause: java.lang.UnsupportedOperationException
org.apache.ibatis.exceptions.PersistenceException
### Error querying database. Cause: java.lang.UnsupportedOperationException
### The error may exist in nd/mappers/DataMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT * FROM PERSON
### Cause: java.lang.UnsupportedOperationException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111)
不知道该怎么办。SQL来自属性文件。很抱歉收到了大量的文本。我刚刚解决了相同的错误消息。问题在于:
<select id="getRandomSqlQuery" resultType="Person">
${query}
</select>
此外,您还需要在此处检查null
:
try {
DataMapper dataMapper = qlSession.getMapper(DataMapper.class);
return dataMapper.getRandomSqlQuery(query);
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
就我所使用的MyBatis而言,传递参数的语法是#{query},而不是${query}。请检查错误是否与此更改不同。若要传递@Param(“query”)之类的参数,我需要使用${query},否则,我会得到如下错误:MySQLSyntaxErrorException,它也找不到我的sqlquery。可悲的是,事实并非如此=(好的..我刚刚检查了DefaultSqlSession.java的selectList方法,该方法期望List作为返回类型。List可能不受支持。请尝试使用List,然后相应地处理该对象。查看现在是否有任何错误。感谢帮助,我们刚刚从另一个站点获得了一些帮助,尝试将其作为hashmap返回,然后转换为List。
public class DataService implements DataMapper {
@Override
public List<List<Object>> getRandomSqlQuery(String query) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try {
DataMapper dataMapper = sqlSession.getMapper(DataMapper.class);
return dataMapper.getRandomSqlQuery(query);
} finally {
sqlSession.close();
}
}
}
//dataHandler instantiated in top
@Test
public void getKeysAndValues() throws IOException {
dataHandler.getKeysAndValues();
}
### Error querying database. Cause: java.lang.UnsupportedOperationException
### The error may exist in nd/mappers/DataMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT * FROM PERSON ### Cause: java.lang.UnsupportedOperationException
org.apache.ibatis.exceptions.PersistenceException
### Error querying database. Cause: java.lang.UnsupportedOperationException
### The error may exist in nd/mappers/DataMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT * FROM PERSON
### Cause: java.lang.UnsupportedOperationException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111)
<select id="getRandomSqlQuery" resultType="Person">
${query}
</select>
<typeAliases>
<typeAlias alias="Person" type="com.example.bean.Book"/>
</typeAliases>
try {
DataMapper dataMapper = qlSession.getMapper(DataMapper.class);
return dataMapper.getRandomSqlQuery(query);
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}