2017-09-13 3 views
0

Ich bin neu in Android SQLite-Datenbank & während der Ausführung this.getWritableDatabase() meine App Anschläge zu stoppen. Gibt es eine Lösung für dieses Problem? In meiner Datenbank geht es darum, Schülerinformationen zu erhalten und ihre Markierungen in der Datenbank zu speichern.this.getWritableDatabase() bewirkt, dass meine Android App

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; 
    } 
} 

Und meine mainActivity Klasse:

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

Verwenden Sie LogCat, um die Java-Stack-Ablaufverfolgung zu untersuchen, die mit Ihrem Absturz verknüpft ist: https://StackOverflow.com/questions/23353173/universe-myapp-has-stopped-how-can-i-solve-this – CommonsWare

Antwort

1

wird in Fehlertabelle erstellen

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

fügen Sie bitte Raum nach TABELLE

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

auch Log-Katze für mehr hinzufügen Details, ich bin nicht in der Lage zu comme Das ist mein neues Konto.

+0

'CREATE TABLE" + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTO INCREMENT, NAME TEXT, Nachname TEXT, MARKS INTEGER)' wird auch zu einem Fehler, wie das korrekte Schlüsselwort ist 'AUTOINCREMENT' (dh ohne einen Raum zwischen AUTO und INCREMENT). Der Fehler wird entlang der Linien von SQL * Syntaxfehler sein: CREATE TABLE Mytable (ID INTEGER PRIMARY KEY AUTO INCREMENT, NAME TEXT, Nachname TEXT, MARKS INTEGER) [in der Nähe von "AUTO": syntax error] * – MikeT

Verwandte Themen