2012-12-21 2 views
1

PatPeterSQLite Bukkit plugin "SQLibrary"를 사용하는 SQL 기반 Bukkit 플러그인에 꽤 큰 버그가 있습니다. 플레이어가 이미 the first solution from another SO thread을 사용하여 데이터베이스에 입력되었는지 확인하려고합니다. 더 많은 정보는 this forum thread에서 찾을 수 있습니다. 그러나 여기서도 간단한 개요를 제공 할 것입니다.SQLite - Bukkit 플러그인의 이상한 NPE

이 스택 추적입니다 :

StackTrace

그리고 여기에 표시된 용의자 방법은 스택 추적에 표시된 라인이다 :

SQLite sqlite; // Set in plugin.onEnable(), which executes before anything 
String QUERY_PLAYEREXISTS = "SELECT playername FROM table WHERE playername = ?"; 
... 
public boolean exists(String name) throws SQLException { 
    Connection connection = null; 
    PreparedStatement statement = null; 
    ResultSet resultSet = null; 
    boolean exists = false; 

    try { 
     connection = sqlite.getConnection(); 
     statement = connection.prepareStatement(QUERY_PLAYEREXISTS); // 109 
     statement.setString(1, name.toLowerCase()); 
     resultSet = statement.executeQuery(); 
     exists = resultSet.next(); 
    } finally { 
     connection.close(); 
     statement.close(); 
     resultSet.close(); 
    } 

    return exists; 
} 

여기 무슨 일이야?

답변

1

저는 개인적으로 SQLite를 사용한 적이 없지만 이 null을 반환해야하므로 onEnable()이라는 SQLite 설정을 잘못 구성했다고 말할 수 있습니다. 행 109 이전에 다음 코드를 추가하십시오.

if(connection == null) { 
    throw new RuntimeException("SQLite connection is null!"); 
} 

다음에 실행할 때 RuntimeException이 발생하면 SQLite 설정을 조사해야합니다.

+0

사실 실제로, 나는 결국 그것을 알아 냈어. 그리고 그 문제가 정확히 무엇인지 기억할 수는 없지만 본질적으로 테이블 생성이나 데이터 입력과 같은 다른 동작을 위해 예약 된 개폐 형식을 사용하려고 시도했다. 반드시 테이블에서 검색하는 것은 아닙니다. 기본적으로 나는 처음부터 열어 보지 않은 물체를 닫으려고 했었습니다. 처음이자 유일한 대답이기 때문에 받아 들여졌습니다. :) 또한 onEnable()은 JavaPlugin 클래스에 속하는 메소드로 Bukkit에만 해당됩니다. 그러나 나는 당신이 의미하는 것을 볼 수 있습니다! :) – ChaoticWeg

+0

당신이 그것을 알아 낸 것을 기쁘게 생각합니다 :-) 그리고 나는 onEnable이 무엇인지 알기 때문에 Bukkit 플러그인도 만듭니다 : 3 – Xyene

+0

Ahh, my bad. :) – ChaoticWeg