[英]Why isn't this working? Java MySQL
package me.martinwiesner.mysqltest;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class DBConnect {
// Driver
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
// URL
static final String DB_URL = "jdbc:mysql://host:port/name";
static final String USER = "username";
static final String PASS = "password";
public static List<User> getAllUsers() {
List<User> users = new ArrayList<User>();
Connection conn = null;
Statement stmt = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first name, last name, email, password, admin FROM users";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String firstName = rs.getString("first name");
String lastName = rs.getString("last name");
String email = rs.getString("email");
String password = rs.getString("password");
boolean isAdmin = Boolean.getBoolean(rs.getString("admin"));
User u = new User(email, firstName, lastName, password, isAdmin, id);
users.add(u);
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
System.out.println("1");
return null;
} catch (Exception e) {
System.out.println("2");
return null;
} finally {
try {
if (stmt != null)
stmt.close();
} catch (SQLException se2) {
System.out.println("3");
users = null;
}
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
System.out.println("4");
users = null;
}
}
return users;
}
}
我正在嘗試訪問我的數據庫,但是它不起作用,它返回null。 例外:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'first' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2470)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2617)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2546)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2504)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1370)
at me.martinwiesner.mysqltest.DBConnect.getAllUsers(DBConnect.java:34)
at me.martinwiesner.mysqltest.Main.main(Main.java:12)
我更改了用戶名,密碼,主機,端口和名稱。 其他每個人都可以訪問我的數據庫。
為什么這不起作用?
它不起作用,因為某些東西作為異常拋出。 (Du!)
但是由於您丟棄了異常信息並僅返回null
,所以我們無法提供有關為什么拋出異常或在何處拋出異常的更多信息。
忠告:
意外的異常不應“壓制”。 至少要打印或記錄堆棧跟蹤。
捕獲異常並返回null
通常不是一個好主意。 現在,您已經用潛在的新故障替換了原來的故障; 即當您不測試null
時出現NullPointerException
...
捕獲Exception
幾乎總是一個壞主意。 它捕獲了各種各樣的意外事件,其中許多很可能是由編程錯誤引起的。 通常最好使(至少) 未經檢查的異常傳播到可以將其報告為應用程序錯誤並終止應用程序的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.