override fun onCreate(db: SQLiteDatabase?) {
// SQL -> Commands
var CREATE_CHORE_TABLE: String = "CREATE TABLE " + TABLE_NAME +
"(" + KEY_ID + " INTEGER PRIMARY KEY," +
KEY_CHORE_NAME + " TEXT," +
KEY_CHORE_ASSIGNED_BY + " TEXT," +
KEY_CHORE_ASSIGNED_TO + " TEXT," +
KEY_CHORE_ASSIGNED_TIME + " Long)"
db?.execSQL(CREATE_CHORE_TABLE)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
// Delete Table
db?.execSQL("DROP TABLE IF EXIST " + TABLE_NAME)
// Create Table
onCreate(db)
}
// CRUD -> Create, Read, Update, Delete
fun createChore(chore: Chore) {
var db: SQLiteDatabase = writableDatabase
var values: ContentValues = ContentValues()
values.put(KEY_CHORE_NAME, chore.choreName)
values.put(KEY_CHORE_ASSIGNED_BY, chore.assignedBy)
values.put(KEY_CHORE_ASSIGNED_TO, chore.assignedTo)
values.put(KEY_CHORE_ASSIGNED_TIME, System.currentTimeMillis())
db.insert(TABLE_NAME, null, values)
db.close()
Log.d("Insert Data", "Data Save Success")
}
fun getChore(id: Int): Chore? {
var db: SQLiteDatabase = writableDatabase
var cursor = db.query(
TABLE_NAME, arrayOf(
KEY_ID,
KEY_CHORE_NAME,
KEY_CHORE_ASSIGNED_BY,
KEY_CHORE_ASSIGNED_TO,
KEY_CHORE_ASSIGNED_TIME
), KEY_ID + " =?", arrayOf(id.toString()),
null, null, null
)
if (cursor != null) {
cursor.moveToFirst()
var chore = Chore()
chore.choreName = cursor.getString(cursor.getColumnIndex(KEY_CHORE_NAME))
chore.assignedBy = cursor.getString(cursor.getColumnIndex(KEY_CHORE_ASSIGNED_BY))
chore.assignedTo = cursor.getString(cursor.getColumnIndex(KEY_CHORE_ASSIGNED_TO))
chore.timeAssigned = cursor.getLong(cursor.getColumnIndex(KEY_CHORE_ASSIGNED_TIME))
var dateFormat: DateFormat = DateFormat.getDateInstance()
var formatredDate =
dateFormat.format(Date(cursor.getLong(cursor.getColumnIndex(KEY_CHORE_ASSIGNED_TIME))).time)
return chore
} else {
return null
}
class MainActivity : AppCompatActivity() {
var dbHandler: ChoresDatabaseHandler? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
dbHandler = ChoresDatabaseHandler(this)
var newChore = Chore()
newChore.choreName = " clean room"
newChore.assignedBy = " Goodarz"
newChore.assignedTo = " Shervin"
dbHandler?.createChore(newChore)
// Read Frome DateBase
var gotChor: Chore? = dbHandler?.getChore(1)
Log.d("Got data from data base", ", gotChor!!.choreName")
}
package com.example.database.models
class Chore() {
var id: Int? = null
var choreName: String? = null
var assignedBy: String? = null
var assignedTo: String? = null
var timeAssigned: Long? = null
constructor(
_choreName: String,
_assignedBy: String,
_assignedTo: String,
_timeAssigned: Long,
_id: Int
) : this() {
this.choreName = _choreName
this.assignedBy = _assignedBy
this.assignedTo = _assignedTo
this.timeAssigned = _timeAssigned
this.id = _id
سلام استاد من نمیتونم خطای نوشتاری توی لاگ رو پیدا کنم میشه لطفا راهنمایی بفرمایید
05/13 23:05:21: Launching 'MainActivity' on Samsung.
$ adb shell am start -n "com.example.database/com.example.database.controller.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 8414 on device '-samsung-192.168.204.101:5555'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
I/Zygote: seccomp disabled by setenforce 0
I/xample.databas: Late-enabling -Xcheck:jni
W/xample.databas: Unexpected CPU variant for X86 using defaults: x86
D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
I/com.example.database: type=1400 audit(0.0:2308): avc: denied { connectto } for comm=45474C20496E6974 path="/dev/socket/property_service" scontext=u:r:untrusted_app:s0:c72,c256,c512,c768 tcontext=u:r:init:s0 tclass=unix_stream_socket permissive=1
D/vndksupport: Loading /vendor/lib/egl/libGLES_emulation.so from current namespace instead of sphal namespace.
E/libEGL: load_driver(/vendor/lib/egl/libGLES_emulation.so): dlopen failed: library "/vendor/lib/egl/libGLES_emulation.so" not found
D/vndksupport: Loading /vendor/lib/egl/libEGL_emulation.so from current namespace instead of sphal namespace.
D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
D/vndksupport: Loading /vendor/lib/egl/libGLESv1_CM_emulation.so from current namespace instead of sphal namespace.
D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
D/vndksupport: Loading /vendor/lib/egl/libGLESv2_emulation.so from current namespace instead of sphal namespace.
D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
W/xample.databas: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
E/SQLiteLog: (1) near "assigned": syntax error
E/SQLiteDatabase: Error inserting chore assigned to= Shervin chore name= clean room chore assigned by= Goodarz chore assigned time=1589394919961
android.database.sqlite.SQLiteException: near "assigned": syntax error (code 1 SQLITE_ERROR): , while compiling: INSERT INTO chores(chore assigned to,chore name,chore assigned by,chore assigned time) VALUES (?,?,?,?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1562)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1433)
at com.example.database.dataLayer.ChoresDatabaseHandler.createChore(ChoresDatabaseHandler.kt:49)
at com.example.database.controller.MainActivity.onCreate(MainActivity.kt:27)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
D/Insert Data: Data Save Success
E/SQLiteLog: (1) near "by": syntax error
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.database, PID: 8414
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.database/com.example.database.controller.MainActivity}: android.database.sqlite.SQLiteException: near "by": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT id, chore name, chore assigned by, chore assigned to, chore assigned time FROM chores WHERE id =?
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2914)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.database.sqlite.SQLiteException: near "by": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT id, chore name, chore assigned by, chore assigned to, chore assigned time FROM chores WHERE id =?
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1408)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1255)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1126)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1294)
at com.example.database.dataLayer.ChoresDatabaseHandler.getChore(ChoresDatabaseHandler.kt:59)
at com.example.database.controller.MainActivity.onCreate(MainActivity.kt:31)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
و اینکه راهی نیست که از intelligence برای فرمان های دیتابیس استفاده کرد
سلام دوست من
کدتون رو با اموزش مقایسه کنین
احتمالا جایی اشتباه نوشتین