oracle中按日期查询报错问题和merge into语句的

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;
	}

猜你喜欢

转载自blog.csdn.net/zuoyouzouzou/article/details/84025707