2017-09-13 25 views
0

我是Android SQLite數據庫的新手&而執行this.getWritableDatabase()我的應用程序停止。有沒有解決這個問題的方法?我的數據庫是關於獲取學生的信息並在數據庫中保存它們的標記。this.getWritableDatabase()導致我的Android應用程序停止

public class DatabaseHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME="Dictionary.db"; 
    public static final String TABLE_NAME="Dictionary_data"; 
    public static final String COL_1="ID"; 
    public static final String COL_2="Name"; 
    public static final String COL_3="SURNAME"; 
    public static final String COL_4="MARKS"; 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE"+ TABLE_NAME+ "(ID INTEGER PRIMARY KEY AUTO INCREMENT,NAME TEXT,SURENAME TEXT,MARKS INTEGER)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS"+TABLE_NAME); 
     onCreate(db); 
    } 

    public boolean insert_data(String name,String surname,String marks) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues= new ContentValues(); 
     contentValues.put(COL_2,name); 
     contentValues.put(COL_3,surname); 
     contentValues.put(COL_4,marks); 
     long result = db.insert(TABLE_NAME,null,contentValues); 

     if(result==-1) 
      return false; 
     else 
      return true; 
    } 
} 

而且我mainActivity類:

public class MainActivity extends AppCompatActivity { 

    DatabaseHelper myDB; 
    EditText editName,editSurname,editMark; 
    Button btn_add_data; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     myDB = new DatabaseHelper(this.getApplicationContext()); 

     editName = (EditText)findViewById(R.id.namespace); 
     editSurname = (EditText)findViewById(R.id.surnamespace); 
     editMark = (EditText)findViewById(R.id.markspace); 
     btn_add_data = (Button)findViewById(R.id.add_button); 
     addData(); 
    } 

    public void addData(){ 
     btn_add_data.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        boolean id_inserted = myDB.insert_data(editName.getText().toString(),editSurname.getText().toString(),editMark.getText().toString()); 

        if(id_inserted) 
         Toast.makeText(MainActivity.this,"Data inserted",Toast.LENGTH_LONG).show(); 
        else 
         Toast.makeText(MainActivity.this,"Data not inserted",Toast.LENGTH_LONG).show(); 
       } 
      } 
     ); 
    } 
} 
+1

使用LogCat檢查與您的崩潰相關的Java堆棧跟蹤:https://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this – CommonsWare

回答

1

存在誤差在創建表的表後

db.execSQL("CREATE TABLE"+ TABLE_NAME+ "(ID INTEGER PRIMARY KEY AUTO INCREMENT,NAME TEXT,SURENAME TEXT,MARKS INTEGER)"); 

請添加空間

db.execSQL("CREATE TABLE "+ TABLE_NAME+ " (ID INTEGER PRIMARY KEY AUTO INCREMENT,NAME TEXT,SURENAME TEXT,MARKS INTEGER)"); 

還添加日誌貓更多細節,我無法紀念nt,因爲這是我的新帳戶。

+0

CREATE TABLE「 (ID INTEGER PRIMARY KEY AUTO INCREMENT,NAME TEXT,SURENAME TEXT,MARKS INTEGER)'也會導致錯誤,因爲正確的關鍵字是'AUTOINCREMENT'(即AUTO和INCREMENT之間沒有空格)。錯誤將沿着* SQL語法錯誤:CREATE TABLE mytable(ID INTEGER PRIMARY KEY AUTO INCREMENT,NAME TEXT,SURENAME TEXT,MARKS INTEGER)[接近「AUTO」:語法錯誤] * – MikeT

相關問題