проблема с JDBC при использовании файла JAR и командной строки - PullRequest
0 голосов
/ 19 апреля 2011

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

моя программа не может подключиться к моей базе данных Oracle, когда я использую командную строку для запуска своей программы! моя IDE запускает эту команду:

javaw.exe -client -classpath C:\JDeveloper\mywork\SourceManagmentTools\.adf;C:\JDeveloper\mywork\SourceManagmentTools\Client\classes;C:\Oracle\Middleware\jdeveloper\jdev\lib\jdev-rt.jar;C:\JDeveloper\mywork\SourceManagmentTools\Client\ojdbc14.jar;C:\JDeveloper\mywork\SourceManagmentTools\Client\quaqua-filechooser-only.jar;C:\JDeveloper\mywork\SourceManagmentTools\Client\quaqua-test.jar;C:\JDeveloper\mywork\SourceManagmentTools\Client\quaqua.jar;C:\JDeveloper\mywork\SourceManagmentTools\Client\swing-layout.jar;C:\JDeveloper\mywork\SourceManagmentTools\Client\image;C:\JDeveloper\mywork\SourceManagmentTools\Client\lipstikLF-1.1.jar -Djavax.net.ssl.trustStore=C:\Oracle\Middleware\wlserver_10.3\server\lib\DemoTrust.jks Main.GUI.SmRun amir

Я использую эту команду:

Java -jar smt.jar amir

когда я запускаю команду IDE, это не проблема, все работает нормально, не могли бы вы мне помочь? (моя программа работает и работает, просто я не могу получить данные из базы данных)

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

C:\JDeveloper\mywork\SourceManagmentTools\Client\deploy>java -jar smt.jar amir
[Ljava.lang.StackTraceElement;@7a148bd3[Ljava.lang.StackTraceElement;@51b48197[L
java.lang.StackTraceElement;@58ecb281[Ljava.lang.StackTraceElement;@25fa1bb6[Lja
va.lang.StackTraceElement;@62da3a1e[Ljava.lang.StackTraceElement;@15f48262[Ljava
.lang.StackTraceElement;@7dc05ffd[Ljava.lang.StackTraceElement;@15e232b5[Ljava.l
ang.StackTraceElement;@36baa466[Ljava.lang.StackTraceElement;@177f409c[Ljava.lan
g.StackTraceElement;@2b8bbc5a[Ljava.lang.StackTraceElement;@62facf0b[Ljava.lang.
StackTraceElement;@5ff3ce5c[Ljava.lang.StackTraceElement;@561777b1Exception in t
hread "AWT-EventQueue-0" java.lang.NullPointerException
        at Main.Database.SmDatabase.selectCustomers(SmDatabase.java:151)
        at Main.GUI.SmCreateProject.this_windowOpened(SmCreateProject.java:109)
        at Main.GUI.SmCreateProject.access$000(SmCreateProject.java:30)
        at Main.GUI.SmCreateProject$1.windowOpened(SmCreateProject.java:58)
        at java.awt.AWTEventMulticaster.windowOpened(Unknown Source)
        at java.awt.Window.processWindowEvent(Unknown Source)
        at javax.swing.JDialog.processWindowEvent(Unknown Source)
        at java.awt.Window.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$000(Unknown Source)
        at java.awt.EventQueue$1.run(Unknown Source)
        at java.awt.EventQueue$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.awt.EventQueue$2.run(Unknown Source)
        at java.awt.EventQueue$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

часть класса mydatabase:

public class SmDatabase {

    Connection conn = null;

    public SmDatabase() {
        try {
            String drivername = "oracle.jdbc.driver.OracleDriver";
            Class.forName(drivername);

            String ServerName = "127.0.0.1";
            String ProtNumber = "1521";
            //String sid = "DEVP0";
            String sid = "cms";

            String url =
                "jdbc:oracle:thin:@" + ServerName + ":" + ProtNumber + ":" +
                sid;

            //String Username = "PENTAVCB";
            //String Password = "pentasoft123";
            String Username = "cmsuser";
            String Password = "pass";

            conn = DriverManager.getConnection(url, Username, Password);
        } catch (ClassNotFoundException e) {
            System.out.print(e.getStackTrace());
        } catch (SQLException se) {
            System.out.print(se.getStackTrace());
        }
    }

public Vector<String[]> selectCustomers(String command) {
    ResultSet resultSet = null;
    Statement statement;
    Vector<String[]> customerName = new Vector<String[]>();
    try {
        statement = conn.createStatement();
LINE151     resultSet = statement.executeQuery(command);

        while (resultSet.next()) {
            String[] temp = new String[2];
            temp[0] = resultSet.getString("V_CUST_NAME");
            temp[1] = resultSet.getString("V_CUST_CODE");
            customerName.add(temp);
        }
        resultSet.close();
        statement.close();
        //    conn.close();
    } catch (SQLException e) {
        System.out.println(e.getStackTrace());
    }
    return customerName;
}

Ответы [ 4 ]

0 голосов
/ 19 апреля 2011

Я решаю свою проблему с помощью этой команды:

java -client -classpath ojdbc14.jar;lipstikLF-1.1.jar;swing-layout.jar;smt.jar Main.GUI.SmRun rimrim

Я предполагаю, что те библиотеки, которые мы использовали в нашем проекте, также должны быть запущены, но я не уверен, я просто предлагаю эту работу

java -client -classpath <name of you library>;<name of you library>;<name of your jar file> nameOfPackage.nameOfRunClass parameter[if any]

Буду очень признателен, если кто-нибудь добавит полезную информацию к этому сообщению

0 голосов
/ 19 апреля 2011

e.printStackTrace(); даст гораздо более полезный результат, чем System.out.println(e.getStackTrace());. Я бы изменил это везде, где это появляется в вашем приложении и попробуйте снова. DriverManager.getConnection(url, Username, Password);, скорее всего, вызывает исключение, которое вы печатаете неправильно, что приводит к появлению мусора "[Ljava.lang.StackTraceElement ...".

0 голосов
/ 19 апреля 2011

Выходные данные указывают на исключение нулевого указателя в строке 151, которое должно указывать, что переменная «Statement» является нулевой. «Conn» не является нулевым, иначе исключение было бы выдано в предыдущей строке. Это странно, если у вас есть действующее соединение, вы должны иметь возможность получить заявление. Возможно ли, что номер строки выключен на 1? Можете ли вы изменить свой код на:


   if conn is null  System.out.println("conn is null!!!");
   else System.out.println("conn is set");

   statement = conn.createStatement();   

   if statement is null  System.out.println("statement is null!!!");
   else System.out.println("statement is set");

   resultSet = statement.executeQuery(command);

   if resultSet is null  System.out.println("resultSet is null!!!");
   else System.out.println("resultSet is set");

Я не вижу, где SmDatabase вызывается для установки conn. Это называется откуда-то еще? Вызывает ли вызов исключение и не печатает ли сообщение об ошибке?

0 голосов
/ 19 апреля 2011

Какое исключение вы получаете? Если это ClassNotFoundException, то вам просто нужно добавить -cp oracleclient.jar в команду.

Клиентская банка Oracle также может быть помещена в конец аргумента -classpath, переданного java.exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...