Error adding expenses using Mysql

7 views
Skip to first unread message

javier

unread,
Aug 14, 2009, 3:29:35 AM8/14/09
to The Lift Book
Hi.

I can add expenses fine when my db is h2 or postgresql, but get an
error (Unknown column 'Expense.dateOf' in 'where clause') when using
mysql. To get mysql working I added this to my pom.xml:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.5</version>
</dependency>
and this to my Boot.scala:
Class.forName("com.mysql.jdbc.Driver");
val dm = DriverManager.getConnection("jdbc:mysql://localhost/
pocketchangeapp","user","pass")

Everything works fine except adding new expenses, I get "Unknown
column 'Expense.dateOf' in 'where clause'" even if there is a dateof
column of type datetime in the expense table. This is the complete
stack trace:
Exception occured while processing /
Message: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown
column 'Expense.dateOf' in 'where clause'
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
com.mysql.jdbc.PreparedStatement.executeInternal
(PreparedStatement.java:1268)
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
1403)
net.liftweb.mapper.DB$$anonfun$exec$3.apply(DB.scala:267)
net.liftweb.mapper.DB$$anonfun$exec$3.apply(DB.scala:266)
net.liftweb.util.TimeHelpers$class.calcTime(TimeHelpers.scala:241)
net.liftweb.util.Helpers$.calcTime(Helpers.scala:29)
net.liftweb.mapper.DB$.exec(DB.scala:266)
net.liftweb.mapper.MetaMapper$$anonfun$findMapFieldDb$1$$anonfun$apply
$9.apply(MetaMapper.scala:309)
net.liftweb.mapper.MetaMapper$$anonfun$findMapFieldDb$1$$anonfun$apply
$9.apply(MetaMapper.scala:307)
net.liftweb.mapper.DB$$anonfun$prepareStatement$1.apply(DB.scala:281)
net.liftweb.mapper.DB$$anonfun$prepareStatement$1.apply(DB.scala:277)
net.liftweb.util.TimeHelpers$class.calcTime(TimeHelpers.scala:241)
net.liftweb.util.Helpers$.calcTime(Helpers.scala:29)
net.liftweb.mapper.DB$.prepareStatement(DB.scala:277)
net.liftweb.mapper.MetaMapper$$anonfun$findMapFieldDb$1.apply
(MetaMapper.scala:306)
net.liftweb.mapper.MetaMapper$$anonfun$findMapFieldDb$1.apply
(MetaMapper.scala:298)
net.liftweb.mapper.DB$.use(DB.scala:305)
net.liftweb.mapper.MetaMapper$class.findMapFieldDb(MetaMapper.scala:
297)
com.pocketchangeapp.model.Expense$.findMapFieldDb(Expense.scala:162)
net.liftweb.mapper.MetaMapper$class.findMapDb(MetaMapper.scala:293)
com.pocketchangeapp.model.Expense$.findMapDb(Expense.scala:162)
net.liftweb.mapper.MetaMapper$class.findAll(MetaMapper.scala:259)
com.pocketchangeapp.model.Expense$.findAll(Expense.scala:162)
com.pocketchangeapp.model.Expense$.getByAcct(Expense.scala:191)
com.pocketchangeapp.model.Expense$.getLastExpenseData(Expense.scala:
199)
com.pocketchangeapp.snippet.AddEntry.doTagsAndSubmit$1(AddEntry.scala:
46)
com.pocketchangeapp.snippet.AddEntry$$anonfun$add$7.apply
(AddEntry.scala:88)
com.pocketchangeapp.snippet.AddEntry$$anonfun$add$7.apply
(AddEntry.scala:88)
net.liftweb.http.S$SFuncHolder$$anonfun$apply$45.apply(S.scala:911)
net.liftweb.http.S$SFuncHolder$$anonfun$apply$45.apply(S.scala:911)
scala.List.map(List.scala:805)
net.liftweb.http.S$SFuncHolder.apply(S.scala:911)
net.liftweb.http.LiftSession$$anonfun$buildFunc$1$2.apply
(LiftSession.scala:307)
net.liftweb.http.LiftSession$$anonfun$5$$anonfun$apply$19.apply
(LiftSession.scala:322)
net.liftweb.http.LiftSession$$anonfun$5$$anonfun$apply$19.apply
(LiftSession.scala:322)
scala.List.map(List.scala:805)
net.liftweb.http.LiftSession$$anonfun$5.apply(LiftSession.scala:322)
net.liftweb.http.LiftSession$$anonfun$5.apply(LiftSession.scala:311)
scala.List.flatMap(List.scala:1125)
net.liftweb.http.LiftSession.runParams(LiftSession.scala:311)
net.liftweb.http.LiftSession.processRequest(LiftSession.scala:449)
net.liftweb.http.LiftServlet.net$liftweb$http$LiftServlet$
$dispatchStatefulRequest(LiftServlet.scala:244)
net.liftweb.http.LiftServlet$$anonfun$2.apply(LiftServlet.scala:176)
net.liftweb.http.LiftServlet$$anonfun$2.apply(LiftServlet.scala:176)
net.liftweb.http.S$.net$liftweb$http$S$$wrapQuery(S.scala:398)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_nest2InnerInit$1$
$anonfun$apply$16.apply(S.scala:453)
net.liftweb.http.S$.net$liftweb$http$S$$doAround(S.scala:372)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_nest2InnerInit
$1.apply(S.scala:451)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$.net$liftweb$http$S$$_nest2InnerInit(S.scala:450)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun
$apply$19$$anonfun$apply$20$$anonfun$apply$21$$anonfun$apply$22$
$anonfun$apply$23$$anonfun$apply$24.apply(S.scala:471)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun
$apply$19$$anonfun$apply$20$$anonfun$apply$21$$anonfun$apply$22$
$anonfun$apply$23.apply(S.scala:470)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun
$apply$19$$anonfun$apply$20$$anonfun$apply$21$$anonfun$apply$22.apply
(S.scala:469)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun
$apply$19$$anonfun$apply$20$$anonfun$apply$21.apply(S.scala:468)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun
$apply$19$$anonfun$apply$20.apply(S.scala:467)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun
$apply$19.apply(S.scala:466)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1.apply
(S.scala:465)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$.net$liftweb$http$S$$_innerInit(S.scala:464)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$27$$anonfun$apply
$28$$anonfun$apply$29$$anonfun$apply$30.apply(S.scala:495)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$27$$anonfun$apply
$28$$anonfun$apply$29.apply(S.scala:494)
net.liftweb.http.RequestVarHandler$.apply(Vars.scala:191)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$27$$anonfun$apply
$28.apply(S.scala:493)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$27.apply(S.scala:
492)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$$anonfun$_init$1.apply(S.scala:491)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.S$._init(S.scala:490)
net.liftweb.http.S$.init(S.scala:334)
net.liftweb.http.LiftServlet.doService(LiftServlet.scala:175)
net.liftweb.http.LiftServlet$$anonfun$doIt$1$1.apply
(LiftServlet.scala:104)
net.liftweb.http.LiftServlet$$anonfun$doIt$1$1.apply
(LiftServlet.scala:104)
net.liftweb.util.TimeHelpers$class.calcTime(TimeHelpers.scala:241)
net.liftweb.util.Helpers$.calcTime(Helpers.scala:29)
net.liftweb.util.TimeHelpers$class.logTime(TimeHelpers.scala:250)
net.liftweb.util.Helpers$.logTime(Helpers.scala:29)
net.liftweb.http.LiftServlet.doIt$1(LiftServlet.scala:103)
net.liftweb.http.LiftServlet.service(LiftServlet.scala:112)
net.liftweb.http.LiftFilterTrait$$anonfun$doFilter$1$$anonfun$apply
$22.apply(LiftServlet.scala:525)
net.liftweb.http.LiftFilterTrait$$anonfun$doFilter$1$$anonfun$apply
$22.apply(LiftServlet.scala:525)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.URLRewriter$.doWith(Req.scala:390)
net.liftweb.http.LiftFilterTrait$$anonfun$doFilter$1.apply
(LiftServlet.scala:524)
net.liftweb.http.LiftFilterTrait$$anonfun$doFilter$1.apply
(LiftServlet.scala:518)
net.liftweb.http.RequestVarHandler$$anonfun$apply$3$$anonfun$apply$4$
$anonfun$apply$5$$anonfun$apply$6.apply(Vars.scala:197)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.RequestVarHandler$$anonfun$apply$3$$anonfun$apply$4$
$anonfun$apply$5.apply(Vars.scala:196)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.RequestVarHandler$$anonfun$apply$3$$anonfun$apply
$4.apply(Vars.scala:195)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.RequestVarHandler$$anonfun$apply$3.apply(Vars.scala:
194)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:65)
net.liftweb.http.RequestVarHandler$.apply(Vars.scala:193)
net.liftweb.http.LiftFilterTrait$class.doFilter(LiftServlet.scala:
517)
net.liftweb.http.LiftFilter.doFilter(LiftServlet.scala:536)
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1148)
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
387)
org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
org.mortbay.jetty.handler.ContextHandlerCollection.handle
(ContextHandlerCollection.java:230)
org.mortbay.jetty.handler.HandlerCollection.handle
(HandlerCollection.java:114)
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
org.mortbay.jetty.Server.handle(Server.java:324)
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
535)
org.mortbay.jetty.HttpConnection$RequestHandler.content
(HttpConnection.java:880)
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747)
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java:409)
org.mortbay.thread.QueuedThreadPool$PoolThread.run
(QueuedThreadPool.java:520)

Derek Chen-Becker

unread,
Aug 14, 2009, 10:43:28 AM8/14/09
to the-li...@googlegroups.com
I'll test against MySQL here and see if I can reproduce the issue.

Derek

Derek Chen-Becker

unread,
Aug 16, 2009, 10:29:47 AM8/16/09
to javier, liftweb, the-li...@googlegroups.com
OK, verified. Looks like we have a case mismatch in the code somewhere, possibly Mapper. The table is created as "expense", but the queries are for "Expense", and MySQL is very unhappy with that.

On Fri, Aug 14, 2009 at 9:21 AM, javier <javie...@yahoo.com> wrote:
In case it makes any difference, I am using MySQL 5.0.37 on a Mac

Derek Chen-Becker

unread,
Oct 8, 2009, 7:08:19 PM10/8/09
to javier, liftweb, the-li...@googlegroups.com
OK, this was really a bug in PocketChange. I had uppercase names for "Expense" in the BySQL QueryParams, but on case-sensitive file systems MySQL is case-sensitive :(. Fixed and pushed a new version of PocketChange to GitHub.

Derek
Reply all
Reply to author
Forward
0 new messages