Tim, ScalaQuery is a great DSL to interface relational database and to construct type safe SQL queries. I find that kind of approach often preferable compared to full blown ORMs (like Hibernate etc.) since it gives full control over SQL queries and does not impose any constraints on object model.
At the moment it is a bit difficult to use ScalaQuery with Lift since latest versions of ScalaQuery requires Scala 2.8. But once Lift is fully on 2.8 there should be no problems at all in using it in Lift app. ScalaQuery is still work in progress and there hasn't been any official release as far as I know, the documentation is also severely lacking. Cheers Joni On 11 tammi, 13:32, Timothy Perrett <[email protected]> wrote: > Hey Joni, > > What did you think of ScalaQuery btw? Have you used it inside a lift app? > > Cheers, Tim > > On 11 Jan 2010, at 11:07, Joni Freeman wrote: > > > Ok, thanks for clarification. Unfortunately my knowledge about mapper > > is very limited (I've previously used ScalaQuery for db persistence). > > Maybe someone else can answer the question better, the question being: > > What is the easiest way to store instances of Observations into > > database using mapper. > > > case class Observation(notice: List[Notice], header: List[Header], > > data: List[Data]) > > > Notice, Header and Data are simple case classes having just primitive > > fields. > > > Cheers Joni > > > On 11 tammi, 10:36, Randinn <[email protected]> wrote: > >> Sorry for the confusion Observation is a table actually, I meant to > >> write mapper. So what we're doing is calling up thejsonfile, making > >> it a string, putting it through the parcer and inserting it into the > >> table. > > >> On Jan 11, 5:49 pm, Joni Freeman <[email protected]> wrote: > > >>> Hi, > > >>> I'm sorry but I'm not totally sure what you are trying to accomplish. > >>> What would be the key in that map and what would be its values? > > >>> Cheers Joni > > >>> On 11 tammi, 03:14, Randinn <[email protected]> wrote: > > >>>> I should explain what we are planning, the idea is to get thejson > >>>> file into a string, parse it and save the caught information into a > >>>> Observation map. > > >>>> On Jan 11, 11:23 am, Randinn <[email protected]> wrote: > > >>>>> Forgive my ignorance but I was wondering why (json\ > >>>>> "observations").extract[Observation], is it to save as a flat file? > > >>>>> On Jan 4, 7:13 am, Randinn <[email protected]> wrote: > > >>>>>> I tried some of the changes you made but not all of them, and (json\ > >>>>>> "observations").extract[Observation], I had no idea about that one. > >>>>>> Thank you very much for your help, it is appreciated. > > >>>>>> On Jan 4, 1:00 am, Joni Freeman <[email protected]> wrote: > > >>>>>>> Google Groups does not shine in formatting code snippets. Here's nicer > >>>>>>> version: > > >>>>>>>http://paste.pocoo.org/show/161578/ > > >>>>>>> Cheers Joni > > >>>>>>> On 3 tammi, 12:20, Joni Freeman <[email protected]> wrote: > > >>>>>>>> Hi, > > >>>>>>>> That's almost correct. I did following changes after looking intoJSON > >>>>>>>> content. > > >>>>>>>> 1. 'notice' and 'header' areJSONarrays just like 'data'. Therefore: > >>>>>>>> case class Observation(notice: List[Notice], header: List[Header], > >>>>>>>> data: List[Data]) > > >>>>>>>> 2. There's optional data inJSON(some datapoints are nulls and Scala > >>>>>>>> Int or Double can't take null values). This can be fixed by > >>>>>>>> extracting > >>>>>>>> into Option. > > >>>>>>>> 3. The extracted Observation is inJSONfield 'observations'. > >>>>>>>> Therefore: > >>>>>>>> (json\ "observations").extract[Observation] > > >>>>>>>> Your error stack trace suggests that you have an old version of lift- > >>>>>>>>json. Please upgrade to M8, there was a critical bug in case class > >>>>>>>> extraction in older versions. > > >>>>>>>> Full example which works for me: > > >>>>>>>> implicit val formats = net.liftweb.json.DefaultFormats > >>>>>>>> case class Notice(copyright: String, copyright_url: String, > >>>>>>>> disclaimer_url: String) > >>>>>>>> case class Header(refresh_message: String, ID: String, main_ID: > >>>>>>>> String, name: String, state_time_zone: String, time_zone: String, > >>>>>>>> product_name: String, state: String) > >>>>>>>> case class Data(sort_order: Int, wmo: Int, history_product: String, > >>>>>>>> local_date_time: String, > >>>>>>>> local_date_time_full: String, air_temp: Option > >>>>>>>> [Double], dewpt: Option[Double], apparent_t: Option[Double], > >>>>>>>> rel_hum: Option[Int], delta_t: Option[Double], > >>>>>>>> wind_dir: String, wind_spd_kt: Option[Double], gust_kt: Option > >>>>>>>> [Double], > >>>>>>>> wind_spd_kmh: Option[Double], press: > >>>>>>>> Option[Double], > >>>>>>>> rain_trace: String) > > >>>>>>>> case class Observation(notice: List[Notice], header: List[Header], > >>>>>>>> data: List[Data]) > > >>>>>>>> (json\ "observations").extract[Observation] > > >>>>>>>> Cheers Joni > > >>>>>>>> On 3 tammi, 09:17, Randinn <[email protected]> wrote: > > >>>>>>>>> I'm having a bit of trouble with LiftJsonparcing, I know I'm not > >>>>>>>>> doing it correctly but looking at the examples I cannot figure out > >>>>>>>>> what, anyway, here is the code in question..... If someone could > >>>>>>>>> point > >>>>>>>>> me in the right direction that would be great, thanks in advance. > > >>>>>>>>> class HelloWorld { > >>>>>>>>> def howdy = <span>Welcome to hello-lift at {new > >>>>>>>>> _root_.java.util.Date}</span> > >>>>>>>>> val http = new Http > >>>>>>>>> val bos = new ByteArrayOutputStream > >>>>>>>>> val myRequest = new Request("http://www.bom.gov.au/fwo/IDV60901/ > >>>>>>>>> IDV60901.94868.json") > >>>>>>>>> val rawdata = http(myRequest >>> bos) > >>>>>>>>> val bs = bos.toString > >>>>>>>>> val db = :/("www.bom.gov.au") > > >>>>>>>>> valjson= parse(bs) > > >>>>>>>>> implicit val formats = net.liftweb.json.DefaultFormats > >>>>>>>>> case class Notice(copyright: String, copyright_url: String, > >>>>>>>>> disclaimer_url: String) > >>>>>>>>> case class Header(refresh_message: String, ID: String, main_ID: > >>>>>>>>> String, name: String, state_time_zone: String, > >>>>>>>>> time_zone: String, product_name: String, state: > >>>>>>>>> String) > >>>>>>>>> case class Data(sort_order: Int, wmo: Int, history_product: > >>>>>>>>> String, > >>>>>>>>> local_date_time: String, > >>>>>>>>> local_date_time_full: Int, air_temp: Double, > >>>>>>>>> dewpt: > >>>>>>>>> Double, apparent_t: Double, > >>>>>>>>> rel_hum: Double, delta_t: Double, wind_dir: > >>>>>>>>> Double, > >>>>>>>>> wind_spd_kt: Double, gust_kt: Double, > >>>>>>>>> wind_spd_kmh: Double, press: Double, rain_trace: > >>>>>>>>> Double) > >>>>>>>>> case class Observation(notice: Notice, header: Header, data: List > >>>>>>>>> [Data]) > >>>>>>>>>json.extract[Observation] > > -- > > You received this message because you are subscribed to the Google Groups > > "Lift" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group > > athttp://groups.google.com/group/liftweb?hl=en.
-- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
