//这是提示错误的代码
/**
* 获取我的订单的所有订单信息
*/
@Override
public List<Order> FindAllByPage(int currPage, int pageSize, String uid)
throws Exception {
QueryRunner queryRunner = new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from orders where uid = ? order by ordertime desc limit ?,?"; //获取到我的所有订单 但还差订单项 List<Order> list = queryRunner.query(sql,new BeanListHandler<>(Order.class),uid,(currPage-1)*pageSize,pageSize); //获取每个订单的订单项 因为在页面展示时也需展示订单项中商品的属性 所以使用了内联接
sql ="select * from orderitem oi,product p where oi.pid=p.pid and oi.oid = ? ";
for (Order order : list) {
//通过订单的id获取每个订单中的订单项
List<Map<String, Object>> mList = queryRunner.query(sql,new MapListHandler(),order.getOid());
//封装porduct,订单项
Product product = new Product();
OrderItem orderItem = new OrderItem();
for (Map<String, Object> map : mList) {
BeanUtils.populate(product, map);
BeanUtils.populate(orderItem, map);
}
//设置订单项中还未赋值的bean属性
orderItem.setPid(product);
orderItem.setOid(order);
//将订单项对象放入订单对象中的list集合
order.getOrderItems().add(orderItem);
}
return list;
}
//这是提示的异常信息
Caused by: java.sql.SQLException: Cannot set uid: incompatible types. Query: select * from orders where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:320)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:349)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:287)
at com.itheima.dao.impl.OrderDaoImpl.FindAllByPage(OrderDaoImpl.java:77)
at com.itheima.service.impl.OrderServiceImpl.findAllByPage(OrderServiceImpl.java:56)
at com.itheima.servlet.OrderServlet.findAllByPage(OrderServlet.java:106)
... 28 more
//还有一些日志信息 今天早上清理了一下项目的缓存才有的
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
严重: The web application [/store] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/store] appears to have started a thread named [Timer-4] but has failed to stop it. This is very likely to create a memory leak.
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/store] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] but has failed to stop it. This is very likely to create a memory leak.
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/store] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1] but has failed to stop it. This is very likely to create a memory leak.
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/store] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] but has failed to stop it. This is very likely to create a memory leak.
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/store] appears to have started a thread named [Timer-5] but has failed to stop it. This is very likely to create a memory leak.
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/store] appears to have started a thread named [Timer-6] but has failed to stop it. This is very likely to create a memory leak.
八月 31, 2017 8:34:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/store] appears to have started a thread named [Timer-7] but has failed to stop it. This is very likely to create a memory leak.
这个问题困扰了我两天了,若您有任何见解,可以进行评论,我会非常感谢您的。
41 个解决方案
#1
顶帖顶帖顶帖顶帖
#2
顶帖顶帖顶帖顶帖顶帖顶帖
#3
从你错误信息看Caused by: java.sql.SQLException: Cannot set uid: incompatible types. Query: select * from orders where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
是uid类型与数据库中的类型不匹配啊
java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order where uid = '0A67CD5136EF46D286DCDDEE2C4B60B9' order by ordertime desc lim' at line 1 Query: select * from Order where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
不对啊
#14
顶顶顶顶顶!!!!!!!
#15
sql语句中写表映射的实体类名称,不要写表名
java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order where uid = '0A67CD5136EF46D286DCDDEE2C4B60B9' order by ordertime desc lim' at line 1 Query: select * from Order where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
不对啊
order是关键字,别用做表名,或者`order`
#16
sql语句中写表映射的实体类名称,不要写表名
java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order where uid = '0A67CD5136EF46D286DCDDEE2C4B60B9' order by ordertime desc lim' at line 1 Query: select * from Order where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
不对啊
order是关键字,别用做表名,或者`order`
额 没有用order做表名,我那个Order是实体类。
#17
顶帖顶帖顶帖
#18
把你QueryRunner.query方法贴出来看下
#19
看看你的传参和以下例子有什么区别
1 List<Topic> topicList=new ArrayList<Topic>();
2 QueryRunner runner= new QueryRunner(JdbcUtil.getDataSource());
3 String sql ="select * from topic where type_id= ? order by time desc";
4 Object[] params={typeId};
5 topicList=runner.query(sql, new BeanListHandler<Topic>(Topic.class),params);
6 return topicList;
#20
select * from product where cid = ? limit ?,?
上面这条语句我放在这就可以执行
String sql="select * from orders where uid = ? order by ordertime desc limit ?,?";
//获取到我的所有订单 但还差订单项
List<Order> list = queryRunner.query(sql,new BeanListHandler<>(Order.class),uid,(currPage-1)*pageSize,pageSize);
似乎不是代码的问题
1 List<Topic> topicList=new ArrayList<Topic>();
2 QueryRunner runner= new QueryRunner(JdbcUtil.getDataSource());
3 String sql ="select * from topic where type_id= ? order by time desc";
4 Object[] params={typeId};
5 topicList=runner.query(sql, new BeanListHandler<Topic>(Topic.class),params);
6 return topicList;
1.你是new出来的集合在去接收
2. 第四部我不明白是是什么
#23
应该是传参的问题,帮你找了个例子
/**
216. * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
217. *
218. * @param sql
219. * sql语句
220. * @param params
221. * 参数数组
222. * @return 查询结果
223. */
224. @SuppressWarnings("unchecked")
225. public List<Map<String, Object>> findPage(String sql, int page, int count, Object... params) {
226. sql = sql + " LIMIT ?,?";
227. queryRunner = new QueryRunner(dataSource);
228. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
229. try {
230. if (params == null) {
231. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), new Integer[] { page,
232. count });
233. } else {
234. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), ArrayUtils.addAll(
235. params, new Integer[] { page, count }));
236. }
237. } catch (SQLException e) {
238. e.printStackTrace();
239. LOG.error("map 数据分页查询错误", e);
240. }
241. return list;
242. }
#24
应该是传参的问题,帮你找了个例子
/**
216. * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
217. *
218. * @param sql
219. * sql语句
220. * @param params
221. * 参数数组
222. * @return 查询结果
223. */
224. @SuppressWarnings("unchecked")
225. public List<Map<String, Object>> findPage(String sql, int page, int count, Object... params) {
226. sql = sql + " LIMIT ?,?";
227. queryRunner = new QueryRunner(dataSource);
228. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
229. try {
230. if (params == null) {
231. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), new Integer[] { page,
232. count });
233. } else {
234. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), ArrayUtils.addAll(
235. params, new Integer[] { page, count }));
236. }
237. } catch (SQLException e) {
238. e.printStackTrace();
239. LOG.error("map 数据分页查询错误", e);
240. }
241. return list;
242. }
应该是传参的问题,帮你找了个例子
/**
216. * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
217. *
218. * @param sql
219. * sql语句
220. * @param params
221. * 参数数组
222. * @return 查询结果
223. */
224. @SuppressWarnings("unchecked")
225. public List<Map<String, Object>> findPage(String sql, int page, int count, Object... params) {
226. sql = sql + " LIMIT ?,?";
227. queryRunner = new QueryRunner(dataSource);
228. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
229. try {
230. if (params == null) {
231. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), new Integer[] { page,
232. count });
233. } else {
234. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), ArrayUtils.addAll(
235. params, new Integer[] { page, count }));
236. }
237. } catch (SQLException e) {
238. e.printStackTrace();
239. LOG.error("map 数据分页查询错误", e);
240. }
241. return list;
242. }
//我按照那个案例去写了下
list = queryRunner.query(sql,new BeanListHandler<>(Order.class),ArrayUtils.addAll(new String[]{(uid)}, new String[] { Integer.toString((currPage-1)*pageSize), Integer.toString(pageSize) }));
//错误还是一样的。。
y: java.sql.SQLException: Cannot set uid: incompatible types. Query: select * from orders where uid = ? order by ordertime desc limit ? , ? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:320)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:349)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:287)
at com.itheima.dao.impl.OrderDaoImpl.FindAllByPage(OrderDaoImpl.java:78)
at com.itheima.service.impl.OrderServiceImpl.findAllByPage(OrderServiceImpl.java:56)
at com.itheima.servlet.OrderServlet.findAllByPage(OrderServlet.java:107)
... 28 more
.//写这句会报错
select * from orders order by ordertime desc
//写这句不会报错 参数也能传递过去
select * from product where cid = ? limit ?,?
//参数我用的都是一样的
list = queryRunner.query(sql,new BeanListHandler<>(Order.class),ArrayUtils.addAll(new String[]{(uid)}, new String[] { Integer.toString((currPage-1)*pageSize), Integer.toString(pageSize) }));
好像是orders表的问题
#29
select * from`orders` order by ordertime desc
你这样写试试
#30
//报出了这个异常
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''orders' order by ordertime desc' at line 1 Query: select * from 'orders' order by ordertime desc Parameters: []
#31
select * from`orders` order by ordertime desc
你这样写试试
//报出了这个异常
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''orders' order by ordertime desc' at line 1 Query: select * from 'orders' order by ordertime desc Parameters: []
//现在不设uid都这个错误
String sql = "select * from orders";
List<Order> list = new ArrayList<Order>();
list = queryRunner.query(sql,new BeanListHandler<>(Order.class));
异常:
Cannot set uid: incompatible types. Query: select * from orders Parameters: []
您分析的很有道理,我也想过,但不是java中这个uid的错误,
//只有有关查询这两个表才会报异常
select * from orders
select * from user
写其他的表的查询语句是可以使用的
//写这句不但不会报错 参数也能传递过去 说明不是uid的问题
select * from product where cid = ? limit ?,?
//参数我用的都是一样的
list = queryRunner.query(sql,new BeanListHandler<>(Order.class),ArrayUtils.addAll(new String[]{(uid)}, new String[] { Integer.toString((currPage-1)*pageSize), Integer.toString(pageSize) }));
#35
也不是数据库的错误,因为我在数据库中查询所有表的数据都能查的出来
#36
select * from`orders` order by ordertime desc
你这样写试试
//报出了这个异常
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''orders' order by ordertime desc' at line 1 Query: select * from 'orders' ’order by ordertime desc Parameters: []
java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order where uid = '0A67CD5136EF46D286DCDDEE2C4B60B9' order by ordertime desc lim' at line 1 Query: select * from Order where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
不对啊
#14
顶顶顶顶顶!!!!!!!
#15
sql语句中写表映射的实体类名称,不要写表名
java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order where uid = '0A67CD5136EF46D286DCDDEE2C4B60B9' order by ordertime desc lim' at line 1 Query: select * from Order where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
不对啊
order是关键字,别用做表名,或者`order`
#16
sql语句中写表映射的实体类名称,不要写表名
java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order where uid = '0A67CD5136EF46D286DCDDEE2C4B60B9' order by ordertime desc lim' at line 1 Query: select * from Order where uid = ? order by ordertime desc limit ?,? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
不对啊
order是关键字,别用做表名,或者`order`
额 没有用order做表名,我那个Order是实体类。
#17
顶帖顶帖顶帖
#18
把你QueryRunner.query方法贴出来看下
#19
看看你的传参和以下例子有什么区别
1 List<Topic> topicList=new ArrayList<Topic>();
2 QueryRunner runner= new QueryRunner(JdbcUtil.getDataSource());
3 String sql ="select * from topic where type_id= ? order by time desc";
4 Object[] params={typeId};
5 topicList=runner.query(sql, new BeanListHandler<Topic>(Topic.class),params);
6 return topicList;
#20
select * from product where cid = ? limit ?,?
上面这条语句我放在这就可以执行
String sql="select * from orders where uid = ? order by ordertime desc limit ?,?";
//获取到我的所有订单 但还差订单项
List<Order> list = queryRunner.query(sql,new BeanListHandler<>(Order.class),uid,(currPage-1)*pageSize,pageSize);
似乎不是代码的问题
1 List<Topic> topicList=new ArrayList<Topic>();
2 QueryRunner runner= new QueryRunner(JdbcUtil.getDataSource());
3 String sql ="select * from topic where type_id= ? order by time desc";
4 Object[] params={typeId};
5 topicList=runner.query(sql, new BeanListHandler<Topic>(Topic.class),params);
6 return topicList;
1.你是new出来的集合在去接收
2. 第四部我不明白是是什么
#23
应该是传参的问题,帮你找了个例子
/**
216. * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
217. *
218. * @param sql
219. * sql语句
220. * @param params
221. * 参数数组
222. * @return 查询结果
223. */
224. @SuppressWarnings("unchecked")
225. public List<Map<String, Object>> findPage(String sql, int page, int count, Object... params) {
226. sql = sql + " LIMIT ?,?";
227. queryRunner = new QueryRunner(dataSource);
228. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
229. try {
230. if (params == null) {
231. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), new Integer[] { page,
232. count });
233. } else {
234. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), ArrayUtils.addAll(
235. params, new Integer[] { page, count }));
236. }
237. } catch (SQLException e) {
238. e.printStackTrace();
239. LOG.error("map 数据分页查询错误", e);
240. }
241. return list;
242. }
#24
应该是传参的问题,帮你找了个例子
/**
216. * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
217. *
218. * @param sql
219. * sql语句
220. * @param params
221. * 参数数组
222. * @return 查询结果
223. */
224. @SuppressWarnings("unchecked")
225. public List<Map<String, Object>> findPage(String sql, int page, int count, Object... params) {
226. sql = sql + " LIMIT ?,?";
227. queryRunner = new QueryRunner(dataSource);
228. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
229. try {
230. if (params == null) {
231. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), new Integer[] { page,
232. count });
233. } else {
234. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), ArrayUtils.addAll(
235. params, new Integer[] { page, count }));
236. }
237. } catch (SQLException e) {
238. e.printStackTrace();
239. LOG.error("map 数据分页查询错误", e);
240. }
241. return list;
242. }
应该是传参的问题,帮你找了个例子
/**
216. * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
217. *
218. * @param sql
219. * sql语句
220. * @param params
221. * 参数数组
222. * @return 查询结果
223. */
224. @SuppressWarnings("unchecked")
225. public List<Map<String, Object>> findPage(String sql, int page, int count, Object... params) {
226. sql = sql + " LIMIT ?,?";
227. queryRunner = new QueryRunner(dataSource);
228. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
229. try {
230. if (params == null) {
231. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), new Integer[] { page,
232. count });
233. } else {
234. list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), ArrayUtils.addAll(
235. params, new Integer[] { page, count }));
236. }
237. } catch (SQLException e) {
238. e.printStackTrace();
239. LOG.error("map 数据分页查询错误", e);
240. }
241. return list;
242. }
//我按照那个案例去写了下
list = queryRunner.query(sql,new BeanListHandler<>(Order.class),ArrayUtils.addAll(new String[]{(uid)}, new String[] { Integer.toString((currPage-1)*pageSize), Integer.toString(pageSize) }));
//错误还是一样的。。
y: java.sql.SQLException: Cannot set uid: incompatible types. Query: select * from orders where uid = ? order by ordertime desc limit ? , ? Parameters: [0A67CD5136EF46D286DCDDEE2C4B60B9, 0, 3]
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:320)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:349)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:287)
at com.itheima.dao.impl.OrderDaoImpl.FindAllByPage(OrderDaoImpl.java:78)
at com.itheima.service.impl.OrderServiceImpl.findAllByPage(OrderServiceImpl.java:56)
at com.itheima.servlet.OrderServlet.findAllByPage(OrderServlet.java:107)
... 28 more
.//写这句会报错
select * from orders order by ordertime desc
//写这句不会报错 参数也能传递过去
select * from product where cid = ? limit ?,?
//参数我用的都是一样的
list = queryRunner.query(sql,new BeanListHandler<>(Order.class),ArrayUtils.addAll(new String[]{(uid)}, new String[] { Integer.toString((currPage-1)*pageSize), Integer.toString(pageSize) }));
好像是orders表的问题
#29
select * from`orders` order by ordertime desc
你这样写试试
#30
//报出了这个异常
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''orders' order by ordertime desc' at line 1 Query: select * from 'orders' order by ordertime desc Parameters: []
#31
select * from`orders` order by ordertime desc
你这样写试试
//报出了这个异常
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''orders' order by ordertime desc' at line 1 Query: select * from 'orders' order by ordertime desc Parameters: []
//现在不设uid都这个错误
String sql = "select * from orders";
List<Order> list = new ArrayList<Order>();
list = queryRunner.query(sql,new BeanListHandler<>(Order.class));
异常:
Cannot set uid: incompatible types. Query: select * from orders Parameters: []
您分析的很有道理,我也想过,但不是java中这个uid的错误,
//只有有关查询这两个表才会报异常
select * from orders
select * from user
写其他的表的查询语句是可以使用的
//写这句不但不会报错 参数也能传递过去 说明不是uid的问题
select * from product where cid = ? limit ?,?
//参数我用的都是一样的
list = queryRunner.query(sql,new BeanListHandler<>(Order.class),ArrayUtils.addAll(new String[]{(uid)}, new String[] { Integer.toString((currPage-1)*pageSize), Integer.toString(pageSize) }));
#35
也不是数据库的错误,因为我在数据库中查询所有表的数据都能查的出来
#36
select * from`orders` order by ordertime desc
你这样写试试
//报出了这个异常
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''orders' order by ordertime desc' at line 1 Query: select * from 'orders' ’order by ordertime desc Parameters: []