2014-10-18 129 views
0

我正在做一個小應用程序,因此我需要使用一個小的SQLite數據庫。無效int「」SQLiteDatabase

請幫助我,我不知道如何解決這個錯誤:

在行 「SQLiteDatabase DB = this.getReadableDatabase();」在數據庫 ,(主:INT隊= db.countAllTeams())

錯誤:W/System.err的:無效INT: 「」

數據庫:

public class DatabaseHelper extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "database"; 
    private static final String TABLE_TEAM = "team"; 

    private static final String KEY_TEAM_FULLNAME = "full_name"; 
    private static final String KEY_TEAM_SHORTNAME = "short_name"; 
    private static final String KEY_TEAM_STADIUM = "stadium"; 
    private static final String KEY_TEAM_LOGO = "logo"; 

    private static final String CREATE_TABLE_TEAM = "CREATE TABLE " 
     + TABLE_TEAM + "(" + KEY_TEAM_FULLNAME + " TEXT PRIMARY KEY," + 
          KEY_TEAM_SHORTNAME + " TEXT," + 
          KEY_TEAM_STADIUM + " TEXT," + 
          KEY_TEAM_LOGO + " INTEGER" + ")"; 


public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_TABLE_TEAM); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int old, int neW) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_TEAM); 
    onCreate(db); 
} 

public void closeDB() { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    if (db != null && db.isOpen()) db.close(); 
} 

public long createTeam(Team team) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_TEAM_FULLNAME, team.getFullName()); 
    values.put(KEY_TEAM_SHORTNAME, team.getShortName()); 
    values.put(KEY_TEAM_LOGO, team.getLogo()); 
    values.put(KEY_TEAM_STADIUM, team.getStadium()); 

    return db.insert(TABLE_TEAM, null, values); 
} 

public int countAllTeams(){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    List<Team> teams = new ArrayList<Team>(); 

    return Integer.getInteger(db.compileStatement("SELECT COUNT(*) FROM " + TABLE_TEAM).simpleQueryForString()); 
} 

}

主要

DatabaseHelper db; 
TextView tvText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_home); 

    tvText = (TextView)findViewById(R.id.tvText); 
    String text = ""; 

    db = new DatabaseHelper(getApplicationContext()); 
    int teams = db.countAllTeams(); 

    tvText.setText(teams); 
} 
} 
+0

'Integer.getInteger(..)'?你確定你想要這個方法,而不是'Integer.valueOf(..)'或'Integer.parseInt(..)'而不是? '.getInteger()'讀取系統屬性(根據java doc)。 – Tom 2014-10-18 21:23:16

回答

1

Integer.getInteger一個字符串不轉換爲整數。 從查詢得到一個數字,最簡單的方法是使用DatabaseUtils

long count = DatabaseUtils.longForQuery(db, 
       "SELECT COUNT(*) FROM " + TABLE_TEAM, null); 

但要獲得表中的行數,還有一個更簡單的功能:

long count = DatabaseUtils.queryNumEntries(db, TABLE_TEAM); 

此外,當您給整數TextView.setText時,它需要一個資源ID。 您必須手動將您的計數轉換爲字符串:

tvText.setText(Integer.toString(teams)); 
0

我會使用rawQuery()代替simpleQueryForString()

public int countAllTeams(){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    List<Team> teams = new ArrayList<Team>(); 

    Cursor c = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_TEAM, new String[]{}); 
    c.moveToFirst(); 

    return c.getInt(0); 
} 
相關問題