-1

我正在使用 Oracle Express Edition 来处理 JAVA/SQL 中的项目。该代码没有编译错误,但是当我尝试运行它时,我收到一条错误消息:

调用失败。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();
    }

}

是什么导致了这个错误,我怎样才能让我的项目运行?我正在使用瘦驱动程序。任何帮助,将不胜感激。

在此处输入图像描述

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)
4

2 回答 2

1

ALTER TABLE STUDENTS ADD FlaggedStudents INT
CREATE TABLE IF NOT EXISTS StudentCount" + "(NAME INT , cnt INT )
INSERT INTO StudentCount" +"(NAME , cnt INT "

以上命令不应该在 Oracle 上运行。不支持 INT 数据类型, IF NOT EXISTS 子句是 MySql 语法。
首先更正 SQL 命令并检查它们是否适用于 SQLDeveloper 或 Toad 等 Oracle 客户端,然后在您的 Java 代码中尝试它们。

于 2013-07-25T16:40:43.987 回答
0

您应该尝试这些步骤

  1. 检查项目类路径中是否存在 Oracle 驱动程序(ojdbc6.jar 或 ojdbc14.jar)。在使用 Oracle 10g 或 11g 时,应使用 ojdb6.jar。
  2. 更改这些行

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

       Class.forName("oracle.jdbc.driver.OracleDriver");
    
  3. 并检查数据库 url 模式,请参阅参考链接

于 2013-07-26T07:39:32.197 回答