GBase 8s
其他
问答
Resultset.updateRow()
发表于2024-04-08 15:15:38234次浏览6个评论
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【GBase版本】:
【操作系统】:
【CPU】:
【问题描述】*:java 执行 Resultset.updateRow(),sql语句中表名带双引号的时候,会报错:语句中没有指定的序列号、
行号或主关键字。表名不带双引号的时候,就没有问题,这是为什么呢?(已经在连接中开启了DELIMIDENT=y)
评论
登录后才可以发表评论
wty发表于 2年前
DELIMIDENT=y时,双引号里的表名列名大小写敏感,不带双引号的会在数据库里转成小写,你建表时如果表名列名没带双引号,数据库里存的表名列名就是小写的
liaosnet发表于 2年前
String sqlstr = "select col1,col2 as \"Col2\" from tab2 where col1 = 100";
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
resultSet = statement.executeQuery(sqlstr);
resultSet.first();
resultSet.updateString("Col2","update row 2234");
resultSet.updateRow();
起决于你的语句返回的字段名称是否区分大小写。。开启delimident=y后将会严格区分大小写。
也可以使用另一种方法(set时使用投影列序号),如 resultSet.updateString(2,"update row 2234");
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
resultSet = statement.executeQuery(sqlstr);
resultSet.first();
resultSet.updateString("Col2","update row 2234");
resultSet.updateRow();
起决于你的语句返回的字段名称是否区分大小写。。开启delimident=y后将会严格区分大小写。
也可以使用另一种方法(set时使用投影列序号),如 resultSet.updateString(2,"update row 2234");
最佳回答
GBase用户15809发表于 2年前
@liaosnet:connection = druidDataSource.getConnection(10000);
String sql ="SELECT \"name\",\"id\" FROM \"WorkErs\"";
ResultSet rs = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
while (rs.next()) {
rs.updateString(1,"mmmmm");
rs.updateRow();
}
表名加双引号就会有问题的
ava.sql.SQLException: 语句中没有指定序列号、行号或主关键字。
at com.gbasedbt.util.IfxErrMsg.getSQLException(IfxErrMsg.java:409)
at com.gbasedbt.jdbc.IfxResultSet.a(IfxResultSet.java:3383)
at com.gbasedbt.jdbc.IfxResultSet.c(IfxResultSet.java:3525)
at com.gbasedbt.jdbc.IfxResultSet.updateRow(IfxResultSet.java:3563)
at com.alibaba.druid.pool.DruidPooledResultSet.updateRow(DruidPooledResultSet.java:1048)
String sql ="SELECT \"name\",\"id\" FROM \"WorkErs\"";
ResultSet rs = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
while (rs.next()) {
rs.updateString(1,"mmmmm");
rs.updateRow();
}
表名加双引号就会有问题的
ava.sql.SQLException: 语句中没有指定序列号、行号或主关键字。
at com.gbasedbt.util.IfxErrMsg.getSQLException(IfxErrMsg.java:409)
at com.gbasedbt.jdbc.IfxResultSet.a(IfxResultSet.java:3383)
at com.gbasedbt.jdbc.IfxResultSet.c(IfxResultSet.java:3525)
at com.gbasedbt.jdbc.IfxResultSet.updateRow(IfxResultSet.java:3563)
at com.alibaba.druid.pool.DruidPooledResultSet.updateRow(DruidPooledResultSet.java:1048)
liaosnet发表于 2年前
@GBase用户15809:看起来ResultSet.updateRow()操作时,生成的语句会不包含引号,这才导致的错误。
liaosnet发表于 2年前
@GBase用户15809:这是个问题。
尽量不用delimident吧。
尽量不用delimident吧。
崔哥发表于 8个月前
汉帝重阿娇,贮之黄金屋。咳唾落九天,随风生珠玉。宠极爱还歇,妒深情却疏。长门一步地,不肯暂回车。雨落不上天,水覆难再收。君情与妾意,各自东西流。昔日芙蓉花,今成断根草。以色事他人,能得几时好。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526