我希望在表格中存储一个字符串数组,然后我可以将更多数据附加到。
我的表格如下:
CREATE TABLE users (id SERIAL, username varchar(32), password char(40), name varchar(64), age integer, successful_logins varchar(32)[10], failed_logins varchar(32)[10], roles text[3]);
我试过这个,但它没有做任何事情:
UPDATE users SET successful_logins = array_append(successful_logins, :timestamp) WHERE username = :username;
:varname
来自我正在使用的JDBI驱动程序,但我传入一个字符串。为什么这不起作用?有没有更好的方法来获得相同的结果?
编辑:
这是我正在使用的驱动程序:
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
我没有得到任何错误,它似乎与我的DAO或驱动程序有关。 这是DAO代码:
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
@SqlUpdate("UPDATE users SET successful_logins=ARRAY_APPEND((SELECT successful_logins FROM users WHERE username=:username),:timestamp)WHERE username=:username")
void addSuccessfulLogin(@Bind("timestamp") String timestamp, @Bind("username") String username);
当我在psql
中尝试使用vars替换值时,它会起作用。我想知道这是否是一个铸造问题?我是否需要将我的字符串转换为某些内容?
答案 0 :(得分:0)
我不熟悉您的JDBI库,但我在Postgres控制台中尝试了这个并且它有效:
UPDATE mytable SET successful_logins =
ARRAY_APPEND(
(
SELECT successful_logins FROM mytable WHERE id=1),
'Some additional value'
)
WHERE id=1
问题可能是您需要先选择现有的successful_logins
值,然后再将其传递给array_append
。
答案 1 :(得分:0)
当我打电话给addSuccessfulLogin
时,我正在做:
addSuccessfulLogin(username, timestamp);
而不是
addSuccessfulLogin(timestamp, username)
所以它试图找到一个基于时间戳的用户名,这个时间戳不存在。这就是没有错误的原因。因此,请确保正确调用自己的API!