Groovy: jedna linia kodu rozbita na wiele linii

Groovy: jedna linia kodu rozbita na wiele linii
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
def products = db.rows("SELECT id, product_name, product_description, number_available, prize, addition_date FROM product WHERE category_id="+params.id)

Mam następującą linię kodu w Groovy. Problem linia jest za długa, co utrudnia czytanie kodu.

Pytanie: w jaki sposób zapisać taką komendę w kilku liniach? Nie mogę tego znaleźć, wiem że wstyd pytać o takie rzeczy, ale jakoś źle googlam.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 149
0

możesz zawsze dodać stworzyć zmienna - do której będziesz dodawał kolejne kawałki

Kopiuj
def sql = "SELECT "
sql+="id, product_name, "

itd.. pamiętaj tylko o spacjach ;)

a i jeszcze na koniec:

Kopiuj
def products = db.rows(sql+params.id);
  • Rejestracja: dni
  • Ostatnio: dni
0

Jest to jakieś rozwiązanie. A nie ma jakiegoś symbolu w stylu \, który powoduje że można pisać 1 komendę we wielu liniach?

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Operator dodawania?
http://ideone.com/n8Eod9

W ogóle to użyj PreparedStatement, bo inaczej jest duża szansa na SQL Injection.

  • Rejestracja: dni
  • Ostatnio: dni
0

Fakt, nie potrafię zrobić prepared Statement w GRails.

Ogólnie próbuje tak (kod metody z kontrolera):

Kopiuj
def products = db.rows('SELECT id, product_name, product_description, number_available, prize, addition_date FROM product WHERE category_id=?category', [category: params.id])

Próbowałem rzutować params.id na (Integer), ale nie pomogło.

Z dokumnetacji Groovy/Grails:
http://groovy.codehaus.org/api/groovy/sql/Sql.html

Jest to opisane w sekcji: 'Named and named ordinal parameters'. Nie rozumiem, dlaczego mi to nie działa. Dostaje błąd:
Can't infer the SQL type to use for an instance of java.util.LinkedHashMap. Use setObject() with an explicit Types value to specify the type to use.

  • Rejestracja: dni
  • Ostatnio: dni
0

Lecę dalej próbuje tak:

Okazało się, że params.id jest typu String, więc przekonwertowałem:

Kopiuj
		Integer catn = params.id.toInteger()
		def products = db.rows('SELECT id, product_name, product_description, number_available, prize, addition_date FROM product WHERE category_id=?category', [category:catn])

Can't infer the SQL type to use for an instance of java.util.LinkedHashMap. Use setObject() with an explicit Types value to specify the type to use.

Dlaczego on sprawdza typ mapy, a nie tego co jest w środku mapy. Czy coś nie tak ze mną? To nie powinno być takie trudne.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.