【oracle】工作过程中数据库部分遇到的错误总结

在实际工作中的例子:
(XXX项目,流水号部分)

@Override
	public long quaryNum(String ids) {
		StringBuffer sb = new StringBuffer();
		sb.append("SELECT LST_SERIAL_NUMBER FROM (SELECT LST_SERIAL_NUMBER FROM EC_WJB_JTC_LIST where LST_SERIAL_NUMBER like '");
		sb.append(ids);
		sb.append("%' order by LST_SERIAL_NUMBER DESC) WHERE rownum <= 1 ");
		
		Query query = this.getEntityManager().createNativeQuery(sb.toString());
		Object num = query.getSingleResult();
		return Long.parseLong(num.toString());
	}

在执行上面代码的时候遇到了问题,通过查询之后发现query.getSingleResult()方法当他查询不到结果时,将会抛出EntityNotFoundException异常,而不是返回null。
遇到这个问题的时候我选择抛出异常并且执行相应的其他操作。代码如下:

Query query = this.getEntityManager().createNativeQuery(sb.toString());
		try{
				Object num = query.getSingleResult();
				return Long.parseLong(num.toString());
			}catch(NoResultException nre){
				return Long.parseLong(DocumentNumberTool.lsNum() + "0001");
			}

今天在工作中遇到了报错 java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
原来是mybatis里面的sql末尾是不能加;

–原始语句:

sb.append("SELECT LST_SERIAL_NUMBER FROM (SELECT LST_SERIAL_NUMBER FROM EC_WJB_JTC_LIST where LST_SERIAL_NUMBER like '");
	sb.append(ids);
	sb.append("%' order by LST_SERIAL_NUMBER DESC) WHERE rownum <= 1 ;");

–更改后语句:

sb.append("SELECT LST_SERIAL_NUMBER FROM (SELECT LST_SERIAL_NUMBER FROM EC_WJB_JTC_LIST where LST_SERIAL_NUMBER like '");
	sb.append(ids);
	sb.append("%' order by LST_SERIAL_NUMBER DESC) WHERE rownum <= 1 ");

PS:mybatis的相关知识
MyBatis是一个半自动的ORM 的 封装了jdbc的持久层框架
1.需要在src根目录下配置核心文件 configuration.xml
environment—连接数据库的参数
mapper----------resource class映射文件(文件/注解中的sql)
2.需要写一个dao类
一个普通的类
一个接口的类----->推荐使用
3.产生sqlSession对象 builder factory session 关于事务的问题
4.注意动态sql 注意联合查询
5.调用dao中的方法执行相应操作

一个普通的Dao类+xml文件
一个接口的Dao类+xml文件
一个接口的Dao类+注解

今天在工作过程中遇到了Oracle数据库,在使用SYS和SYSTEM账户的默认密码登录提示 ORA-01017:invalid username/password;logond denied 的问题
大概的查了一下,出现这个问题的原因大概是oracle_home下的dbs中的密码文件出了问题。
对于该错误的解决步骤为:
1、打开 cmd
2、输入 sqlplus / as sysdba
3、改变用户的密码信息 alter user sys(用户名) identifile by qwe111(新密码);


今天在Windows8.1机器上安装Oracle 11g时出现了报错:[INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突

通过查询相关问题之后发现:
对于这个问题可能会有两种情况:
第一中情况,以前安装过oracle 11g,但是卸载的时候Oracle文件夹没有删除干净。
这种情况的解决办法是:直接将C盘的Oracle文件夹下的\Inventory\ContentsXML目录下的inventory.xml 删掉
第二种情况,是第一次安装oracle 11g,或者C盘压根没有Oracle文件夹却依然报这个错误,是因为你在“database-cvu-cvu_prereq.xml”文件中添加了一段名为6.2的字段,将此字段删除即可

总结:[INS-13001]环境不满足最低要求这个问题直接跳过不会影响使用,按照网上教程添加了字段反而会引发更多问题。


今天搭建广州项目的过程中遇到了导入数据库sql文件时遇到文件中的中文出现乱码的情况,随之报错。
查完好多资料之后发现都没问题,最后发现是导入sql文件的编码有问题。
将需要导入的文件放入到文件阅读器中,修改文件的编码格式,将之换成utf8编码或者Unicode编码即可。


客户端连接Oracle 12c的时候,报错误:ORA-28040: No matching authentication protocol
描述:
原因:oracle 12c的参数SQLNET.ALLOWED_LOGON_VERSION默认等于11。当我们使用11g JDBC之前版本的thin驱动连接的时候,就会报错。此处的ALLOWED_LOGON_VERSION不同于oracle版本号,而是内部连接驱动版本号。
解决:在数据库服务器上的oracle/network/admin/sqlnet.ora文件添加一行SQLNET.ALLOWED_LOGON_VERSION=8,重启数据库,重新连接数据库,可以成功连接,问题解决。


ORA-12638:身份证明检索失败
原因:服务端开了防火墙,且使用了本地操作系统认证
解决:修改sqlnet.ora文件,
1)NTS改为NONE,oracle将采用口令文件认证(此时 remote_login_passwordfile=exclusive)如connect /as sysdba 登录,后报错RA-01031: insufficient privileges,实际上是要求你输入sysdba的用户名和密码
SQLNET.AUTHENTICATION_SERVICES= (NONE)
2)修改查找连接的字符串顺序:tnsnames.ora,直接使用简单连接字符串,使用计算机名称
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)


基础 DBMS 错误 ORA-01950: 对表空间 ‘SYSTEM’ 无权限
描述:新建用户(默认表空间SYSTEM)后用于上传shp,提示该错误
原因:对表空间权限不足,无法提交数据到该表空间
解决:对用于存储矢量数据的用户授权

-- Grant/Revoke role privileges
grant connect to user_name;
grant resource to user_name;
grant select_catalog_role to user_name;
-- Grant/Revoke system privileges
grant unlimited tablespace to user_name;

ArcSDE数据被锁定后的解锁方法
描述:(1)删除所选对象失败 锁定请求与已有锁定冲突。
(2)在sde数据被锁定的情况下,编辑、创建featureclass或者注册版本的时候会报告:Lock request conflicts with an established lock。多半情况下关闭数据库连接可以解决这个问题,但有时候问题依然存在。
原因:ArcSDE数据被锁定
解决:sqlplus下查询lock表,如果有记录返回,那么手工删除这些表中的记录。

select t.*,t.rowid from sde.state_locks t;
select t.*,t.rowid from sde.object_locks t;
select t.*,t.rowid from sde.layer_locks t;
select t.*,t.rowid from sde.table_locks t;

ORA-1034 :TNS:ORACLE不可用
原因:ORACLE的数据库服务正确启动,但是数据库没有打开! 使用命令:
1)svrmgrl 启动服务管理器
2)connect internal 以internal身份登陆
3)startup 打开数据库


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值