Код запускается в Eclipse, но выдает ошибки компиляции «Не удается разрешить символ» в CMD - PullRequest
2 голосов
/ 02 августа 2010

Вот мой класс:

import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class DisplayAuthors {
static final String JDBC_DRIVER = "com.mysql.jdbc.driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/myfirstdb";
public static void main(String[] args) {
    Connection connection = null;
    Statement statement = null;
    try {
        Class.forName(JDBC_DRIVER);
        connection = DriverManager.getConnection(DATABASE_URL, "root", "1234");
        statement = connection.createStatement();
        ResultSet resultset = statement.executeQuery("SELECT S_ID, S_NAME, AGE, CLASS FROM MYOWN"); 
        ResultSetMetaData metaData = resultset.getMetaData();
        int numberOfColumns = metaData.getColumnCount();
        System.out.println("Table Content");
        for(int i = 1; i<+numberOfColumns; i++)
            System.out.printf("%-8s\t", metaData.getColumnName(i));
        System.out.println();
        ResultSet resultSet;
        while (resultSet.next())
        {
            for (int i = 1; i<+numberOfColumns; i++)
                System.out.printf("%-8s\t", resultSet.getObject(i));
                System.out.println();
        }

    }
    catch ( SQLException sqlException)
    {
        sqlException.printStackTrace();
        System.exit(1);
    }
    catch ( ClassNotFoundException classNotFound)
    {
        classNotFound.printStackTrace();
        System.exit(1);
    }
    finally
    {
        try
        {
            statement.close();
            connection.close();
        }
        catch ( Exception exception )
        {
            exception.printStackTrace();
            System.exit(1);
        }
    }
}
}

Это отлично работает в Eclipse и выдает следующее:

testing oracle-character-set-1 against <abc>
PASSED LOSSY
testing oracle-character-set-1 against <ab?c>
PASSED LOSSY
testing oracle-character-set-1 against <XY

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

 C:\My Java>javac DisplayAuthors.java
 DisplayAuthors.java:43: cannot resolve symbol
 symbol  : method printf (java.lang.String,java.lang.String)
 location: class java.io.PrintStream
 System.out.printf( "%-8s\t", metaData.getColumnName( i ) );
            ^
 DisplayAuthors.java:49: cannot resolve symbol
 symbol  : method printf (java.lang.String,java.lang.Object)
 location: class java.io.PrintStream
 System.out.printf( "%-8s\t", resultSet.getObject( i ) );
            ^
 2 errors

Как это исправить?

Ответы [ 4 ]

4 голосов
/ 02 августа 2010

Эти ошибки компиляции означают, что метод PrintStream#printf() не может быть найден. Согласно связанному javadoc это было введено в Java 1.5.

С:

    1.5

Это означает, что вы используете Java 1.4 или старше в CMD. Проверьте переменные окружения PATH и JAVA_HOME, они должны указывать на Java 1.5 или новее.


Тем не менее, в вашем коде JDBC есть как минимум три другие серьезные проблемы:

  1. Вы должны никогда вызывать System#exit(); в catch блоке с finally, потому что таким образом finally никогда не будет вызван. Здесь вы, таким образом, все еще утечка связи и заявления Вместо этого поставьте System#exit() в конце кода.

  2. Вы также забыли close() ResultSet в finally.

  3. Закрытие соединения, оператора и набора результатов должно происходить в в собственном блоке try-catch, поскольку закрытие может вызвать исключение. Представьте, что закрытие оператора вызывает исключение, тогда соединение никогда не будет закрыто. Итак, сделайте это вместо:

    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }
    
0 голосов
/ 22 сентября 2013

Ваш путь к коду не создан, попробуйте создать новый проект и добавить внешние библиотеки. Скопируйте и вставьте исходный код в новый класс.

ПОПРОБУЙТЕ! ЭТО РАБОТАЕТ ДЛЯ МЕНЯ

0 голосов
/ 02 августа 2010

Обновлен ваш код с парой изменений. Это должно по крайней мере компилировать сейчас:).

import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class DisplayAuthors {
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DATABASE_URL = "jdbc:mysql://localhost/myfirstdb";

    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        try {
            Class.forName(JDBC_DRIVER);
            connection = DriverManager.getConnection(DATABASE_URL, "root",
                    "1234");
            statement = connection.createStatement();
            ResultSet resultset = statement
                    .executeQuery("SELECT S_ID, S_NAME, AGE, CLASS FROM MYOWN");
            ResultSetMetaData metaData = resultset.getMetaData();
            int numberOfColumns = metaData.getColumnCount();
            System.out.println("Table Content");
            for (int i = 1; i < +numberOfColumns; i++)
                System.out.printf("%-8s\t", metaData.getColumnName(i));
            System.out.println();
            // ResultSet resultSet;
            while (resultset.next()) {
                for (int i = 1; i < +numberOfColumns; i++)
                    System.out.printf("%-8s\t", resultset.getObject(i));
                System.out.println();
            }

        } catch (SQLException sqlException) {
            sqlException.printStackTrace();
            System.exit(1);
        } catch (ClassNotFoundException classNotFound) {
            classNotFound.printStackTrace();
            System.exit(1);
        } finally {
            try {
                statement.close();
                connection.close();
            } catch (Exception exception) {
                exception.printStackTrace();
                System.exit(1);
            }
        }
    }
}
0 голосов
/ 02 августа 2010

У вас есть 2 переменные: resultset и resultSet. Второй не используется и должен быть удален. И в вашем блоке while замените resultSet на resultset.

Также замените строку

static final String JDBC_DRIVER = "com.mysql.jdbc.driver";

с

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...