0

My code compiles and runs fine in Eclipse, but when I try to make it into a .jar it gives me a bunch of errors.

The code, the .bat file I use to compile into .jar and my error message can be found here:

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("\t\tWelcome !\n\n");

                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("USERNAME\tPASSWORD");
                while( result.next() )
                {
                        System.out.println(result.getString(1) + "\t\t" + 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();

        }
}

The .bat file I use to compile into a .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

My error message:

C:\Users\shahin\Desktop\JavaComp>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(?,?)");

My classpath:

C:\Program\Java\jdk1.7.\bin\;
C:\Users\shahin\Desktop\mysql-connector-java-5.1.18\com\mysql\jdbc\;
C:\Users\shahin\Desktop\mysql-connector-java-5.1.18\mysql-connector-java-5.1.18-bin.jar;

1 Answer 1

2

You need to set up the classpath to include the required jar files. At the least, the JDBC driver is not on the compilation classpath.

I'd strongly recommend not using batch files for this in all but the most simple situations, at the least aim for an Ant build script. It knows a lot about how Java stuff is supposed to work, and makes these kinds of problems easier to solve.

Sign up to request clarification or add additional context in comments.

15 Comments

I have the jdbc driver in my classpath
@user1021085 I doubt it, or you wouldn't get that error. Set it explicitly in the batch file. Why do you copy the source files?
My classpath includes: C:\Users\shahin\Desktop\mysql-connector-java-5.1.18\com\mysql\jdbc\ I have it there. I copy the source files because I want to have the source code in the jar, so friends will be able to check the source code.
@user1021085 You need to explicitly name the jar, or use a wildcard if you're using JDK6 +.
Thank you. It works now. I have another question, though. Do I need to do the "Class.forName" in every method connecting to a DB?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.