java怎么复制别人的数据库_Java中无效的列名,但在数据库上工作[复制]

在执行一个涉及多表连接的MySQL查询后,查询在数据库程序如Adminer中正常工作,但在Java应用中抛出SQLException,指出'xpthis'和'xptotal'字段无效。问题可能源于字段别名的解析或数据类型转换。尝试了不同的get方法(如getInt、getDouble、getString、getObject)以及直接访问不带别名的字段,但问题仍未解决。
摘要由CSDN通过智能技术生成

给定以下(mysql-)查询:

SELECT view_match_metric.player_id, discord_id, view_match_metric.name,

view_match_metric.xp AS xpthis, player.xp AS xptotal, ranked, mode, mu, sigma,

IF(team = 'Alpha', goals_alpha > goals_beta, goals_beta > goals_alpha) as won

FROM view_match_metric

LEFT OUTER JOIN kl_idmap ON view_match_metric.player_id = kl_idmap.player_id

LEFT OUTER JOIN kl_trueelo ON view_match_metric.player_id = kl_trueelo.player_id

LEFT OUTER JOIN player ON view_match_metric.player_id = player.player_id

WHERE match_id="169498"

当我在数据库程序(adminer)上执行它时,它返回以下结果:

26e513110ddf738f0bcab755d81b4b30.png

请注意,它确实包含用于xpthis和xptotal的int(10)个无符号条目

然而,在Java中,这个查询抛出了

java.sql.SQLException: Invalid column name

at com.sun.rowset.CachedRowSetImpl.getColIdxByName(Unknown Source)

at com.sun.rowset.CachedRowSetImpl.getInt(Unknown Source)

对于xpthis和xptotal字段。它不需要这些字段就可以工作。

由于xp字段在多个表中不明确,所以我使用那些别名指定它们。

加载数据的代码:

while (result.next()) {

match.mode = result.getString("mode");

match.ranked = result.getBoolean("ranked");

TrueEloPlayerData player = new TrueEloPlayerData();

player.id = result.getLong("player_id");

player.discordID = result.getLong("discord_id");

player.name = result.getString("name");

//exception thrown in next line:

player.xp = result.getInt("xpthis");

player.level = Utility.getLevel(result.getInt("xptotal"));

//some more

match.players.add(player);

}

对于并行处理,通常的结果集被复制到cachedrowset中:

CachedRowSet res = RowSetProvider.newFactory().createCachedRowSet();

res.populate(resultSet);

我尝试使用getdouble、getstring来获取它们,甚至使用getobject,尝试直接访问不带别名的字段(getint(tablename.xp)),但它从未解决此问题。

我完全不明白为什么它在这里不能像在数据库中那样工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值