gpt4 book ai didi

java - Spring getJdbcTemplate().update 插入动态对象

转载 作者:行者123 更新时间:2023-11-29 12:57:44 24 4
gpt4 key购买 nike

我以前从来没有遇到过这样的问题,谷歌没有帮助。

我使用 Spring Framework,JdbcDaoSupportgetJdbcTemplate().update() 方法。我有一个带有 2 个可选参数的动态查询。

不知道动态对象的正确输入方式。这是我尝试的方式:

    StringBuilder sbUserRegQuery = new StringBuilder();
sbUserRegQuery.append("INSERT INTO users (username, password , email, enabled, datetime_condo_changed, datetime_last_login");
if(user.getCondo_id()!=null) sbUserRegQuery.append(", condo_id");
if(user.getProvider()!=null) sbUserRegQuery.append(", provider");
sbUserRegQuery.append(")");
sbUserRegQuery.append(" VALUES ( ?, ?, ? , ? , ?, ?");
if(user.getCondo_id()!=null) sbUserRegQuery.append(", ?");
if(user.getProvider()!=null) sbUserRegQuery.append(", ?"); //default - "local"
sbUserRegQuery.append(");");

Object regObject = new Object[]{
user.getUsername(), PasswordEncoderGenerator.main(user.getPassword()), user.getEmail(), enabled, user.getDatetime_condo_changed(), currentTimeStamp, user.getCondo_id()
};

int row = getJdbcTemplate().update(sbUserRegQuery.toString(), regObject, user.getCondo_id(), user.getProvider());

即我试图在 regObject 之后插入动态对象。但是,在这种情况下,动态对象的顺序可以改变,查询失败..

如何破案?

最佳答案

您几乎可以通过在创建 SQL 时使用条件检查来做到这一点,但是您不会对传递到 update() 方法的变量参数执行此操作。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html#update-java.lang.String-java.lang.Object...-

StringBuilder sbUserRegQuery = new StringBuilder();
sbUserRegQuery.append("INSERT INTO users (username, password , email, enabled, datetime_condo_changed, datetime_last_login");
if(user.getCondo_id()!=null) sbUserRegQuery.append(", condo_id");
if(user.getProvider()!=null) sbUserRegQuery.append(", provider");
sbUserRegQuery.append(")");
sbUserRegQuery.append(" VALUES ( ?, ?, ? , ? , ?, ?");
if(user.getCondo_id()!=null) sbUserRegQuery.append(", ?");
if(user.getProvider()!=null) sbUserRegQuery.append(", ?");
sbUserRegQuery.append(");");

ArrayList<Object> params = new ArrayList<Object>();
params.add(user.getUsername());
params.add(PasswordEncoderGenerator.main(user.getPassword()));
params.add(user.getEmail());
params.add(enabled);
params.add(user.getDatetime_condo_changed());
params.add(currentTimeStamp);
if(user.getCondo_id()!=null) params.add(user.getCondo_id());
if(user.getProvider()!=null) params.add(user.getProvider());

int row = getJdbcTemplate().update(sbUserRegQuery.toString(), params.toArray());

关于java - Spring getJdbcTemplate().update 插入动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38864524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com