2013-08-12 2 views
0

MySQL 데이터베이스를 저장소로 사용하여 내 CRM (Customer Relationship Manager) 응용 프로그램을 구축 할 때 테이블이 보이도록 데이터베이스에 Eclipse Java 프로젝트를 연결하려고합니다.Java에서 MySQL 데이터베이스에 연결할 때 액세스가 거부되었습니다.

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
//import java.util.Date; 

public class MySQLclass{ 
private Connection connect = null; 
private Statement statement = null; 
private PreparedStatement preparedStatement = null; 
private ResultSet resultSet = null; 

public void readDataBase() throws Exception { 
try { 
    // This will load the MySQL driver, each DB has its own driver 
    Class.forName("com.mysql.jdbc.Driver"); 
    // Setup the connection with the DB 
    connect = DriverManager 
     .getConnection("jdbc:mysql://localhost/test" 
      + "user=root&password=password"); 

    // Statements allow to issue SQL queries to the database 
    statement = connect.createStatement(); 
    // Result set get the result of the SQL query 
    resultSet = statement 
     .executeQuery("select * from test.customers"); 
    writeResultSet(resultSet); 

    // PreparedStatements can use variables and are more efficient 
    preparedStatement = connect 
     .prepareStatement("insert into test.customers values (default, ?, ?, ?, ? , ?,  ?, ?)"); 
    // "myuser, webpage, datum, summary, customers from test.customers"); 
    // Parameters start with 1 
    preparedStatement.setString(1, "Sjaakie Sjaakssen"); 
    preparedStatement.setString(2, "[email protected]"); 
    preparedStatement.setString(3, "pannekoekenstraat 2"); 
    preparedStatement.setString(4, "Rotterdam"); 
    preparedStatement.setString(5, "3022PK"); 
    preparedStatement.setString(6, "01"); 
    preparedStatement.setString(7, "Yahoo"); 
    preparedStatement.executeUpdate(); 

    preparedStatement = connect 
     .prepareStatement("SELECT NAAM, EMAIL, TELEFOON, BEDRIJFSNAAM, customers from test.customers");  
    resultSet = preparedStatement.executeQuery(); 
    writeResultSet(resultSet); 

    // Remove again the insert comment 
    preparedStatement = connect 
    .prepareStatement("delete from test.customers where NAAM= ? ; "); 
    preparedStatement.setString(1, "Test"); 
    preparedStatement.executeUpdate(); 

    resultSet = statement 
    .executeQuery("select * from test.customers"); 
    writeMetaData(resultSet); 

} catch (Exception e) { 
    throw e; 
} finally { 
    close(); 
} 

} 

private void writeMetaData(ResultSet resultSet) throws SQLException { 
// Now get some metadata from the database 
// Result set get the result of the SQL query 

System.out.println("The columns in the table are: "); 

System.out.println("Table: " + resultSet.getMetaData().getTableName(1)); 
for (int i = 1; i<= resultSet.getMetaData().getColumnCount(); i++){ 
    System.out.println("Column " +i + " "+ resultSet.getMetaData().getColumnName(i)); 
} 
} 

private void writeResultSet(ResultSet resultSet) throws SQLException { 
// ResultSet is initially before the first data set 
while (resultSet.next()) { 
    // It is possible to get the columns via name 
    // also possible to get the columns via the column number 
    // which starts at 1 
    // e.g. resultSet.getSTring(2); 
    String Naam = resultSet.getString("naam"); 
    String Email = resultSet.getString("email"); 
    String Adres = resultSet.getString("adres"); 
    String plaats = resultSet.getString("plaats"); 
    String Postcode = resultSet.getString("postcode"); 
    String Telefoon = resultSet.getString("telefoon"); 
    String Bedrijfsnaam = resultSet.getString("bedrijfsnaam"); 
    System.out.println("Naam: " + Naam); 
    System.out.println("Email: " + Email); 
    System.out.println("Adres: " + Adres); 
    System.out.println("plaats: " + plaats); 
    System.out.println("Postcode: " + Postcode); 
    System.out.println("Telefoon:" + Telefoon); 
    System.out.println("Bedrijfsnaam" + Bedrijfsnaam); 
    } 
    } 

    // You need to close the resultSet 
private void close() { 
    try { 
     if (resultSet != null) { 
     resultSet.close(); 
     } 

     if (statement != null) { 
     statement.close(); 
     } 

     if (connect != null) { 
    connect.close(); 
     } 
    } catch (Exception e) { 

    } 
    } 

} 

이 주요 클래스 : 이 코드를 실행하기 위해 노력하고있어

public class Main { 
    public static void main(String[] args) throws Exception { 
    MySQLclass dao = new MySQLclass(); 
dao.readDataBase(); 
    } 


} 

을 그리고 난이 오류가 계속 :

Exception in thread "main" java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:927) 
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1709) 
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1252) 
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483) 
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516) 
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301) 
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at MySQLclass.readDataBase(MySQLclass.java:22) 
at Main.main(Main.java:5) 

누군가에 도움이 되거 주실 래요 나의 딜레마.

+0

이것은 Java와 관련이 없습니다. 그것은 커맨드 라인과 함께 작동합니까? GRANT ALL PRIVILEGES ON *. * TO 'root'@ 'localhost'GRANT OPTION으로 'root'로 식별 됨; 자세한 내용은 http://stackoverflow.com/questions/11922323/java-sql-sqlexception-access-denied-for-user-rootlocalhost-using-password – Jayan

+0

명령 줄을 사용하여 데이터베이스에 연결했습니다. NickJ의 솔루션이 도움이되었지만 그 다음에 다른 오류가 나타납니다. – user2674895

+1

@ user2674895 : 질문이 하나부터 시작되어 다른 문제가되었습니다. 이것은 미래의 vistor에 대한 유용성을 감소시킨다. 중복으로 투표를 종료합니다. – Jayan

답변

0

시도 : 테이블 이름입니다

SELECT NAAM, EMAIL, TELEFOON, BEDRIJFSNAAM, customers from test.customers 

customers 경우 SELECT 절에 사용할 수 없습니다. select *을 사용하거나 가져올 특정 필드 이름을 모두 사용하십시오.

SELECT NAAM, EMAIL, TELEFOON, BEDRIJFSNAAM from test.customers 
+0

D' oh! "어떻게 내가 그 ... 신인 선수의 실수를 놓칠 수 있었 을까? 고맙습니다! – user2674895

4

단서는 오류가 :

Access denied for user ''@'localhost' 

그것은 사용자 이름, 당신은 질문 매개 변수에서 URL의 경로를 분리하는 것을 잊었다 데이터베이스 URL에서 '(빈 문자열) '라고 생각 표.

이 시도 : 당신은 사용자 이름과 암호를 사용하여 연결을 얻을 수 public static Connection getConnection(String url, String user, String password)을 사용할 수

connect = DriverManager 
    .getConnection("jdbc:mysql://localhost/test?" 
     + "user=root&password=MSQLpass21!"); 
+0

와우,이 작업이 !!! 내 데이터베이스의 필드와 다른 종류의 오류가 표시됩니다. 나는 투표하기 위해 트리 넷을하지만, 15 가지 평판이 필요합니다 : P,하지만 이것은 진보이며 고마워요! 스레드 "주요"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException에서 – user2674895

+0

'예외 : 알 수없는 열 '필드 목록'에서 '고객'sun.reflect.NativeConstructorAccessorImpl.newInstance0 (기본 방법)에서 \t sun.reflect에서 \t .NativeConstructorAccessorImpl.newInstance (알 소스)에 com.mysql.jdbc.Util.handleNewInstance \t sun.reflect.DelegatingConstructorAccessorImpl.newInstance (알 소스)에 java.lang.reflect.Constructor.newInstance \t (알 소스)에 \t (Util.java:411) \t com.mysql.jdbc.Util.getInstance (Util.java:386) \t com.mysql.jdbc.SQLError.cr eateSQLException (SQLError.java : 1054) – user2674895

+0

하지만 사용자 이름과 암호를 다른 인수로 사용하는 것이 더 좋습니다. 내 대답을 참조하십시오. – BVMR

0

.
또는 두 번째 오류는 아마이 라인에 의해 발생 connect = DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=root&password=MSQLpass21!");

관련 문제