jdbc链接oracle取数据不正常:
我的数据库里面表是这个样子:select * from cat 
catid           catname  catsex  
2007111101 小猫1    1
2007111102 小猫2    0
2007111103 小狗3    1
还有一个同样的表catt,这个我是用来测试的
在链接oracle的时候没有问题,也就是说能够取得链接。
取得数据的代码如下: Statement stmt = null;
ResultSet rs = null;
ResultSetMetaData md = null;
TestClass test = new TestClass();//用来取得con的
stmt = con.createStatement();
rs = stmt.executeQuery("select * from cat");//这里的SQL如果改成select * from catt 就报ORA-00942: 表或视图不存在 错误!但是我明明数据库里面有catt这个表,
while (rs.next())
{
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
                 }这样报错:
AQ$DEF$_AQCALL
VIEW
Exception in thread "main" java.sql.SQLException: 无效的列索引
______________
我的表是cat一共3个字段,为什么只有
AQ$DEF$_AQCALL
VIEW
这2个字段?而且字段也不对??我登录oracle的用户名是system,和这个有关系吗?。用PL/SQL登录就能执行上述2个SQL语句!在java里面就异常,
希望大家帮帮忙!

解决方案 »

  1.   

    1。
    这里的SQL如果改成select * from catt 就报ORA-00942: 表或视图不存在    错误!但是我明明数据库里面有catt这个表这里是,你的catt表不是保存在system用户下的,即system的表空间的 Oracle在检索表时 ,是根据schema来检索的。而schema是个你的登陆用户下相关的
    你可以在DOS下使用system登陆后执行这条这个指令:
    select table_name from user_tbales;来查看system中所有的表,查看catt是否在这个schmea下2。AQ$DEF$_AQCALL 
    VIEW 
    Exception   in   thread   "main "   java.sql.SQLException:   无效的列索引 
    ______________ 
    我的表是cat一共3个字段,为什么只有 
    AQ$DEF$_AQCALL 
    VIEW这2个字段?而且字段也不对?? 这个问题,没见过,但是AQ$DEF$_AQCALL 这个好象是SYSTEM schema下的默认表,关注
      

  2.   


    你的catt表不是保存在system用户下的,即在system的表空间下没有catt表 。Oracle在检索表时 ,是根据schema来检索的。而schema是与你的登陆用户下相关的,可以理解成system的schema就是system
      

  3.   

    第一个问题:你建表的时候没有考虑到表空间,你观察一下cat和catt是否在同一个表空间下
    第二个问题:在while语句前,加上一句rs.first();试试看;或者在取每个字段内容的时候,不用
    rs.getString(1),改用列名试试
      

  4.   

    jdbc的列索引是不是从0开始,你这里出现了3,索引超界了
    还有con连接字符串是什么??
      

  5.   

    3楼,rs.getString(1)我已经改用直接取表空间了,但是出现错误:java.sql.SQLException: 列名无效想问问大家:建表的时候怎么考虑表的空间问题?
    还有我怎样建立一个自己的用户来登录oracle,也就是不用system和sys登录?
      

  6.   

    用PL/SQL登录就能执行上述2个SQL语句!在java里面就异常
    ============================================请检查一下PL/SQL端有没有 commit;
      

  7.   

    有两种情况:
    1,当在表中插入数据之后没有用COMMIT语句提交
    2,你的GETSTRING()索引超出范 围
      

  8.   

    你把 while (rs.next())
         {
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
                System.out.println(rs.getString(3));
         }
    改成
          while (rs.next())
            {
                System.out.println(rs.getString(0));
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
            }就OK啦
      

  9.   

    不同的schema的问题,楼上很多人是正解!呵呵,顶贴!
      

  10.   

    在DOS下使用system登陆后执行这条这个指令:
    select table_name from user_tbales;
    看到system中所有的表,可以看到catt这个表
      

  11.   

    知识有限,不懂这是为什么了;
    我建议你用数据库,最好创建一个USERS组下的用户,然后使用该用户的进行登陆和操作
      

  12.   

    我在DOS下,用下列命令建立了一个用户:
    create tablespace fam datafile '/oracle/oradata/myspace.dba' size 1000m;
    create user testdba identified by testdba default tablespace fam;
    grant create session to testdba;
    grant resource to testdba;那么当我用testdba这个帐户,登录QL/SQL Developer
    登录之后建立一个表:testtable
    create table testtable
    (
    tableid varchar(2) not null,
    tablename varchar(20),
    tablecol3 varchar(10)
    )在我应用java程序调用的时候,我的SQL语句为什么写成"select * from sys.testtable"才行???(select * from testtable 报错:ORA-00942: 表或视图不存在
    难道我登录建表之后这个表还是属于sys的?怎样才能解决不用在表明前面加sys?上面的问题都是由于在表的前面没有sys.的缘故!,不知道怎样建表不属于sys的?谢谢大家,帮帮忙!
      

  13.   

    java程序调用的时候,登录用户是system
      

  14.   

    接着问:
    我建表的时候如果
    create table testdba.testtable
    (
    tableid varchar(2) not null,
    tablename varchar(20),
    tablecol3 varchar(10)
    )那么在java调用的时候,用testdba取得链接,其中的SQL语句就可以查询到内容,
    那么我现在想做的是我建表不用testdba.table的形式,要怎么做?
      

  15.   

    明白了,原来我登录PL/SQL的时候是用dba登录的,其实用DBA模式登录,随便输入个密码就能登录,真不知道为什么啊,哈哈,
    好了,结贴给分!