问题发现:在java中用到数据库时,需要传入用户名和密码,都是字符串的,控制台报错,我以为是java程序写错了。后来在sqlplus和sql developer写SQL语句,发现我的Oracle数据库根本就不认识带双引号的字符串!
错误 描述:
这里是表结构,oracle自带的emp表
SQL> desc emp;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO NUMBER(4)
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4) Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected
如果是带双引号查询,遇到字符串就会出错:
SQL> select * from emp
2 where ename="KING";
select * from emp
where ename="KING"
ORA-00904: "KING": 标识符无效
如果字符串是用单引号的包住的话,就不会出错。
SQL> select * from emp
2 where ename='KING';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7839 KING PRESIDENT 1981/11/17 5000.00 10
注:这个数据库是我新装的,以前我装的数据库,貌似都是用双引号来抱住字符串的,而不是单引号啊,由于用到jdbc编程,一般查询语句都是传入字符串,也就是String类型的进来,不可能是传入字符数组进来的,那样太费时费力啊!
------解决思路----------------------
会把 双引号内的内容,当做一个字段,你这里写的是 "KING",他就会去找这个列,其实这列不存在,就出错了
所以你要换成单引号。
------解决思路----------------------
别搞笑了,oracle那有什么双引号的字符串的说法
oracle中要表示字符串,都是把字符用单引号括起来的
如果要表示双引号是字符串的一部分,那就字符串随后就是:‘“abc”’
------解决思路----------------------
Oracle数据库的字符型数据都是用单引号‘’来表示的,没有使用双引号”“来表示字符型的值的。