2014-12-11 1 views
-1

내가 내 프로그램에 대한 데이터베이스를 만들려고 노력 그리고 난 바보 많은 문제에 봉착 충돌하지 않습니다 데이터베이스 클래스 :SQLite는 자바 안드로이드 그런 표, 프로그램은 주요 활동의 조각입니다 ...

String nickname="EmptyNick"; 
public Database(Context context, String name) { 
    super(context, "database.db", null, 1); 
    nickname = name; 
} 

public void onCreate(SQLiteDatabase db) { 
    if(!nickname.equals("EmptyNick")) { 
     db.execSQL("create table player(id integer primary key autoincrement,nick text);"); 
     Users user = new Users(); 
     user.setNick("Mariusz"); 
     addPlayer(user); 
    } 
    else { 
     //not important 
    } 
} 

private void addPlayer(Users user) { 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put("nick",user.getNick()); 
    db.insertOrThrow("player",null,values); 
} 

public String printRow() { 
    String string=null; 
    if(!nickname.equals("EmptyNick")) { 
      String[] collumns = {"id","nick"}; 
      SQLiteDatabase db = getReadableDatabase(); 
      Cursor cursor = db.query("player",collumns,null,null,null,null,null); 
      cursor.moveToFirst(); 
      while (cursor.moveToNext()) { 
       string += cursor.getString(1); 
      } 
    } 
    else { 
     //not important 
    } 
    return string; 
} 

오류 : 그런 테이블 :에 의한 선수 : android.database.sqlite.SQLiteException : java.lang.reflect.InvocationTargetException 에 의한 그러한 테이블 : 플레이어 (코드 1) : , 동안 컴파일 중 : SELECT id, nick FROM player

정말 틀린 것을 볼 수 없습니다. 오류는 테이블 '플레이어'가 없다고 말하지만, 그렇습니다. 처음에 선에서 메탄을 생성합니다 :

db.execSQL("create table player(id integer primary key autoincrement,nick text);"); 

누가 나를 도와 줄 수 있습니까? 토스트를 text.setText (...) 대신 만들면 빈 필드가 표시되므로 예, 특정 행을 만들 수 없습니다. 나는 그 오류를 이해하지만 그것이 오는 곳과 이유가 무엇이든간에하지 않는다.

+0

'onCreate'는 슈퍼 생성자에 의해 호출됩니다. 'name'은이 시점에서 업데이트되지 않으므로 어떤 이유에서든 create query를 호출하지 않습니다. – njzk2

+0

Der Golem nickName은 다음과 같은 이유로 "EmptyNick"이 아닙니다. Database db = new Database (this, editText.getText(). toString()); 나는 또한 editText에서 문자열을 생성자로 지정합니다. 그러나 그것이 사실이라면, onCreate는 super()에 의해 호출됩니다 (njzk2가 말했듯이) 이것이 대답 일 수 있습니다. 나는 그것을 잠깐 후에 점검 할 것이다. – Charliee

+0

글쎄, 조건에 대한 모든 줄을 지우더라도 같은 오류가 여전히 존재한다 ... 나는 정말로 이것을 얻을 수 없다. 이론적으로 모든 것이 작동하지만 실제 테이블에서는 작동하지 않습니다./ – Charliee

답변

0

사용하려는 테이블이 존재하지 않습니다. 이러한 경우 일반적으로 사용중인 데이터베이스를 확인하고 테이블이 존재하는지 확인하는 것이 좋습니다. 이 특별한 경우에는 조건이 충족 될 경우 테이블을 만드는 것으로 보입니다. 조건은 귀하의 nickname 값이 기본값과 다른 것입니다. 그러나 그것은 다르지 않습니다. 표가 존재하고 표를 작성하기위한 올바른 조건이있는 경우에만 표를 사용하는지 확인하십시오.

+0

자, 고마워. 조건이 충족 되더라도 문제가 발생합니다. 내가 보지 못하는 코드에는 실수가 있습니다. – Charliee

+0

실제 데이터베이스를 살펴보고 테이블이 있는지 확인 했습니까? –

0

나는 정말로 당신의 문제를 이해하지 못합니다. 오류가 발생하면 ANR 메시지가 표시됩니다. 토스트를 어떻게 인쇄 할 수 있으며 빈 메시지가 표시됩니까? Toast는 테이블에 하나의 레코드 만 추가하고 printRow()에서는 cursor.moveToFirst를 호출 한 다음 while (cursor.moveToNext())를 호출하면 커서가 두 번째 행으로 이동하고 당신은 오직 하나의 레코드 만 가지고 있기 때문에 false를 리턴 할 것입니다.

관련 문제