рдореБрдЭреЗ рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ :featureIds
. рдХреЗ рд╕рд╛рде рдПрдХ SQL рдХреНрд╡реЗрд░реА рдорд┐рд▓реА рд╣реИ
const val selectGeoCoordinates = "SELECT gg.feature_id, gg.latitude, gg.longitude, gg.order, gg.group FROM geo.geo_coordinates as gg WHERE gg.feature_id IN (:featureIds);"
рдЬрдм рдореИрдВ рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЗрдирдЯреНрд╕ рдХреА рд╕реВрдЪреА рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ
val values: List<Int> = listOf(4138, 1752, 1161, 371, 1860, 5498)
val geoCoordinatesList = geo.withHandle<List<GeoCoordinates>, Exception> { handle ->
handle.createQuery(selectGeoCoordinates).bindList("featureIds", values)
.mapTo<GeoCoordinates>().list()
}
рдореБрдЭреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдирд┐рдореНрди рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ:
Caused by: org.jdbi.v3.core.statement.UnableToExecuteStatementException: Unable to execute, no named parameter matches 'featureIds'. [statement:"SELECT gg.feature_id, gg.latitude, gg.longitude, gg.order, gg.group FROM geo.geo_coordinates as gg WHERE gg.feature_id IN :featureIds ;", rewritten:"SELECT gg.feature_id, gg.latitude, gg.longitude, gg.order, gg.group FROM geo.geo_coordinates as gg WHERE gg.feature_id IN :featureIds ;", parsed:"ParsedSql{sql='SELECT gg.feature_id, gg.latitude, gg.longitude, gg.order, gg.group FROM geo.geo_coordinates as gg WHERE gg.feature_id IN ? ;', parameters=ParsedParameters{positional=false, parameterNames=[featureIds]}}", arguments:{ positional:{}, named:{__featureIds_0:4138,__featureIds_4:1860,__featureIds_3:371,__featureIds_2:1161,__featureIds_1:1752,__featureIds_5:5498}, finder:[]}]
at org.jdbi.v3.core.statement.ArgumentBinder.lambda$bindNamed$0(ArgumentBinder.java:58)
at java.util.Optional.orElseThrow(Optional.java:290)
at org.jdbi.v3.core.statement.ArgumentBinder.bindNamed(ArgumentBinder.java:57)
at org.jdbi.v3.core.statement.ArgumentBinder.bind(ArgumentBinder.java:27)
at org.jdbi.v3.core.statement.SqlStatement.internalExecute(SqlStatement.java:1443)
at org.jdbi.v3.core.result.ResultProducers.lambda$getResultSet$2(ResultProducers.java:59)
at org.jdbi.v3.core.result.ResultIterable.lambda$of$0(ResultIterable.java:53)
at org.jdbi.v3.core.result.ResultIterable.stream(ResultIterable.java:141)
at org.jdbi.v3.core.result.ResultIterable.collect(ResultIterable.java:197)
at org.jdbi.v3.core.result.ResultIterable.list(ResultIterable.java:186)
рдЕрдЧрд░ рдореИрдВ .bind("featureIds", 4138)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдордХрд░рдг рд╕рд╣реА рд╣реИред
рдХрд┐рд╕реА рдФрд░ рдХреЛ рдпрд╣ рдорд┐рд▓рд╛? рдХрд┐рд╕реА рднреА рдорджрдж рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИрд░рд╛рди рд╣реВрдВ :(
рдареАрдХ рд╣реИ... StringTemplateEngine рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред рдЬрдм рдореИрдВ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ <>
рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
"SELECT gg.feature_id, gg.latitude, gg.longitude, gg.order, gg.group FROM geo.geo_coordinates as gg WHERE gg.feature_id IN (<featureIds>);"
.bindList("featureIds", values)
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ bindList
рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ? :)
рд╣рд╛рдВ, рдмрд╛рдЗрдВрдбрд▓рд┐рд╕реНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ <featureIds>
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ :__featureIds_0, :__featureIds_1, ...etc
рдФрд░ рд╕реВрдЪреА рддрддреНрд╡реЛрдВ рдХреЛ рдЙрди рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдЪрд░реЛрдВ рд╕реЗ рдмрд╛рдВрдзрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреНрд╡реЗрд░реА рдореЗрдВ where featureIds = any(:featureIds)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ bindByType("featureIds", featureIds, new GenericType<List<Long>>() {})
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ SQL рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдБрдз рд╕рдХрддреЗ рд╣реИрдВред
рдЬрд╝реЛрдВрдмреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд▓реЗрдХрд┐рди bindMap
Map<String, Object>
рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╕рдордп рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдПрдХрд▓ рдХреБрдВрдЬреА рдореЗрдВ List
рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ bindList
рдХреЗ рд╕рд╛рде рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рдЯреАрдХ рд╣реИ?
рдЙрджрд╛рд╣рд░рдг:
a,b,c
from
table
where
a = :some_string
and b = ANY(<list_of_strings>)
рдХреЗ рдмрдВрдзрди рдХреЗ рд╕рд╛рде:
.bindMap(Map.of(
'some_string', 'foobar',
'list_of_strings', Lists.newArrayList('q', 'r', 's')
))
рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛:
org.jdbi.v3.core.statement.UnableToCreateStatementException: Undefined attribute for token '<list_of_strings>'
рдпрд╣ рд╕рд╣реА рд╣реИред bindMap
рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ bindList
рдХреЛ рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗред рд╡реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдареАрдХ рд╣реИ... StringTemplateEngine рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред рдЬрдм рдореИрдВ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░
<>
рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред"SELECT gg.feature_id, gg.latitude, gg.longitude, gg.order, gg.group FROM geo.geo_coordinates as gg WHERE gg.feature_id IN (<featureIds>);"
.bindList("featureIds", values)
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредрд╢рд╛рдпрдж рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░
bindList
рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ? :)