1 ORA-01858 :在要求输入数字处找到非数字字符
这两个一起记述的主要原因是需要这样做,且报错了。。。
我先贴出我的sql语句来:
出错原因是:preparedstatement在执行的时候不能把红框内的串替换为sql中的问号,主要是to_date函数替换不了,解决办法是将to_date函数先放到sql语句中,然后替换后面的变量,就不报这个错误了。
这句是直接摘抄人家的:ORA-01858 :在要求输入数字处找到非数字字符
正确语句如下:
好了,就这样,date查询报错的问题就解决了。
2 接下来看看oracle中插入或修改操作
该操作是进行插入操作或修改操作:
首先:
USING (SELECT COUNT(read_book) read_book FROM user_record WHERE"+ " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') u1
这句首先统计read_book字段中的数字是否大于0,因为如果计数为0,表示表中没有该时间点的记录。
接着,根据是否大于0来进行匹配,若匹配(when matched then),表示进行更新操作,若不匹配(when not matched then),表示进行插入操作。
public Integer insertOrupdateUserBooking(String date,String userno,String username) throws SQLException {
DateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String dateStr = dateformat.format(new Date());
QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
String sql = "MERGE INTO user_record oumd"
+ " USING (SELECT COUNT(read_book) read_book FROM user_record WHERE"
+ " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') u1"
+ " on (u1.read_book>0)"
+ " WHEN MATCHED THEN "
+ " UPDATE SET read_book=(u1.read_book+1),UPDATETIME=to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') WHERE"
+ " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') and user_no=\'"+userno+"\'"
+ " and username=\'"+username+"\'"
+ " WHEN NOT MATCHED THEN"
+ " INSERT (uptime ,user_no,USERNAME,read_book,CREATETIME)"
+ " VALUES(to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss'),\'"+userno+"\',\'"+username+"\',1,to_date(\'"+dateStr+"\','yyyy/MM/dd HH24:mi:ss'))";
int result = runner.update(sql);
return result;
}