Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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:无法加载EmbeddedDerby的JDBC驱动程序_Java_Jdbc - Fatal编程技术网

Java:无法加载EmbeddedDerby的JDBC驱动程序

Java:无法加载EmbeddedDerby的JDBC驱动程序,java,jdbc,Java,Jdbc,我在为EmbeddedDerby加载JDBC驱动程序时遇到问题。下面是我编译和运行程序的例子 案例1: 编译:E:\java\workrements>javac-d类源代码/MyDerbyProgram.java 运行:E:\java\workrementer>java-cp类MyDerby程序 错误: 无法加载JDBC驱动程序org.apache.derby.JDBC.EmbeddedDriver 请检查您的类路径。 java.lang.ClassNotFoundException:org.

我在为EmbeddedDerby加载JDBC驱动程序时遇到问题。下面是我编译和运行程序的例子

  • 案例1:

    编译:E:\java\workrements>javac-d类源代码/MyDerbyProgram.java

    运行:E:\java\workrementer>java-cp类MyDerby程序

    错误:

    无法加载JDBC驱动程序org.apache.derby.JDBC.EmbeddedDriver 请检查您的类路径。 java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver 在java.net.URLClassLoader$1.run(URLClassLoader.java:200) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:188) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:306) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:251) 位于java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 位于java.lang.Class.forName0(本机方法) 位于java.lang.Class.forName(Class.java:164) 在MyDerbyProgram.loadDriver(MyDerbyProgram.java:143) 在MyDerbyProgram.go(MyDerbyProgram.java:38) 位于MyDerbyProgram.main(MyDerbyProgram.java:31) java.sql.SQLException:没有合适的驱动程序 SimpleApp已完成

  • 案例2:如果我这样做,一切都好

    编译:E:\java\workrements>javac-d类源代码/MyDerbyProgram.java

    更改目录:E:\java\workrementer>cd类

    运行:E:\java\workrements\class>javamyderby程序

    输出:

    加载了相应的驱动程序

    插入的行

    二,-----

    1956年哈诺

    1975年西贡

    SimpleApp已完成

有人能帮我解释为什么我在案例1中出错,因为我正在编写一个更复杂的程序吗? 我的代码:


关于

-cp
选项设置类路径,您不需要这个


谢谢您,先生。首先,我有另一个程序名Application.java,它不适用于DB。虽然我在案例1或案例2中运行了它,但它是正常的。第二,在我更复杂的程序中,我将MyDerbyProgram放在一个包名db中,因此如果我cd到db目录来运行带有案例2的MyDerbyProgram,它将不起作用。您能告诉我在案例1中如何运行我的Derby程序吗?是的,先生。我的问题是为什么我可以在案例1和案例2中运行Application.java(不使用DB),但我不能在MyDerbyProgram.java(使用DB)。它不从外部JAR导入,这就是为什么类路径(使用cp设置)不重要的原因谢谢。如果我把MyDerbyProgram.java放在包名数据库中,你能帮我运行它吗?这对我来说是一个很大的挑战(只是如何运行,因为我可以编译它)。
javac db/MyDerbyProgram.java
,然后
java db.MyDerbyProgram
,并确保文件MyDerbyProgram.java位于名为
db
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Properties;

public class MyDerbyProgram
{
    /* the default framework is embedded*/
    private String framework = "embedded";
    private String driver = "org.apache.derby.jdbc.EmbeddedDriver";
    private String protocol = "jdbc:derby:";

    public static void main(String[] args)
    {
        new MyDerbyProgram().go(args);
        System.out.println("SimpleApp finished");
    }

    void go(String[] args)
    {
        /* load the desired JDBC driver */
        loadDriver();
        try
        {
            Connection connection = DriverManager.getConnection(protocol + "testDB; create=true");
            connection.setAutoCommit(false);


            //Create table
            Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
            statement.execute("create table location(num int, address varchar(40))");

            //Insert
            PreparedStatement psInsertStatement = connection.prepareStatement("insert into location values(?, ?)");
            psInsertStatement.setInt(1, 1956);
            psInsertStatement.setString(2, "Ha Noi");
            psInsertStatement.executeUpdate();
            psInsertStatement.setInt(1, 1975);
            psInsertStatement.setString(2, "Sai Gon");
            psInsertStatement.executeUpdate();
            System.out.println("Row inserted.");

            //Select
            ResultSet resultSet = statement.executeQuery("select * from location");

            int totalRows = 0;

            resultSet.last();
            totalRows = resultSet.getRow();
            resultSet.beforeFirst();
            System.out.println(totalRows + "-----");

            String strPrintResult = "";
            while(resultSet.next())
            {
                strPrintResult += resultSet.getString("num") + "___________________+_________________________" + resultSet.getString("address") + "\n";
            }           
            System.out.println(strPrintResult);

            //Drop table
            statement.execute("drop table location");

            //Commit transaction
            connection.commit();

            //Close
            statement.close();
            statement = null;

            psInsertStatement.close();
            psInsertStatement = null;

            resultSet.close();
            resultSet = null;

            connection.close();
            connection = null;
        }

        catch(SQLException se)
        {
            System.out.println(se.toString());
        }
    }

    private void loadDriver() {
    try {
        Class.forName(driver).newInstance();
        System.out.println("Loaded the appropriate driver");
    } catch (ClassNotFoundException cnfe) {
        System.err.println("\nUnable to load the JDBC driver " + driver);
        System.err.println("Please check your CLASSPATH.");
        cnfe.printStackTrace(System.err);
    } catch (InstantiationException ie) {
        System.err.println(
                    "\nUnable to instantiate the JDBC driver " + driver);
        ie.printStackTrace(System.err);
    } catch (IllegalAccessException iae) {
        System.err.println(
                    "\nNot allowed to access the JDBC driver " + driver);
        iae.printStackTrace(System.err);
    }
    }
    private void parseArguments(String[] args)
    {
        if (args.length > 0) {
            if (args[0].equalsIgnoreCase("derbyclient"))
            {
                framework = "derbyclient";
                driver = "org.apache.derby.jdbc.ClientDriver";
                protocol = "jdbc:derby://localhost:1527/";
            }
        }
    }
}