2014-02-20 98 views
0

我是Java和Oracle的新手。我试图制作一个列出产品序列号的应用程序,当您从列表中单击产品的序列号时,它会在文本框中显示数据库中的其他列信息。我有一个名为CRUD的表单,我使用的是Oracle 10g。代码是在这里:Java Oracle数据库连接错误

package project1; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 


public class CRUD extends javax.swing.JFrame { 


     Connection connection = null; 
    public CRUD() { 

       try { 
       initComponents(); 
       String driverName = "oracle.jdbc.driver.OracleDriver"; 
       Class.forName(driverName); 
       String serverName = "192.168.0.36"; 
       String portNumber = "1521"; 
       String sid = "XE"; 
       String url = "jdbc:oracle:thin:@"+serverName+":"+portNumber+":"+sid; 
       String userName = "HR"; 
       String password = "hr"; 
        try { 
         connection = DriverManager.getConnection(url,userName,password); 
        } catch (SQLException ex) { 
         Logger.getLogger(CRUD.class.getName()).log(Level.SEVERE, null, ex); 
        } 
        try { 
     String temp=""; 
     Statement stmt = connection.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT SERI_NO FROM KART"); 


     while(rs.next()) // dönebildiği süre boyunca 
     { 
      String s = rs.getString("SERI_NO") ; //kolon isimleri oluşturuldu 
      temp+=s+"_"; 
     }   

     Object [] tem_obj; 

     tem_obj=temp.split("_"); 
     listOgrenciler.setListData(tem_obj); 

    } catch (SQLException ex) { 
     Logger.getLogger(edit.class.getName()).log(Level.SEVERE, null, ex); 
    } 

     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(CRUD.class.getName()).log(Level.SEVERE, null, ex); 
     }  


     listOgrenciler.addListSelectionListener(new ListSelectionListener() { 

      @Override 
      public void valueChanged(ListSelectionEvent arg0) { 
       if (!arg0.getValueIsAdjusting()) { 
        try { 
        Statement stmtx = connection.createStatement(); 
         Object[] sss=listOgrenciler.getSelectedValues(); 
        String swhere="" ; 
        for (int i = 0; i < sss.length; i++) { 
          swhere+=sss[i].toString()+","; 
         } 
        swhere=swhere.substring(0,swhere.length()-1); 
        ResultSet rsx = stmtx.executeQuery("SELECT * FROM KART where SERI_NO in ("+swhere+")") ; 
        String temp=""; 

          Object [] tem_obj; 
         tem_obj=temp.split("_"); 
         String ara=""; 
         for (int i = 0; i < tem_obj.length; i++) { 
          ara+=tem_obj[i].toString()+"\n"; 
         } 
         texttoarea.setText(ara); 

        } catch (SQLException ex) 
        { 
         Logger.getLogger(edit.class.getName()).log(Level.SEVERE, null, ex); 
        }   
       } 
      } 
     }); 



    } 

错误,我得到的是在这里:

20.Şub.2014 11:22:11 project1.CRUD$1 valueChanged 
SEVERE: null 
java.sql.SQLSyntaxErrorException: ORA-00904: "SNS080961097": invalid identifier 
    ..... 
    at project1.CRUD$1.valueChanged(CRUD.java:78) 
    ...... 

正如我以前说过,我是新来的Java和甲骨文。如果错误是如此明显,不要笑:)

+0

您应该打印出生成的语句,然后向我们显示* that *。并请包括表格定义。但是我想你是用双引号将'IN'子句中的字符文字括起来。在SQL中,使用双引号(''')来引用标识符。字符文字需要用单引号引起来,所以这个值应该是''SNS080961097'** **不**'“SNS080961097”' –

+0

调试以查看什么您的变量'swhere'正在携带... – sadhu

回答

0

你的这个查询

ResultSet rsx = stmtx.executeQuery("SELECT * FROM KART where SERI_NO in ("+swhere+")") ; 

应该是这样的:

ResultSet rsx = stmtx.executeQuery("SELECT * FROM KART where SERI_NO in ('"+swhere+"')") ; 
+0

工作!非常感谢! – eddasahin61

+0

我标记了但我不能投票,因为我还没有受欢迎 – eddasahin61

+0

感谢您的接受 –

0

其实没有问题,你连接到Oracle数据库的步骤,它连接成功,你的问题是在查询中。请确保您的KART表中有SERI_NO列。

我建议你在任何SQL客户端如SQLDeveloper上运行这两个相同的查询代码,并查看这些查询检索的内容。

+0

错误消息是** not **关于“SERI_NO”列。 –

+0

感谢您的答案。但我没有问题,查询它在sqlDeveloper上正常工作。代码工作正常,直到listOgrenciler.addListSelectionListener(新的ListSelectionListener()行 – eddasahin61

+0

@ user3331869你需要检查这两个查询,因为他们其中之一的问题,我认为它的第二个 – Salah

0

观察,一旦这一说法,

​​

替换为以下

上述声明

因为一个额外的逗号(,)包含在你的sql语句中。

0

连接没有问题。

请为您的代码添加一些日志记录,您将确切知道错误发生的位置。

我猜的错误在这行抛.. SELECT * FROM KART其中(“+ swhere +”)SERI_NO

你必须将其指定为与“”一个字符串,在这里你实际的选择应看起来像下面。 SELECT * FROM KART where SERI_NO in('ABC','XCV');

所以请检查这个检查“swhere”的值