2013-07-25 3 views
-1

Я использую Oracle Express Edition для работы с проектом в JAVA/SQL. Код не содержит ошибок компиляции, но когда я пытаюсь запустить его, я получаю сообщение об ошибке, что говорит:Ошибка подключения к базе данных JDBC

Failed call.XE.SYS.DBMS_FEATURE_TEST_PROC_1

Вот мой код:

import java.sql.*; 
import javax.sql.*; 

public class StudentAverages { 
public static void main(String[] args) { 

    try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     Connection con = DriverManager.getConnection("jdbc:oracle:driver_type:[username/password]@//host_name:port_number:SID"); 
     Statement st = con.createStatement(); 
     ResultSet rs = st.executeQuery("Select * from [Sheet1$]"); 

     ResultSetMetaData rsmd = rs.getMetaData(); 
     int numberOfColumns = rsmd.getColumnCount(); 


     while (rs.next()) { 

      for (int i = 1; i <= numberOfColumns; i++) { 
       if (i > 1) 
        System.out.print(", "); 
       String columnValue = rs.getString(i); 
       System.out.print(columnValue); 
      } 
      System.out.println(""); 
     } 

     st.close(); 
     con.close(); 

    } catch (Exception ex) { 
     System.err.print("Exception: "); 
     System.err.println(ex.getMessage()); 
    } 



} 
     public void StudentMean(Connection con, Statement st, ResultSet rs) throws SQLException{ 

       try{ 
     Statement stOne, stTwo, stThree, stFour; 
     String SelectAverage = "SELECT MEAN FROM STUDENTS"; 
      ResultSet rsOne = stOne.executeQuery(SelectAverage); 

    String TotalAverage = "SELECT Avg(MEAN) AS averages FROM STUDENTS"; 
      ResultSet rsTwo = stTwo.executeQuery(TotalAverage);  

      String student_stan_dev = "SELECT STDEV(MEAN) AS standardDeviation FROM STUDENTS"; 
      ResultSet rsThree = stThree.executeQuery(student_stan_dev); 

      int onesdMean = 1; 


      //Loop Duration_Sec column 
      while(rsOne.next()){ 

      //Convert values into float values 
      allAvgs = rsOne.getFloat("MEAN"); 
      totalAvg = rsTwo.getFloat("averages"); 
      StDev = rsThree.getFloat("standardDeviation"); 
      } 

        //Calculate one standard deviation away from mean 
        theSD = allAvgs - (onesdMean * StDev); 


         //Create a new column 
     String flaggedStudents = "ALTER TABLE STUDENTS ADD FlaggedStudents INT"; 
     ResultSet rsFour = stFour.executeUpdate(flaggedStudents); 

      if(allAvgs >= theSD){ 

          //Flag students who meet the criteria 
       String FlagHint = "INSERT INTO STUDENTS.FlaggedStudents VALUES('1')"; 
       st.executeUpdate(FlagHint); 
      } 

        //Count the students who meet the criteria and add those students 
        //to a new table 

     String countInstances = "SELECT STUDENTS.NAME, STUDENTS.FlaggedStudents" + 
       "COUNT(*)OVER(PARTITION BY STUDENTS) AS cnt FROM STUDENTS"; 
      st.executeQuery(countInstances); 


     st.executeUpdate("CREATE TABLE IF NOT EXISTS StudentCount" + 
     "(NAME INT , cnt INT)"); 

     String insertVals = String.format("INSERT INTO StudentCount" + 
       "(NAME , cnt INT") + 
       " VALUES ('%s','%s')"); 

     st.execute(insertVals); 
} 
    catch(SQLException e){ 
    e.printStackTrace(); 
    } 

}

В чем причина этой ошибки и как я могу запустить свой проект? Я использую тонкий драйвер. Любая помощь будет оценена по достоинству.

enter image description here

Stack Trace: 
    java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Unknown Source) 
     at StudentAverages.main(StudentAverages.java:23) 
exception : 
java.sql.SQLException: No suitable driver found for jdbc:oracle:driver_type:[username/password]@//host_name:port_number:SID 
     at java.sql.DriverManager.getConnection(Unknown Source) 
     at java.sql.DriverManager.getConnection(Unknown Source) 
     at StudentAverages.main(StudentAverages.java:31) 
+0

какая линия вызывает ошибку? пожалуйста, мы не сидим рядом с вами, глядя на ваш идеал ... –

+0

Пожалуйста, разместите сообщения stacktrace, чтобы лучше понять проблему. Кроме того, это поможет узнать номер строки, где возникает ошибка. –

+0

Может существовать множество мест, где может возникать «Исключение». Мое лучшее предположение было бы 'SQLException' для' FlagHint'. Вы должны предоставить 'columname' там. – Smit

ответ

1

ALTER TABLE СТУДЕНТЫ ADD FlaggedStudents INT
CREATE TABLE IF NOT EXISTS StudentCount»+ "(ИМЯ INT, CNT INT)
INSERT INTO StudentCount" + "(NAME, cnt INT"

Выше команды не запрещены для работы на Oracle. Тип данных INT не поддерживается, условие IF NOT EXISTS - это синтаксис MySql.
Первые правильные команды SQL и проверьте, работают ли они на каком-то сервере oracle, например SQLDeveloper или Toad, а затем попробуйте их в вашем Java-коде.

+0

Я пробовал ваше предложение и исправил несогласованные команды (я новичок в программировании базы данных и не знал, что некоторые SQL-инструкции не поддерживаются конкретными базами данных), поэтому благодарим вас за это! Я снова скомпилировал свою программу, используя предложение @ Joev (компиляция из командной строки). Я по-прежнему получаю сообщение об ошибке «Исключение: oracle.jdbc.OracleDriver», которое напечатано из оператора catch в моем основном методе. – user2554121

+0

Установите точку останова и выполните код по строкам с помощью отладчика, чтобы найти, какой оператор выдает это исключение. Еще лучше - объедините каждый оператор в try {..} catch (SQLException) и зарегистрируйте сообщения об ошибках как-то (например, в файле журнала), используя log4j или даже java.itil.logger. Пока ваш код использует e.printStackTrace(); который печатает трассировку стека на консоль, что не очень полезно. Чтобы найти проблему, мы должны знать, какой оператор выдает ошибку, и каков номер ошибки/описание. Исключение: oracle.jdbc.OracleDriver ничего нам не говорит. – krokodilko

+0

спасибо. Я попробовал ваше предложение и теперь опубликовал трассировку стека. – user2554121

0

Вы должны попробовать эти шаги

  1. Проверьте драйвер Oracle (ojdbc6.jar или ojdbc14.jar) в вашем проекте classpath.You следует использовать ojdb6.jar, когда вы используете Oracle 10g или 11g.
  2. Изменить эти линии

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    

    в

    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    
  3. А также проверить URL базы данных шаблон, см ссылку link.

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