#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» в каждом методе, подключающемся к БД?