Type mismatch: cannot convert from java.sql.Statement to java.beans.Statement
The method executeQuery(String) is undefined for the type Statement
編譯器認為變量 st 是 java.beans.Statement,而該類沒有 executeQuery 方法。
代碼中同時導入了 java.sql.* 和 java.beans.*,且聲明 Statement st; 時未使用全限定名,編譯器按字母順序匹配到 java.beans.Statement(Java Bean 規範中的事件監聽接口,與數據庫無關)。
// 刪除這行
// import java.beans.*;
// 保留數據庫相關導入
import java.sql.*;
java.sql.Statement st = null;
java.sql.ResultSet rs = null;
// ...
st = ct.createStatement(); // 現在類型明確為 java.sql.Statement
rs = st.executeQuery("SELECT ...");
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
// 不導入 java.beans.*
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 8.0+ 驅動類名
Connection ct = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/studentmanager?useSSL=false&serverTimezone=UTC",
"root", "123456");
Statement st = ct.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM info WHERE quanxian='老師'");
while (rs.next()) {
String user = rs.getString("username"); // 建議用列名而非索引
String pwd = rs.getString("password");
// 比對邏輯...
}
} catch (Exception e) {
e.printStackTrace();
}
import pkg.*;),顯式導入每個使用的類。try-with-resources(Java 7+)自動關閉資源。PreparedStatement 而非拼接字符串。