2015-02-02 5 views
0

Google 클라우드 SQL 데이터베이스에 백엔드 엔드 포인트 코드를 연결하려고합니다. 필자는 MySQL 워크 벤치를 사용하여 데이터베이스와 테이블을 성공적으로 만들고 만들었습니다. 사용자 테이블에 새 사용자를 삽입하려고하면 쿼리를 실행할 때 java.lang.NullPointerException이 발생합니다. 아래의 코드를 참조하십시오 :Google App Engine 끝점을 사용하여 Cloud SQL에 연결

@ApiMethod(name="registerUser") 
public User addUser(@Named("name") String name, @Named("email") String email, @Named("rotation") double rotation, 
     @Named("p1email") String p1email, @Named("p2email") String p2email, @Named("password") String password) throws NotFoundException { 
    //Check if already exists 
    Connection conn = dbConnection.getConnection(); 
    User u = null; 
    try { 
     String query = "SELECT * FROM users WHERE email = '"+email+"'"; 
     java.sql.ResultSet rs = conn.createStatement().executeQuery(query); 
     if(rs != null){ 
      throw new NotFoundException("User email is already used"); 
     }else{ 
      java.sql.PreparedStatement statement = conn.prepareStatement("INSERT INTO users (name,email,p1email,p2email,password,rotation) VALUES (?, ?, ?, ?, ?, ?)"); 
      statement.setString(1, name); 
      statement.setString(2, email); 
      statement.setString(3, p1email); 
      statement.setString(4, p2email); 
      statement.setString(5, password); 
      statement.setDouble(6, rotation); 
      statement.execute(); 
     } 
     String query2 = "SELECT * FROM users WHERE email = '"+email+"'"; 
     java.sql.ResultSet rs2 = conn.createStatement().executeQuery(query2); 


     if(rs2 != null){ 
      while(rs2.next()){ 
       u = new User(rs2.getInt("id"), name, email, p1email, p2email, password, rotation); 
      } 
     } 
    }catch (SQLException e){ 
     throw new NotFoundException(e); 
    } 
    return u; 
} 

코드 데이터베이스에 연결하는 것은 :

java.sql.ResultSet rs = conn.createStatement().executeQuery(query); 
:
public java.sql.Connection getConnection(){ 
    try{ 
     Connection conn = DriverManager.getConnection(
      "jdbc:google:mysql://your-project-id:your-instance-name/database", 
      "user", "password"); 
     }catch(Exception e){ 
      conn = null; 
     } 
    return conn; 
} 

내가 첫 번째 코드에서이 문장에서 java.lang.NullPointerException이를 얻을 수
+0

GAE 또는 devserver를 사용하여 로컬 컴퓨터에서 실행될 때 이런 현상이 발생합니까? – koma

+0

로컬 및 GAE 모두에서 발생합니다. – Hoffern

답변

0

이 줄에 올 때까지 'conn'이 null이라는 것이 가장 확실합니다. 이것이 DriverManager.getConnection에 의해 예외가 던져지고 getConnection()에 의해 'null'이 명시 적으로 반환 된 이유입니다.

이제 DriverManager.getConnection이 예외를 던진 이유는 무엇입니까? 모든 예외 사항을 삼키고 아무것도 기록하지 않으므로 시도하고 추측 할 수만 있습니다. 일반적으로 :

  1. 모든 예외를 삼키는 것이 좋지 않습니다. 처리 할 예외 인 만 잡아야합니다.
  2. 예외를 catch하는 경우 일반적으로 기록해야합니다. 이 경우 당신은 DriverManager.getConnection이 예외 을 던진 이유를 알아야합니다.

그래서 다음 단계는 확인하기 위해 코드를 리팩토링하는 것이 더 디버깅하기 쉬운, 거기에서 로그 및 작업에서 예외 정보를 얻을. 이유가 분명하지 않다면 새로운 정보로 질문을 업데이트하십시오.

관련 문제