2014-02-20 125 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」的值