Witam.
Pisze aplikacje która będzie służyć do tworzenia "statystyk: odnośnie wyjazdów z OSP (projekt na studia).
Chciałem podłączyć SQLite do apki aby zbierała dane i w innym activity żeby można było później wyświetlić historie wyjazdów.
Napisałem do tej pory coś takiego:
package com.example.ospapp;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.sql.Date;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "DatabaseHelper";
private static final String TABLE_NAME = "departure_table";
private static final String COL1 = "ID";
private static final String COL2 = "commander";
private static final String COL3 = "dateAction";
private static final String COL4 = "peopleOnAction";
private static final String COL5 = "timeAction";
private static final String COL6 = "victimsInAction";
private static final String COL7 = "typOfAction";
public DatabaseHelper(Context context){
super(context, TABLE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT , " +
COL2 + " TEXT," + COL3 + " TEXT," + COL4 + " TEXT," + COL5 + " TEXT," + COL6 + " TEXT," + COL7 + " TEXT);";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean AddData(String commander, String dateAction,String peopleOnAction, String timeAction, String victimsInAction, String typOfAction) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, commander);
contentValues.put(COL3, dateAction);
contentValues.put(COL4, peopleOnAction);
contentValues.put(COL5, timeAction);
contentValues.put(COL6, victimsInAction);
contentValues.put(COL7, typOfAction);
Log.d(TAG, "addData: Adding " + commander + " to " + TABLE_NAME);
long result = db.insert(TABLE_NAME, null, contentValues);
//if date as inserted incorrectly it will return -1
if (result == -1) {
return false;
} else {
return true;
}
}
public Cursor getData(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor data = db.rawQuery(query, null);
return data;
}
/**
* Returns only the ID that matches the name passed in
*/
public Cursor getItemID(String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " + COL1 + " FROM " + TABLE_NAME +
" WHERE " + COL2 + " = '" + name + "'";
Cursor data = db.rawQuery(query, null);
return data;
}
/**
* Updates the name field
*/
public void updateName(String newName, int id, String oldName){
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_NAME + " SET " + COL2 +
" = '" + newName + "' WHERE " + COL1 + " = '" + id + "'" +
" AND " + COL2 + " = '" + oldName + "'";
Log.d(TAG, "updateName: query: " + query);
Log.d(TAG, "updateName: Setting name to " + newName);
db.execSQL(query);
}
/**
* Delete from database
*/
public void deleteName(int id, String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "DELETE FROM " + TABLE_NAME + " WHERE "
+ COL1 + " = '" + id + "'" +
" AND " + COL2 + " = '" + name + "'";
Log.d(TAG, "deleteName: query: " + query);
Log.d(TAG, "deleteName: Deleting " + name + " from database.");
db.execSQL(query);
}
}
i dostaje błąd:
2020-06-03 22:07:16.845 13726-13726/com.example.ospapp D/DatabaseHelper: addData: Adding przykład to departure_table
2020-06-03 22:07:16.846 13726-13726/com.example.ospapp E/SQLiteLog: (1) table departure_table has no column named dateAction
2020-06-03 22:07:16.863 13726-13726/com.example.ospapp E/SQLiteDatabase: Error inserting commander=przykład dateAction=3 cze 2020 timeAction=14:55 peopleOnAction=5 victimsInAction=2 typOfAction=wypadek
android.database.sqlite.SQLiteException: table departure_table has no column named dateAction (code 1 SQLITE_ERROR): , while compiling: INSERT INTO departure_table(commander,dateAction,timeAction,peopleOnAction,victimsInAction,typOfAction) VALUES (?,?,?,?,?,?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1597)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1468)
at com.example.ospapp.DatabaseHelper.AddData(DatabaseHelper.java:55)
at com.example.ospapp.NextDepartureActivity$1.onClick(NextDepartureActivity.java:55)
at android.view.View.performClick(View.java:7140)
at android.view.View.performClickInternal(View.java:7117)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27355)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7403)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
Czy mógłby ktoś rzucić okiem i podpowiedzieć co jest nie tak z tym kodem?