Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL更新无法使用整数ID_Java_Database_H2 - Fatal编程技术网

Java SQL更新无法使用整数ID

Java SQL更新无法使用整数ID,java,database,h2,Java,Database,H2,在SQL Server上执行此命令 UPDATE tbl SET name='Hi' WHERE id='' 如果将“id”设置为整数值,则该选项有效,但对H2无效 可能的解决方案是什么?如果ID是整数,则不应对值使用引号: UPDATE TEST SET NAME='Hi' WHERE ID = 5; // not ID = '5' 许多数据库将接受带引号的版本,但SQL语言规范不要求这样做。如果ID为整数,则不应对值使用引号: UPDATE TEST SET NAME='Hi' WHER

在SQL Server上执行此命令

UPDATE tbl SET name='Hi' WHERE id=''
如果将“id”设置为整数值,则该选项有效,但对H2无效


可能的解决方案是什么?

如果ID是整数,则不应对值使用引号:

UPDATE TEST SET NAME='Hi' WHERE ID = 5; // not ID = '5'

许多数据库将接受带引号的版本,但SQL语言规范不要求这样做。

如果ID为整数,则不应对值使用引号:

UPDATE TEST SET NAME='Hi' WHERE ID = 5; // not ID = '5'

许多数据库将接受引用的版本,但SQL语言规范不要求这样做。

更新测试集名称class='Hi'其中ID='1'
即使id字段是整数,也可以在sql server中工作
但如果要更新id为null的行,则必须使用以下语句:
updatetestset NAME='Hi',其中ID为Null
而不是
更新测试集NAME='Hi',其中ID=''

如果id是varchar,那么可以使用语句更新id不为null且数据不可用的值。 但是如果您想更新记录的值,其中ID字段的值为NULL,那么您必须使用


updatetestset NAME='Hi',其中ID为Null

更新测试集名称='Hi'其中ID='1'
即使id字段是整数,也可以在sql server中工作
但如果要更新id为null的行,则必须使用以下语句:
updatetestset NAME='Hi',其中ID为Null
而不是
更新测试集NAME='Hi',其中ID=''

如果id是varchar,那么可以使用语句更新id不为null且数据不可用的值。 但是如果您想更新记录的值,其中ID字段的值为NULL,那么您必须使用


updatetestset NAME='Hi',其中ID为Null

H2引发异常,因为它无法将空字符串
'
转换为数字。H2在内部使用
java.lang.Long.parseLong(“”)
,但由于
java.lang.NumberFormatException:对于输入字符串:“
”而失败

对于SQL脚本:

drop table tbl;
create table tbl(id int primary key, name varchar(255));
insert into tbl values(1, 'Hello');
UPDATE tbl SET name='Hi' WHERE id='';
H2将引发异常:

Data conversion error converting  [22018-161]
大多数其他数据库(PostgreSQL、ApacheDerby、HSQLDB)都会引发类似的异常

您需要使用一个数字,或者
为空
,如下所示:

UPDATE tbl SET name='Hi' WHERE id IS NULL;


H2引发异常,因为它无法将空字符串
'
转换为数字。H2在内部使用
java.lang.Long.parseLong(“”)
,但由于
java.lang.NumberFormatException:对于输入字符串:“
”而失败

对于SQL脚本:

drop table tbl;
create table tbl(id int primary key, name varchar(255));
insert into tbl values(1, 'Hello');
UPDATE tbl SET name='Hi' WHERE id='';
H2将引发异常:

Data conversion error converting  [22018-161]
大多数其他数据库(PostgreSQL、ApacheDerby、HSQLDB)都会引发类似的异常

您需要使用一个数字,或者
为空
,如下所示:

UPDATE tbl SET name='Hi' WHERE id IS NULL;


请提供您的表模式的详细信息您是如何通过java进行SQL更新的?@Philippe Billerot请为您的问题提供更多内容。您收到的确切错误消息是什么?有错误代码吗?您使用的是什么数据库管理系统?MySQL服务器、MS SQL server、Oracle?@bakoyaro:H2是一个数据库@BalusC感谢您的更正请提供您表模式的详细信息您是如何通过java进行SQL更新的?@Philippe Billerot请为您的问题提供更多实质内容。您收到的确切错误消息是什么?有错误代码吗?您使用的是什么数据库管理系统?MySQL服务器、MS SQL server、Oracle?@bakoyaro:H2是一个数据库@BalusC感谢您的更正H2还支持ID='5',即使ID是整数。。。这不是问题所在。问题是用户使用了ID='',这似乎得到了MySQL和(可能?)Oracle的支持,但我测试的任何其他数据库(PostgreSQL、Derby、HSQLDB)都不支持。我不满意,因为请求是SQL命令生成器的结果,这些命令不控制数据类型。谢谢。H2还支持ID='5',即使ID是整数。。。这不是问题所在。问题是用户使用了ID='',这似乎得到了MySQL和(可能?)Oracle的支持,但我测试的任何其他数据库(PostgreSQL、Derby、HSQLDB)都不支持。我不满意,因为请求是SQL命令生成器的结果,这些命令不控制数据类型。谢谢。+ 1:一些数据库考虑‘’和NULL是等价的(它们不应该)。马克,对于某些数据库系统可能是肯定的。我不满意,因为请求是不控制数据类型的SQL命令生成器的结果。谢谢。+ 1:一些数据库考虑‘’和NULL是等价的(它们不应该)。马克,对于某些数据库系统可能是肯定的。我不满意,因为请求是不控制数据类型的SQL命令生成器的结果。非常感谢。