2017-04-26 53 views
-1

我是一个在数据库中的新手。目前我已经创建了一个应用程序,我想将它链接到SQLite数据库。在遵循YouTube上的教程之后,我通过尝试添加简单的行来测试我的数据库。我得到一个错误E/SQLiteLog: (1) no such table: SCORESE/SQLiteDatabase: Error inserting DScore=0 LScore=0 Name=Aris 这是我的代码,截至目前:尝试在android中插入一行sqlite数据库NoSuchTable存在

 public class DB_Controller { 
    private DB_Scores helper; 

    public DB_Controller(Context context) { 
     helper = new DB_Scores(context); 
    } 

    public long insertRow(String name){ 
     SQLiteDatabase db=helper.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(DB_Scores.NAME, name); 
     values.put(DB_Scores.DSCORE, 0); 
     values.put(DB_Scores.LSCORE, 0); 
     long id = db.insert(DB_Scores.TABLE_NAME,null, values); 
     return id; 
    } 


    static class DB_Scores extends SQLiteOpenHelper { 
     private static final String DATABASE_NAME = "scores.db"; 
     private static final String TABLE_NAME = "SCORES"; 
     private static final int DATABASE_VERSION = 1; 
     private static final String UID = "_id"; 
     private static final String NAME = "Name"; 
     private static final String LSCORE = "LScore"; 
     private static final String DSCORE = "DScore"; 
     private static final String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY " + 
       "AUTOINCREMENT, "+NAME+" TEXT UNIQUE, " 
       +LSCORE+" INTEGER, "+DSCORE+" INTEGER);"; 
     private Context context;//? 

     public DB_Scores(Context context) { 

      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      this.context = context; 
      Toast.makeText(context, "Constructor was called", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      try { 
       db.execSQL(CREATE_TABLE); 
       Toast.makeText(context, "onCreate was called", Toast.LENGTH_LONG).show(); 
      } catch (SQLException e) { 
       Toast.makeText(context, ""+e, Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      try{ 
       db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
       Toast.makeText(context, "onUpgrade called", Toast.LENGTH_LONG).show(); 
       onCreate(db); 
      }catch(SQLException e){ 
       Toast.makeText(context, ""+e, Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

以及活动,我创建DB_Controller的对象
public class Scores_Activity extends AppCompatActivity {

private DB_Controller dbController; 


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

    dbController = new DB_Controller(this); 
    addRow(); 

} 

public void addRow() { 
    long id=dbController.insertRow("Aris"); 
    if (id < 0) { 
     Toast.makeText(this, "Unsuccessful", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show(); 
    } 
} 

它标记为错误的行来源是long id=dbController.insertRow("Aris");,
long id = db.insert(DB_Scores.TABLE_NAME,null, values);addRow(); 我的猜测是,我犯了一个逻辑错误whil Ë创建database.Thanks您的时间

+1

第一个应用程序执行后,你可能改变你的表名。 –

+0

使用ormlite代替sqlite –

+0

当我测试时,我玩了数据库名称,但我认为我从来没有改变表名。你建议的是,我第一次创建这个数据库我有一个不同的表,现在我试图从头开始执行onCreate方法不执行?有什么方法可以检查是否是这种情况? @Rotwang –

回答

-2

更改create table命令如下(在查询的末尾分号不是必需的)

private static final String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY " + 
      "AUTOINCREMENT, "+NAME+" TEXT UNIQUE, " 
      +LSCORE+" INTEGER, "+DSCORE+" INTEGER)"; 
+1

'分号在查询结束是不需要的,但它不会产生任何伤害,如果它在那里。 –

+0

什么关于数据库名称我从来没有见过.db任何地方,我认为你应该试试把它改为databsename到私有静态最后String DATABASE_NAME =“scores”; 并从查询中删除分号 –

+0

教程我一直在看,声称两者是相同的东西。@ AdeelTurk –

相关问题