[英]Invalid int “” at SQLiteDatabase
I am making a small app and therefore i need to use a small SQLite-database. 我正在制作一个小型应用程序,因此我需要使用小型SQLite数据库。
Please help me, i dont know how to fix this error: 请帮助我,我不知道如何解决此错误:
At the line "SQLiteDatabase db = this.getReadableDatabase();" 在“ SQLiteDatabase db = this.getReadableDatabase();”行中 in the database , (Main: int teams = db.countAllTeams())
在数据库中,(主要:int团队= db.countAllTeams())
Error: W/System.err﹕ Invalid int: "" 错误:W / System.err:无效的整数:“”
Database: 数据库:
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());
}
} }
Main 主要
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);
}
}
Integer.getInteger
does not convert a string to an integer. Integer.getInteger
不会将字符串转换为整数。 The easiest way to get a single number from a query is to use DatabaseUtils : 从查询中获取单个数字的最简单方法是使用DatabaseUtils :
long count = DatabaseUtils.longForQuery(db,
"SELECT COUNT(*) FROM " + TABLE_TEAM, null);
But to get the number of rows in the table, there's an even simpler function: 但是要获得表中的行数,有一个甚至更简单的函数:
long count = DatabaseUtils.queryNumEntries(db, TABLE_TEAM);
Furthermore, when you give an integer to TextView.setText
, it expects a resource ID. 此外,当您为
TextView.setText
提供一个整数时,它需要一个资源ID。 You have to convert your count into a string manually: 您必须手动将计数转换为字符串:
tvText.setText(Integer.toString(teams));
.setText doesn't take in integers directly, instead try: .setText不直接接受整数,而是尝试:
tvText.setText(String.valueOf(teams));
I'd use rawQuery()
instead of simpleQueryForString()
: 我会使用
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.