Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据库连接错误JDBC_Java_Sql_Database_Jdbc - Fatal编程技术网

Java 数据库连接错误JDBC

Java 数据库连接错误JDBC,java,sql,database,jdbc,Java,Sql,Database,Jdbc,我正在使用Oracle Express Edition处理JAVA/SQL中的一个项目。该代码没有编译错误,但当我尝试运行它时,会出现以下错误: call.XE.SYS.DBMS\u FEATURE\u TEST\u PROC\u 1失败 这是我的密码: import java.sql.*; import javax.sql.*; public class StudentAverages { public static void main(String[] args) { t

我正在使用Oracle Express Edition处理JAVA/SQL中的一个项目。该代码没有编译错误,但当我尝试运行它时,会出现以下错误:

call.XE.SYS.DBMS\u FEATURE\u TEST\u PROC\u 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();
    }

ALTER TABLE学生添加标记学生INT
创建表(如果不存在)StudentCount“+”(NAMEINT,cntINT
在StudentCount中插入“+”(姓名,cntINT


不支持在Oracle上运行上述命令。不支持INT datatype,IF not EXISTS子句是MySql语法。
首先更正SQL命令,检查它们是否在某些Oracle客户端(如SQLDeveloper或Toad)上工作,然后在java代码中尝试它们。

您应该尝试以下步骤

  • 检查项目类路径中是否有可用的Oracle驱动程序(ojdbc6.jar或ojdbc14.jar)。在使用Oracle 10g或11g时,应使用ojdb6.jar
  • 换线

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

  • 并检查数据库url模式,请参阅参考


  • 哪一行导致了错误?拜托,我们不是坐在你旁边看你的ide…它没有说哪一行导致了错误。我使用的是eclipse,它说“Failed call.XE.SYS.DBMS\u FEATURE\u TEST\u PROC\u 1"在“SQL结果”选项卡上。仅此而已。我试图编辑我的帖子,以附加错误图片,但它说我需要10个信誉才能发布一个图像。我附加了我收到的错误快照。@user2554121没有足够的信息,无法帮到您。我建议您调试代码。如果您不知道如何调试,请使用我建议不要在Eclipse中运行此操作-您看到的错误可能不是代码的问题,而是Eclipse的问题(以及您如何配置它)。您应该尝试从命令行运行此操作,看看会发生什么。我尝试了您的建议,并修复了不匹配的命令(我是数据库编程新手,不知道某些SQL语句不受特定数据库的支持)因此,谢谢你!我再次使用@Joev的建议编译了我的程序(从命令提示符编译)。我仍然会得到错误
    异常:oracle.jdbc.OracleDriver
    ,它是从我的main方法中的catch语句中打印出来的。设置一个断点,并使用调试器逐行遍历代码,以查找哪个语句引发该异常。更妙的是,将每个语句包围在try{..}catch(SQLException)中,并以某种方式记录错误消息(例如到日志文件),使用log4j甚至java.itil.logger;这会将堆栈跟踪打印到控制台,这不是很有用。要找到问题,我们必须知道哪条语句引发了错误,以及错误号/描述是什么。异常:oracle.jdbc.OracleDriver什么都不告诉我们。谢谢。我尝试了您的建议,现在已经发布了堆栈跟踪。您的连接字符串是错误的-->getConnection(“jdbc:oracle:driver\u type:[用户名/密码]@//host\u name:port\u number:SID”);尝试以下字符串(示例):“jdbc:oracle:thin:db\u user/db”_password@host_name:orcl“-->键入您的数据库用户+密码、主机名、orcl-是我的数据库的SID,检查您的SID是什么。还要检查类路径中是否有正确的驱动程序,如果没有,请从此链接下载驱动程序:谢谢@kordirko,您的回答真的很有帮助!
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    
       Class.forName("oracle.jdbc.driver.OracleDriver");