2015-11-08 201 views
0
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。 例外:爲什麼這不起作用? Java MySQL

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) 

我改變了我的用戶名,密碼,主機,端口和名稱。否則每個人都可以訪問我的數據庫。

+1

你應該調用e.printStackTrace() –

+0

*「它返回null」*什麼返回null? – Pang

+0

不要將「粘貼」鏈接置於問題中。它們很快消失。而是將異常堆棧跟蹤複製到問題中......作爲TEXT。 –

回答

0

爲什麼不能正常工作?

它不工作,因爲某些東西是拋出異常。 (咄!)

但因爲你扔掉異常信息並簡單地返回null,我們不能給你以爲什麼一個異常被拋出,或在其它任何信息。

建議:

  1. 意外的異常不應該被 「擠壓」。至少,打印或記錄堆棧跟蹤。

  2. 捕捉異常並返回null通常是一個壞主意。現在你已經用一個潛在的新失敗取代了原來的失敗;即一個NullPointerException當你不測試的null ...

  3. 追趕Exception幾乎總是一個壞主意。它捕捉到各種意想不到的事物,其中許多都可能由編程錯誤引起。通常最好讓(至少)未經檢查異常傳播到可以將它們報告爲應用程序錯誤並終止應用程序的事件。

+0

這是例外情況:http://pastebin.com/ReJyXJuU –

+0

啊是的。您是否閱讀過**異常信息?它解釋了問題所在。您的SQL與您的表的定義不匹配。 (它看起來像你的SQL中的字段名稱中有一個虛假空格) –

+0

我確實讀過它,很抱歉,但這是我第一次使用MySQL做了一些事情,而且我對理解異常和其他東西不太瞭解。說'第一',但我寫了'名字',它有什麼問題? 謝謝 –