【问题标题】:java.sql.SQLSyntaxErrorException: The class 'TempSP' does not exist or is inaccessiblejava.sql.SQLSyntaxErrorException:类“TempSP”不存在或不可访问
【发布时间】:2014-11-20 05:54:20
【问题描述】:

我正在尝试使用 java 在 derby 数据库中创建存储过程。

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

Derby 存储过程代码如下:-

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

【问题讨论】:

  • 尝试使用调试开关加载 Java 类,文档here,以及更多信息here
  • 我使用的是netbeans 8.0.1,我在同一个包名FriendsConnections中创建了两个类,并且我使用cmd成功编译了TepmSp文件,虽然发生了TempSP类未找到异常。
  • 尝试从命令提示符加载 Java 类并使用调试选项来获取有关错误的更多详细信息。
  • 类是否在 Derby Network Server 的 CLASSPATH 中?
  • 我的 CLASSPATH 是:“C:\Program Files\Novosoft\C2J\Bin\c2jruntime.zip;C:\Program Files\Java\jdk1.7.0_51\db\lib\derbyclient.jar”我使用 netbeans IDE 在 SourcePackage->FriendsConnection 包中编写 TempSP 类的代码

标签: derby java-stored-procedures


【解决方案1】:

我遇到了同样的问题,解决方法是将存储过程的代码设置在jar文件中,然后使用derby的系统过程注册jar并设置derby的类路径,如下所示

向 Derby 添加一个罐子:

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

将 jar 添加到 derby 的内部类路径

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

希望这对某人有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-23
    • 2017-12-09
    • 2015-05-24
    • 2020-01-05
    • 2023-04-04
    • 2016-09-17
    • 2016-08-18
    相关资源
    最近更新 更多