2014-02-20 7 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 и Oracle. Если ошибки настолько очевидны, не смейтесь :)

+0

Вы должны распечатать сгенерированного заявление, а затем показать, что * * к нам. И, пожалуйста, укажите определение таблицы. Но я предполагаю, что вы включаете символьные литералы в предложение '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 DB, его успешно подключено. Ваша проблема в запросе. убедитесь, что у вас есть столбец SERI_NO в таблице KART.

Я предлагаю вам ЗАПИСАТЬ оба одинаковых запроса в вашем коде от любого SQL клиентов, таких как SQLDeveloper и посмотреть, что эти запросы получают.

+0

Сообщение об ошибке ** не ** о столбце' SERI_NO'. –

+0

Спасибо за ответ. Но у меня нет проблем с запросом, который отлично работает на sqlDeveloper. Код работает нормально до тех пор, пока listOgrenciler.addListSelectionListener (новая строка ListSelectionListener() – eddasahin61

+0

@ user3331869 вам не нужно будет проверять оба вопроса, потому что проблема вызвана одним из них, и я думаю, что это второй. – Salah

0

соблюдать это заявление один раз,

swhere=swhere.substring(0,swhere.length()-1); 

заменить приведенное выше утверждение со следующим

shere=swhere.substring(0,swhere.length()-2); 

Потому что дополнительная запятая (,) включена в ваш оператор sql.

0

Нет проблем с подключением.

Пожалуйста, добавьте некоторые данные в свой код, и вы точно узнаете, где находится ошибка.

Я предполагаю, что ошибка бросает в этой строке .. SELECT * FROM КАРТ где SERI_NO в («+ swhere +»)

Вы должны указать это в виде строки с «», где фактический выбрать, как показано ниже. SELECT * FROM KART, где SERI_NO в ('ABC', 'XCV');

поэтому, пожалуйста, проверьте с этим проверить значение «swhere»

Смежные вопросы