-1
게임에 대한 5 개의 높은 점수를 인쇄하려면 데이터베이스에서 숫자를 정렬하려고합니다. 문제는 정렬하려고 할 때 첫 번째 숫자로 정렬하거나 두 자리 숫자가 내 높은 점수로 인쇄되지 않습니다. 엉망진창은 deleteProduct() 메소드에 있습니다. productname
열의 값을 기준으로SQLite에서 두 자리 숫자를 주문할 수 없습니다
DBHandler 클래스
public class MyDBHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 4;
private static final String DATABASE_NAME = "products.db";
public static final String TABLE_PRODUCTS = "products";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_PRODUCTNAME = "productname";
public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_PRODUCTS + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_PRODUCTNAME + " TEXT " +
");";
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS);
onCreate(db);
}
//add a new row to the database
public void addProduct(Products product){
SQLiteDatabase db = this.getReadableDatabase();
if(DatabaseUtils.queryNumEntries(db, TABLE_PRODUCTS) <= 4){
ContentValues values = new ContentValues();
values.put(COLUMN_PRODUCTNAME, product.get_productname());
db.insert(TABLE_PRODUCTS, null, values);
db.close();
}
else{
ContentValues values = new ContentValues();
values.put(COLUMN_PRODUCTNAME, product.get_productname());
db.insert(TABLE_PRODUCTS, null, values);
deleteProduct();
db.close();
}
}
//code coming from MainActivity
public void addButtonClicked(String highscore1){
Products product = new Products(highscore1);
addProduct(product);
updateDatabase();
}
//code coming from MainActivity
public void updateDatabase(){
String dbString = databaseToString();
MainActivity.productText.setText(dbString);
}
//delete a product from the database
public void deleteProduct(){
SQLiteDatabase db = getWritableDatabase();
db.execSQL("DELETE FROM products WHERE _id NOT IN"+
//only reading first digit of double digit numbers
//" (SELECT _id FROM products ORDER BY productname DESC LIMIT 5)");
//this runs but isnt putting double digit scores into the high score textView
" (SELECT _id FROM products ORDER BY length(productname), productname DESC LIMIT 5)");
}
//print out the database as a string
public String databaseToString(){
String dbString = "";
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";
//Cursor point to location in your results
Cursor c = db.query(TABLE_PRODUCTS, null, null, null, null, null, COLUMN_PRODUCTNAME +" DESC");
//Move to the first row in your results
c.moveToFirst();
while(!c.isAfterLast()){
if(c.getString(c.getColumnIndex("productname")) != null){
dbString += c.getString(c.getColumnIndex("productname"));
dbString += "\n";
}
c.moveToNext();
}
db.close();
return dbString;
}
을 당신의 분야 대신 (빈약 한 데이터베이스 설계 기술에) 숫자 유형 인의 텍스트이기 때문에, 1 자리 숫자 "선행 숫자 0"을 명시 적으로 채워야합니다. 그렇지 않으면 ** 문자 정렬 **에서 10은 2보다 낮습니다. 02는 10보다 작습니다. –