这是我的类(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 或更早版本。检查您的 PATH
和 JAVA_HOME
环境变量,它应该指向 Java 1.5 或更高版本。
也就是说,您的 JDBC 代码中至少还存在三个其他主要问题:
您不应该永远在
catch
block 中使用finally
调用System#exit();
>,因为这样finally
将永远不会被调用。因此,在这里你仍然泄漏了连接和声明。将System#exit()
放在代码末尾。您还忘记在
finally
中close()
ResultSet
。连接、语句和结果集的关闭都应该在自己的
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/