java.sql.SQLSyntaxErrorException: класс TempSP не существует или недоступен

Я пытаюсь создать хранимую процедуру в базе данных дерби, используя java.

public class TestDrive {

public static void main (String[] args) throws SQLException, ClassNotFoundException{
    Connection conn = null;
    CallableStatement stmt = null;
    try {
        try{
        Class.forName("org.apache.derby.jdbc.ClientDriver").;
    } catch(ClassNotFoundException e){
        System.out.println("Can't load the database driver");
        return;
    }
        conn = DriverManager.getConnection("jdbc:derby://localhost:1527/Connections_DB", "Connections_DB", "KaayRey");
        stmt = conn.prepareCall("CALL NameOFstoreProcedure4( ?, ? )");
        stmt.setString(1, "Kitu");
        stmt.setString(2, "KaayChalay");
        stmt.execu`enter code here`te();
    } finally {
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
}
}   //END OF CLASS TestDrive.java

Код TempSP.java: -

public class TempSP {
public static void NameOFSP(String uname, String upass)throws SQLException {
   PreparedStatement stmt = null;
   ResultSet res = null;
   String message = null ;
    try{
        try{`enter code here`
        Class.forName("org.apache.derby.jdbc.ClientDriver");
    } catch(ClassNotFoundException e){
        System.out.println("Can't load the database driver");
        return;
    }
    String dbURL = "jdbc:derby://localhost:1527/Connections_DB";
    Connection conn = DriverManager.getConnection(dbURL, "Connections_DB", "KaayRey");      
     Stri`enter code here`ng sql = "INSERT INTO USERS2(USER_NAME, USER_PASSWORD) VALUES(?, ?)";
     stmt = conn.prepareStatement(sql);
     stmt.setString(1, uname);
     stmt.setString(2, upass);
         int row = stmt.executeUpdate(sql);
    }catch (SQLException ex) {
        message = "ERROR 1 : " + ex.getMessage();
        ex.printStackTrace();
    } 
}
} // END OD TempSP.java

Но когда я запускаю свой файл TestDrive.java, он выдает следующую ошибку: -

"Exception in thread "main" java.sql.SQLSyntaxErrorException: The class 'TempSP' does not exist or is inaccessible. This can happen if the class is not public.
    at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
    at org.apache.derby.client.am.Connection.prepareCall(Unknown Source)
    at FriendsConnectionPack.TestDrive.main(TestDrive.java:34)
Caused by: org.apache.derby.client.am.SqlException: The class 'TempSP' does not exist or is inaccessible. This can happen if the class is not public.
    at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)
    at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)
    at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source)
    at org.apache.derby.client.net.NetStatementReply.readPrepare(Unknown Source)
    at org.apache.derby.client.net.StatementReply.readPrepare(Unknown Source)
    at org.apache.derby.client.net.NetStatement.readPrepare_(Unknown Source)
    at org.apache.derby.client.am.Statement.readPrepare(Unknown Source)
    at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInput(Unknown Source)
    at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)
    at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source)
    at org.apache.derby.client.am.Connection.prepareCallX(Unknown Source)
    ... 2 more
Caused by: org.apache.derby.client.am.SqlException: Java exception: 'TempSP: java.lang.ClassNotFoundException'.
    ... 13 more
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)"

Код хранимой процедуры Дерби выглядит следующим образом:

CREATE PROCEDURE NameOFstoreProcedure5(User_Name VARCHAR(50), User_Password VARCHAR(20))
PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME 
'FriendsConnectionPack.TempSP.NameOFSP'

person Truest    schedule 20.11.2014    source источник
comment
Попробуйте загрузить классы Java с помощью переключателей отладки, документация здесь , а также дополнительную информацию здесь.   -  person Jacob    schedule 20.11.2014
comment
Я использую netbeans 8.0.1, и я создал оба класса в одном и том же имени пакета FriendsConnections, и я успешно скомпилировал файл TepmSp с помощью cmd, хотя произошло исключение класса TempSP not found.   -  person Truest    schedule 20.11.2014
comment
Попробуйте загрузить класс Java из командной строки и используйте параметр отладки, чтобы получить более подробную информацию об ошибках.   -  person Jacob    schedule 20.11.2014
comment
Находится ли класс в CLASSPATH сетевого сервера Derby?   -  person Bryan Pendleton    schedule 20.11.2014
comment
Мой CLASSPATH: C:\Program Files\Novosoft\C2J\Bin\c2jruntime.zip;C:\Program Files\Java\jdk1.7.0_51\db\lib\derbyclient.jar И я пишу код класса TempSP в SourcePackage- › Пакет FriendsConnection с использованием среды IDE netbeans   -  person Truest    schedule 21.11.2014


Ответы (1)


Я столкнулся с той же проблемой, и решение заключалось в установке кода хранимой процедуры в файле jar, а затем с использованием системных процедур derby для регистрации jar и установки пути к классу derby, как показано ниже.

Чтобы добавить банку в Derby:

CALL sqlj.install_jar('PATH TO JAR FILE', 'DATABASE.IDENTIFIER FOR THE JAR', 0)

Чтобы добавить банку во внутренний путь к классам дерби

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(
'derby.database.classpath',
'colonSeparatedJarFiles')

Надеюсь, это поможет кому-то

person Pablo Flores    schedule 18.03.2016