[英]PSQLException: The column index is out of range: 2, number of columns: 1
[英]Executing update using Anorm returns PSQLException: The column index is out of range: 2, number of columns: 1
我一直在嘗試使用Anala和Scala中的Play Framework 2.6為我的PostgreSQL數據庫執行更新查詢。 查詢在pgAdmin中運行正常,所以我不確定這里出了什么問題。 我只想更新條目的特定列。 wordlistcollection表包含3列:id,title和createddate。
我已經嘗試使用execute()
和executeUpdate()
以及添加所有必需的列但沒有任何成功。
override def update(wordListCollection: WordListCollection): Int = db.withConnection { implicit c =>
SQL"""
UPDATE wordlistcollection
SET title = '${wordListCollection.title}'
WHERE id = ${wordListCollection.id};
""".executeUpdate()
}
編輯:我也試過這種方法,結果相同
override def update(wordListCollection: WordListCollection): Int = db.withConnection { implicit c =>
SQL"""
UPDATE wordlistcollection
SET title = {title}
WHERE id = {id}
"""
.on(
"id" -> wordListCollection.id,
"title" -> wordListCollection.title)
.executeUpdate()
}
根據executeUpdate()
函數,它應該返回受Integer影響的行數,但它返回以下內容:
! @7c21ckgga - Internal server error, for (PUT) [/api/lists] ->
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[PSQLException: The column index is out of range: 3, number of columns: 2.]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:251)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:178)
at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:382)
at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:380)
at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:412)
at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:37)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
Caused by: org.postgresql.util.PSQLException: The column index is out of range: 3, number of columns: 2.
at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:65)
at org.postgresql.core.v3.SimpleParameterList.setBinaryParameter(SimpleParameterList.java:132)
at org.postgresql.jdbc.PgPreparedStatement.bindBytes(PgPreparedStatement.java:983)
at org.postgresql.jdbc.PgPreparedStatement.setLong(PgPreparedStatement.java:279)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setLong(HikariProxyPreparedStatement.java)
at anorm.ToStatementPriority0$longToStatement$.set(ToStatementMisc.scala:197)
at anorm.ToStatementPriority0$longToStatement$.set(ToStatementMisc.scala:196)
at anorm.DefaultParameterValue.set(ParameterValue.scala:40)
at anorm.SimpleSql.$anonfun$unsafeStatement$3(SimpleSql.scala:84)
at anorm.SimpleSql.$anonfun$unsafeStatement$3$adapted(SimpleSql.scala:84)
我認為它與返回的ResultSet有關,但我是一個初學者,所以不知道如何調試它。
謝謝你的幫助!
所以,事實證明我做了兩件事。 正如@cchantep指出的那樣,當使用字符串插值來構建SQL查詢時,字符串周圍不應該有單引號。 刪除這些引號可以解決問題。
override def update(wordListCollection: WordListCollection): Int = db.withConnection { implicit c =>
SQL"""
UPDATE wordlistcollection
SET title = ${wordListCollection.title}
WHERE id = ${wordListCollection.id}
"""
.executeUpdate()
}
奇怪的是使用的方法
override def update(wordListCollection: WordListCollection): Int = db.withConnection { implicit c =>
SQL"""
UPDATE wordlistcollection
SET title = {title}
WHERE id = {id}
"""
.on(
"id" -> wordListCollection.id,
"title" -> wordListCollection.title)
.executeUpdate()
}
沒有用,它給了我另一個例外。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.