ORA-01858

ORA-01858: a non-numeric character was found where a numeric was expected

 

ORA-01858: a non-numeric character was found where a numeric was expected

 

这个问题是由于

Java代码 复制代码
  1. Date dateCreated = startBookForm.getDateCreated();//录入日期   
  2.   
  3. String dateCreatedStr = "to_date('"+dateCreated+"','yyyy-mm-dd HH24:MI:SS')";   
  4.   
  5.   
  6.   
  7. pstmt.setString(5, dateCreatedstr);//传递日期类型的时候用了String  
Date dateCreated = startBookForm.getDateCreated();//录入日期

String dateCreatedStr = "to_date('"+dateCreated+"','yyyy-mm-dd HH24:MI:SS')";



pstmt.setString(5, dateCreatedstr);//传递日期类型的时候用了String

 

改成下面这样就好了

 

Java代码 复制代码
  1. Date dateCreated = startBookForm.getDateCreated();//录入日期   
  2.   
  3.   
  4.   
  5. pstmt.setDate(5, dateCreated);//传递日期类型时需要setDate  

********************************************************

 

Query setParameters(Object[] values, Type[] types)
Bind values and types to positional parameters

该方法用于设置占位参数,不能用于设置命名参数

要使用此方法需要将HQL换成如下
from Student where name like ? and sex=?

 

没注意到named和positional的区别

 

********************************************************

 

hibernate绑定参数类型[ZT]

关键字: 参数帮定

hibernate绑定参数类型

(1)使用 ? 指定参数
...
Query query = session.createQuery("from Student s where
              s.age > ? and s.name like ? ");
query.setInteger(0,18);
query.setString(1,"%abc%");
...
(2)使用 : 后跟变量的方法设置参数
...
Query query = session.createQuery("from Student s where
              s.age > :minAge and s.name like :likeName ");
query.setInteger("minAge",18);
query.setString("likeName","%ABC%");
...
(3)setEntity()方法

setEntity()方法把参数与一个持久类的实例绑定,例如下面的示例
...
Team team = (Team)session.get(Team.class,"5f45saf45sdf456f");
Query query = session.createQuery("from Student s where s.team = :team");
query.setEntity("team",team);  //设置参数为team实例
...
注:上述的team对象可以是持久对象也可以是脱管对象

(4)setParameter()方法

setParameter()方法的全称是setParameter(String paraName,实例,实例类型),这个方法
可以绑定任何类型的参数.其中第三个参数可以省略,hibernate要以根据实例推断出绝大部分
对应的映射类型.
下面将(3)中的代码做一下改动
query.setParameter("team",team,Hibernate.entity(Team.class)).
或者query.setparameter("team",team).

(5)setPorperties()方法

该方法的全称是setProperties(类实例).它将类实例的属性名与参数值相对应
...
Student student = new Student();
student.setAge("18");
Query query = sesion.createQuery("from Student s where s.age = :age");
query.setProperties(student);  //设置参数为student对象
...
注意:HQL语句中的变量age必须和student的属性age同名,否则会出错.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cter was found where a numeric was expected ORA-01858错误是指在需要数字的地方出现了非数字字符。这通常是由于日期或时间格式不正确导致的。要解决此错误,需要检查输入的日期或时间格式是否正确,并确保只输入数字字符。如果仍然无法解决问题,则可能需要查看数据库的设置和配置,以确定是否存在其他问题。 ### 回答2: ORA-01858是一个Oracle数据库错误代码,表示在尝试将非数字字符转换为数字时发生了错误。 这个错误通常发生在以下情况下: 1. 试图将一个包含非数字字符的字符串插入到使用数字数据类型的列中。 2. 在一个用于日期或时间的字符串中包含了非数字字符。 3. 使用了非数字字符作为参数或变量进行时间或日期计算。 要解决ORA-01858错误,可以采取以下措施: 1. 检查插入或更新操作中的列数据类型是否为数字类型,并确保插入的值只包含数字字符。 2. 检查日期或时间字符串是否仅包含数字字符,并在需要时使用正确的日期或时间格式。 3. 检查对于日期或时间计算,传递给函数或过程的参数是否有效且只包含数字字符。 如果以上措施都没有解决问题,可以尝试使用Oracle提供的一些内置函数,如TO_NUMBER、TO_CHAR等进行数据类型转换。例如,可以使用TO_NUMBER函数将字符串转换为数字。 总之,ORA-01858错误是由于尝试将非数字字符转换为数字时引起的。通过检查数据类型和字符内容,并使用合适的Oracle内置函数进行数据转换,可以解决这个错误。 ### 回答3: ORA-01858错误是Oracle数据库的一个错误代码,表示发现了一个非数值字符。该错误通常出现在需要处理日期或时间的SQL语句中,例如TO_DATE函数的参数不是一个有效的日期字符串。 出现ORA-01858错误的原因可能有以下几种: 1. 输入的日期字符串格式不正确。Oracle数据库要求日期字符串符合特定的格式,例如'yyyy-mm-dd'。如果输入的日期字符串格式不正确,就会导致ORA-01858错误。 2. 输入的日期字符串缺少必要的日期部分。例如,如果只提供了年份而没有提供月份和日期,就会导致ORA-01858错误。 3. 输入的日期字符串包含了非数值字符。日期字符串只能包含数字字符和特定的分隔符,如果包含了字母、符号或其他非数值字符,就会触发ORA-01858错误。 解决ORA-01858错误的方法如下: 1. 确保输入的日期字符串符合Oracle数据库的日期格式要求,使用合适的日期格式函数来解析日期字符串。 2. 检查输入的日期字符串是否包含了必要的日期部分,如果缺少了某些部分,可以手动补全。 3. 对于可能包含非数值字符的日期字符串,可以使用合途函数(例如REGEXP_REPLACE)将非数值字符替换为空格或其他合适的字符。 总之,ORA-01858错误提示非数值字符,需要检查和修正输入的日期字符串的格式和内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值