2015-03-27 3 views
0

Я делаю приложение из некоторого учебника онлайн, в котором я создаю базу данных для хранения горячих девушек. На данный момент он должен иметь возможность хранить данные и просматривать их. Все работает нормально, за исключением того, что идентификаторы строк, принадлежащие каждой записи, являются NULL, когда я их показываю. Я попытался исправить это уже два дня, но до сих пор мне не повезло. Я вроде новобранец все еще, может кто-то с большим опытом, скажите мне, как это исправить?SQLite database rowid fail

Основное направление деятельности выглядит следующим образом: класс

public class SQLiteExample extends Activity implements OnClickListener { 

Button sqlUpdate, sqlView, sqlModify, sqlGetInfo, sqlDelete; 
EditText sqlName, sqlHotness, sqlRow; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sqliteexample); 
    initiate(); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    switch (v.getId()){ 
    case R.id.bSQLUpdate: 

     boolean didItWork = true; 
     try{ 
     String name = sqlName.getText().toString(); 
     String hotness = sqlHotness.getText().toString(); 

     HotOrNot entry = new HotOrNot(SQLiteExample.this); 
     entry.open(); 
     entry.createEntry(name, hotness); 
     entry.close(); 
     }catch(Exception e){ 
      didItWork = false; 
     }finally{ 
      if (didItWork){ 
       print("YESSSS", "it's working!"); 
      } 
      else{ 
       print("NOOOOO", "Something went wrong"); 
      } 
     } 

     break; 
    case R.id.bSQLOpenView: 
     Intent openView = new Intent(SQLiteExample.this, SQLView.class); 
     startActivity(openView); 
     return; 

    case R.id.bgetInfo: 
     String s = sqlRow.getText().toString(); 
     long l = Long.parseLong(s); 
     HotOrNot hon = new HotOrNot(this); 
     hon.open(); 
     String returnedName = hon.getName(l); 
     String returnedHotness = hon.getHotness(l); 
     hon.close(); 

     sqlName.setText(returnedName); 
     sqlHotness.setText(returnedHotness); 

     break; 
    } 
} 

private void initiate() { 
    sqlUpdate = (Button) findViewById(R.id.bSQLUpdate); 
    sqlView = (Button) findViewById(R.id.bSQLOpenView); 
    sqlModify = (Button) findViewById(R.id.bSQLmodify); 
    sqlGetInfo = (Button) findViewById(R.id.bgetInfo); 
    sqlDelete = (Button) findViewById(R.id.bSQLdelete); 
    sqlName = (EditText) findViewById(R.id.etSQLName); 
    sqlHotness = (EditText) findViewById(R.id.etSQLHotness); 
    sqlRow = (EditText) findViewById(R.id.etSQLrowInfo); 


    sqlView.setOnClickListener(this); 
    sqlUpdate.setOnClickListener(this); 
    sqlModify.setOnClickListener(this); 
    sqlGetInfo.setOnClickListener(this); 
    sqlDelete.setOnClickListener(this); 
} 

public void print(String title, String message){ 
    Dialog d = new Dialog(this); 
    d.setTitle(title); 
    TextView tv = new TextView(this); 
    tv.setText(message); 
    d.setContentView(tv); 
    d.show(); 
}; 
} 

База данных:

public class HotOrNot { 

public static final String KEY_ROWID = "_id"; 
public static final String KEY_NAME = "persons_name"; 
public static final String KEY_HOTNESS = "persons_hotness"; 

private static final String DATABASE_NAME = "HotOrNotdb"; 
private static final String DATABASE_TABLE = "peopleTable"; 
private static final int DATABASE_VERSION = 1; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 

private static class DbHelper extends SQLiteOpenHelper{ 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
       KEY_ROWID + " INTEGER PRIMARY_KEY AUTOINCREMENT, " + 
       KEY_NAME + " TEXT NOT NULL, " + 
       KEY_HOTNESS + " TEXT NOT NULL);"      
     ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 
    } 
} 

public HotOrNot(Context c){ 
    ourContext = c; 
} 

public HotOrNot open() throws SQLException{ 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close(){ 
    ourHelper.close(); 
} 

public long createEntry(String name, String hotness) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, name); 
    cv.put(KEY_HOTNESS, hotness); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

public String getData() { 
    // TODO Auto-generated method stub 
    String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_HOTNESS}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
    String result = ""; 

    int iRow = c.getColumnIndex(KEY_ROWID); 
    int iName = c.getColumnIndex(KEY_NAME); 
    int iHotness = c.getColumnIndex(KEY_HOTNESS); 

    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
     result = result + c.getString(iRow) + " " + c.getString(iName) + " " + c.getString(iHotness) + "\n"; 
    } 

    return result; 
} 
} 

Вид деятельности:

public class SQLView extends Activity implements OnClickListener{ 

TextView tv; 
Button back; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sqlview); 
    initiate(); 

    HotOrNot info = new HotOrNot(this); 
    info.open(); 
    String data = info.getData(); 
    info.close(); 
    tv.setText(data); 
} 

private void initiate(){ 
    tv = (TextView) findViewById(R.id.tvSQLInfo); 
    back = (Button) findViewById(R.id.bBack); 
    back.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent back = new Intent(SQLView.this, SQLiteExample.class); 
    startActivity(back); 
    return; 
}; 
} 

Заранее спасибо!

+0

Omg спасибо soo много !!! – xv92

ответ

1

Ошибка синтаксиса SQL. Изменение

KEY_ROWID + " INTEGER PRIMARY_KEY AUTOINCREMENT, " 

в

KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 

т.е. сделать подчеркивание пространство.

Удалите приложение, чтобы снова вызвать onCreate(). Поскольку вы не видели ошибки в синтаксисе, эта версия SQL не была запущена.

+0

Спасибо, что так много! Это сработало :) – xv92