Java-программа, использующая SQL — компиляцию в .jar

#java #sql #jar

#java #sql #jar

Вопрос:

Мой код компилируется и отлично работает в Eclipse, но когда я пытаюсь преобразовать его в .jar, он выдает кучу ошибок.

Код, файл .bat, который я использую для компиляции в .jar, и мое сообщение об ошибке можно найти здесь:

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.Scanner;
import com.mysql.jdbc.PreparedStatement;


public class Main
{
        private static Scanner scn = new Scanner(System.in);

        public static void main(String[] argv) throws Exception
        {
                Class.forName("com.mysql.jdbc.Driver");

                Main main = new Main();
                int choice = 0;

                System.out.println("ttWelcome !nn");

                System.out.print(
                                           "1. Get Data From the table "testtable"n" 
                                           "2. Insert data into the table "testtable"n" 
                                           "Your choice?: "
                                                  );
                choice = scn.nextInt();
                scn.nextLine();

                switch( choice )
                {
                case 1:
                        main.getInfo();
                        break;

                case 2:
                        main.insertInfo();
                        break;

                default:
                        System.out.print("Was neither 1 or 2. Terminating program...");
                }


        }

        private void getInfo() throws Exception
        {
                //Class.forName("com.mysql.jdbc.Driver");

                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "guest", "shahin33");
                PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT * FROM testtable");
                ResultSet result = statement.executeQuery();

                System.out.println();

                System.out.println("USERNAMEtPASSWORD");
                while( result.next() )
                {
                        System.out.println(result.getString(1)   "tt"   result.getString(2));
                }

                result.close();
                con.close();
        }

        private void insertInfo() throws Exception
        {
                System.out.print("nUsername: ");
                String username = scn.nextLine();

                System.out.print("Password: ");
                String password = scn.nextLine().toLowerCase();

                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "guest", "shahin33");
                PreparedStatement statement = (PreparedStatement) con.prepareStatement("INSERT INTO testtable VALUES(?,?)");
                statement.setString(1, username);
                statement.setString(2, password);
                statement.executeUpdate();

                System.out.println("nUser information has been inserted to the database.nRun the program again and chose 1 to see result.");
                statement.close();
                con.close();

        }
}
 

Файл .bat, который я использую для компиляции в .jar:

 @echo off

set /p fileName="Name for the file? Exclude .jar: "

copy *.java "Source Code"
javac *.java

jar -cvfm %fileName%.jar manifest.txt *.class "Source Code"

del *.class /f /q
del "Source Code" /f /q
 

Мое сообщение об ошибке:

 C:UsersshahinDesktopJavaComp>Compile_N_Whatnot.bat
Name for the file? Exclude .jar: comonXXXXXX
Main.java
        1 fil(er) kopierad(e).
Main.java:5: error: package com.mysql.jdbc does not exist
import com.mysql.jdbc.PreparedStatement;
                     ^
Main.java:51: error: cannot find symbol
                PreparedStatement statement = (PreparedStatement) con.prepa
tement("SELECT * FROM testtable");
                ^
  symbol:   class PreparedStatement
  location: class Main
Main.java:51: error: cannot find symbol
                PreparedStatement statement = (PreparedStatement) con.prepa
tement("SELECT * FROM testtable");
                                               ^
  symbol:   class PreparedStatement
  location: class Main
Main.java:75: error: cannot find symbol
                PreparedStatement statement = (PreparedStatement) con.prepa
tement("INSERT INTO testtable VALUES(?,?)");
                ^
  symbol:   class PreparedStatement
  location: class Main
Main.java:75: error: cannot find symbol
                PreparedStatement statement = (PreparedStatement) con.prepa
tement("INSERT INTO testtable VALUES(?,?)");
 

Мой путь к классу:

 C:ProgramJavajdk1.7.bin;
C:UsersshahinDesktopmysql-connector-java-5.1.18commysqljdbc;
C:UsersshahinDesktopmysql-connector-java-5.1.18mysql-connector-java-5.1.18-bin.jar;
 

Ответ №1:

Вам необходимо настроить путь к классу, чтобы включить необходимые файлы jar. По крайней мере, драйвер JDBC отсутствует в пути к классу компиляции.

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

Комментарии:

1. У меня есть драйвер jdbc в моем пути к классу

2. @user1021085 Я сомневаюсь в этом, иначе вы бы не получили эту ошибку. Установите это явно в командном файле. Почему вы копируете исходные файлы?

3. Мой путь к классу включает в себя: C:UsersshahinDesktopmysql-connector-java-5.1.18commysqljdbc У меня это есть. Я копирую исходные файлы, потому что хочу иметь исходный код в jar, чтобы друзья могли проверить исходный код.

4. @user1021085 Вам нужно явно назвать jar или использовать подстановочный знак, если вы используете JDK6 .

5. Спасибо. Теперь это работает. Однако у меня есть еще один вопрос. Нужно ли мне выполнять «Class.forName» в каждом методе, подключающемся к БД?