java - 代码在 Eclipse 中运行,但在 CMD 中给出编译错误 "Cannot resolve symbol"

标签 java eclipse jdbc

这是我的类(class):

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

我该如何解决这个问题?

最佳答案

这些编译错误意味着该方法PrintStream#printf()找不到。根据链接的 javadoc,它是在 Java 1.5 中引入的。

Since:

    1.5

这意味着您在 CMD 中使用 Java 1.4 或更早版本。检查您的 PATHJAVA_HOME 环境变量,它应该指向 Java 1.5 或更高版本。


也就是说,您的 JDBC 代码中至少还存在三个其他主要问题:

  1. 您不应该永远catch block 中使用 finally 调用 System#exit(); >,因为这样 finally 将永远不会被调用。因此,在这里你仍然泄漏了连接和声明。将 System#exit() 放在代码末尾。

  2. 您还忘记在 finallyclose() ResultSet

  3. 连接、语句和结果集的关闭都应该在自己的 try-catch block 中发生,因为关闭可能会引发异常。想象一下,关闭语句会引发异常,那么连接将永远不会关闭。因此,请执行以下操作:

    } 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) {}
    }
    

关于java - 代码在 Eclipse 中运行,但在 CMD 中给出编译错误 "Cannot resolve symbol",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3385976/

相关文章:

java - 两种相似的方法,不同的行为 setSchema 都没有失败,但第二种情况下是 MySQL 异常?

ubuntu-12.04 - 在Ubuntu 12.04 LTS上安装64位开放jdk

java - == 原始数据类型的运算符

java - 在eclipse maven项目中设置jdk版本

android - 无法同时从 layout 和 layout-land 打开 main.xml 文件?

java - 在 Eclipse 中找不到 Maven 选项

java - com.microsoft.sqlserver.jdbc.SQLServerException : The TCP/IP connection to the host localhost, 端口 1433 失败

java - 无法在 Spring Roo 中进行逆向工程 (DBRE)

java - JPA 存储库 findById 被 $$_hibernate_interceptor 拦截

java - 随机化球大小的多球程序