Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORA-00918:在Java中定义不明确的列,SQL开发人员工作_Java_Sql_Oracle - Fatal编程技术网

ORA-00918:在Java中定义不明确的列,SQL开发人员工作

ORA-00918:在Java中定义不明确的列,SQL开发人员工作,java,sql,oracle,Java,Sql,Oracle,我在Oracle SQL Developer中创建了一个select select PRZYJECIE_NA_ODDZIAL.PRZYJECIEID as Numer_przyjęcia, PRZYJECIE_NA_ODDZIAL.PACJENTID as ID_pacjęta, PACJENT.PACJENTIMIE as Imię, PACJENT.PACJENTNAZWISKO as Nazwisko, PACJENT.PESEL

我在Oracle SQL Developer中创建了一个select

select PRZYJECIE_NA_ODDZIAL.PRZYJECIEID as Numer_przyjęcia, 
       PRZYJECIE_NA_ODDZIAL.PACJENTID as ID_pacjęta, 
       PACJENT.PACJENTIMIE as Imię,
       PACJENT.PACJENTNAZWISKO as Nazwisko,
       PACJENT.PESEL as PESEL, 
       PRZYJECIE_NA_ODDZIAL.ROZPOZNANIE AS DIAGNOZA,
       PRZYJECIE_NA_ODDZIAL.NAZWAODDZIALU as ODDZIAŁ, 
       PRZYJECIE_NA_ODDZIAL.DATAPRZ as DATA_PRZYJĘCIA, 
       LEKARZ.LEKARZIMIE as Imię_lekarza, 
       LEKARZ.LEKARZNAZWISKO as Nazwisko_lekarza, 
       PRZYJECIE_NA_ODDZIAL.UWAGI 
  from SZPITAL_DB.PACJENT, SZPITAL_DB.LEKARZ, SZPITAL_DB.PRZYJECIE_NA_ODDZIAL 
 where PRZYJECIE_NA_ODDZIAL.PACJENTID = PACJENT.PACJENTID 
   and PRZYJECIE_NA_ODDZIAL.LEKARZID = LEKARZ.LEKARZID
当我在SQL Developer中运行它时,效果非常好:

但当我把它放到Java中时,我得到了一个错误:

ORA-00918: column ambiguously defined 
Java代码:

 private void Get_Data(){
   String sql="select PRZYJECIE_NA_ODDZIAL.PRZYJECIEID as Numer_przyjęcia, PRZYJECIE_NA_ODDZIAL.PACJENTID as ID_pacjęta, PACJENT.PACJENTIMIE as Imię,PACJENT.PACJENTNAZWISKO as Nazwisko,PACJENT.PESEL as PESEL, PRZYJECIE_NA_ODDZIAL.ROZPOZNANIE AS DIAGNOZA,PRZYJECIE_NA_ODDZIAL.NAZWAODDZIALU as ODDZIAŁ,PRZYJECIE_NA_ODDZIAL.DATAPRZ as DATA_PRZYJĘCIA, LEKARZ.LEKARZIMIE as Imię_lekarza, LEKARZ.LEKARZNAZWISKO as Nazwisko_lekarza, PRZYJECIE_NA_ODDZIAL.UWAGI from SZPITAL_DB.PACJENT,SZPITAL_DB.LEKARZ, SZPITAL_DB.PRZYJECIE_NA_ODDZIAL where PRZYJECIE_NA_ODDZIAL.PACJENTID = PACJENT.PACJENTID and PRZYJECIE_NA_ODDZIAL.LEKARZID = LEKARZ.LEKARZID";
   try{         pst=con.prepareStatement(sql);
      rs= pst.executeQuery();
     jTable1.setModel(DbUtils.resultSetToTableModel(rs));
     }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);

根据你发布的代码,我猜你似乎已经定义了

SZPITAL_DB.PACJENT, 
SZPITAL_DB.LEKARZ, 
SZPITAL_DB.PRZYJECIE_NA_ODDZIAL 
在FROM语句中,但在SELECT语句中,您似乎使用例如
PRZYJECIE_NA_ODDZIAL的表名来引用它,而没有例如
SZPITAL_DB的数据库名。
。这同样适用于
PACJENTID
LEKARZID


正如@DanK所提到的,也许您的表名有拼写错误?

编辑很有用,但现在更难检查这两个请求是否相同,因此我将在这里说明:我验证过,它们以前完全相同,这不是一个简单的打字错误。现在,通过编辑的格式,我们可以看到您在每个引用前都加了前缀,所以应该没有歧义……因为您已经在每个列引用中显式定义了表,所以不应该出现此错误。这就告诉我,要么你在某个地方输入了一个错误,要么你在使用的Java库中发现了一个错误。我建议尝试拦截最终传递到数据库的调用。您可能没有通过Java发送与通过SQL Developer发送的脚本相同的脚本。请将SQL语句尽可能小,我们需要/不需要完整的语句来分析您的问题!并以便于阅读/比较/分析的方式对其进行格式化。Java(或您的操作系统)使用什么字符集?我猜,FWIW,是因为多字节字符,以
Imi
开头的两个别名被混淆了。这可能也是JDBC驱动程序/兼容性的问题。两者是否都使用相同的JDK和驱动程序?你能试着改变其中的一个别名吗?在第四个字符之前,看看是否有什么不同?(我想你真的确定是这个查询出错了吗?)。但是,如果您的JDBC驱动程序和数据库之间存在不兼容,就多字节字符的传输方式而言,仅仅更改列别名是不够的。您需要研究数据库和驱动程序中可用的国际字符设置,并确保它们兼容。如果在
FROM
子句中完全限定了模式,则无需重复选择列表中的模式,并且这不会导致定义不清的列