2015-11-08 202 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做了一些事情,而且我对理解异常和其他东西不太了解。说'第一',但我写了'名字',它有什么问题? 谢谢 –