PostgreSQL –错误:运算符不存在:smallint =字符变化(解决方案)

今天我遇到一个奇怪的错误,实际上我的公司计划将现有的j2ee Web应用程序从PostgreSQL 8.2迁移到最新的PostgreSQL 8.3。 但是在我正确设置了PostgreSQL 8.3并启动Web应用程序之后,我不断遇到以下错误

org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying

似乎是数据类型不匹配错误,有趣的是它在PostgreSQL 8.2上工作正常,但在PostgreSQL 8.3上工作正常吗? 我搜查了几个小时才发现,这可能与8.3中对隐式转换的更改有关。 PostgreSQL 8.3似乎花了很多精力来增强和检查数据类型。

这将产生很多副作用,因为我们在valuelist中设置字符串以比较任何列,并让PostgreSQL自动进行转换。
PostgreSQL 8.3(我猜)不再支持此功能。 在这里,我提供了两种解决上述错误的方法。


——————
1)在将语句发送到PostgreSQL之前,使用setInt或setLong强制转换为适当的数据类型

2)使用显式转换,如:: smallint

例如

select * from score where scordid =?::smallint

如果使用像我这样的值列表,则需要包装statementBuilder以将StandardStatamentBuilder覆盖为您合适的数据类型。

 
  
     
   
	
    
	 	
     
			
      
				
       
			
      
						               
		
	
    
     
   
  
  

希望为您工作。

翻译自: https://mkyong.com/database/postgresql-error-operator-does-not-exist-smallint-character-varying-solution/

你可能感兴趣的:(数据库)