-1
我正在嘗試向SQLite數據庫輸入一些數據,並且每次嘗試添加數據時都會收到錯誤消息。插入數據的Android SQLite錯誤
錯誤消息
這裏是LOG:Error Log
輸出
02-11 18:36:36.050 1853-1872/com.teamnewb.sahil.bliss D/OpenGLRenderer﹕ endAllStagingAnimators on 0x7f851d267800 (RippleDrawable) with handle 0x7f851d25da40
02-11 18:36:37.680 1853-1853/com.teamnewb.sahil.bliss E/SQLiteLog﹕ (1) near ".": syntax error
--------- beginning of crash
02-11 18:36:37.700 1853-1853/com.teamnewb.sahil.bliss E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.teamnewb.sahil.bliss, PID: 1853
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.teamnewb.sahil.bliss/com.teamnewb.sahil.bliss.ActionSummary}: android.database.sqlite.SQLiteException: near ".": syntax error (code 1): , while compiling: CREATE TABLE tasks (com.teamnewb.sahil.TaskContract.TASKDESC TEXT)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: android.database.sqlite.SQLiteException: near ".": syntax error (code 1): , while compiling: CREATE TABLE tasks (com.teamnewb.sahil.TaskContract.TASKDESC TEXT)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
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.executeSql(SQLiteDatabase.java:1674)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
at db.TaskDBHelper.onCreate(TaskDBHelper.java:28)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at db.TaskCRUD.insert(TaskCRUD.java:22)
at com.teamnewb.sahil.bliss.ActionSummary.onCreate(ActionSummary.java:63)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-11 18:36:39.400 1897-1897/com.teamnewb.sahil.bliss D/addEventYet﹕ false
02-11 18:36:39.400 1897-1897/com.teamnewb.sahil.bliss D/Db is empty?﹕ Yes
TaskContract.java
package db;
import android.provider.BaseColumns;
import java.util.Calendar;
public class TaskContract {
public static final String DB_NAME = "com.teamnewb.sahil.db.tasks";
public static final int DB_VERSION = 1;
public static final String TABLE = "tasks";
public static class Columns {
public static final String TASKDESC = "taskdesc"; //TODO: get task description input here and other inputs as well
public static final String DATEMONTH = "month";
public static final String DATEDAY = "day";
public static final String DATEYEAR = "year";
public static final String TASKTYPE = "tasktype";
public static final String IMP = "imp";
//Variables used to transfer/store data
public String description;
public String type; //note if completed task store as COMPLETEDTASK
public int year;
public int month;
public int day;
public int im; //0 = not important, else 1
public Columns(String d, String t, int i) {
description = d;
type = t;
im = i;
Calendar cal = Calendar.getInstance();
year = cal.get(Calendar.YEAR);
day = cal.get(Calendar.DAY_OF_MONTH);
month = Calendar.MONTH;
}
}
}
TaskDBHelper.java
package db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class TaskDBHelper extends SQLiteOpenHelper {
public TaskDBHelper(Context context) {
super(context, TaskContract.DB_NAME, null, TaskContract.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqlDB) {
String sqlQuery = "CREATE TABLE " + TaskContract.TABLE + "(" + TaskContract.Columns.TASKDESC + "TEXT, "
+ TaskContract.Columns.TASKTYPE + "TEXT, " + TaskContract.Columns.DATEYEAR + "INTEGER, " +
TaskContract.Columns.DATEMONTH + "INTEGER, " + TaskContract.Columns.DATEDAY + "INTEGER, "
+ TaskContract.Columns.IMP + "INTEGER)";
Log.d("TaskDBHelper", "Query to form table: " + sqlQuery);
sqlDB.execSQL(sqlQuery);
}
@Override
public void onUpgrade(SQLiteDatabase sqlDB, int i, int i2) {
sqlDB.execSQL("DROP TABLE IF EXISTS " + TaskContract.TABLE);
onCreate(sqlDB);
}
}
TaskCRUD.java
package db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.HashMap;
import android.util.Log;
public class TaskCRUD {
private TaskDBHelper dbHelper;
public TaskCRUD (Context context)
{
dbHelper = new TaskDBHelper(context);
}
public boolean insert(TaskContract.Columns c)
{
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(TaskContract.Columns.DATEDAY, c.day);
Log.d(TaskContract.Columns.DATEDAY, c.day + "");
values.put(TaskContract.Columns.DATEMONTH, c.month);
Log.d(TaskContract.Columns.DATEMONTH, c.month + "");
values.put(TaskContract.Columns.DATEYEAR, c.year);
Log.d(TaskContract.Columns.DATEYEAR, c.year + "");
values.put(TaskContract.Columns.TASKDESC, c.description);
Log.d(TaskContract.Columns.TASKDESC, c.description);
values.put(TaskContract.Columns.TASKTYPE, c.type);
Log.d(TaskContract.Columns.TASKTYPE, c.type);
values.put(TaskContract.Columns.IMP, c.im);
Log.d(TaskContract.Columns.IMP, c.im + "");
db.insertWithOnConflict(TaskContract.TABLE,null,values,SQLiteDatabase.CONFLICT_IGNORE);
return true;
}
public boolean delete(String description)
{
SQLiteDatabase db = dbHelper.getWritableDatabase();
// It's a good practice to use parameter ?, instead of concatenate string
db.delete(TaskContract.TABLE, description + "= ?", new String[] { String.valueOf(description) });
db.close(); // Closing database connection
return true;
}
public ArrayList<Tasks> getData(int m, int y) {
ArrayList<Tasks> t = new ArrayList<Tasks>();
SQLiteDatabase db = dbHelper.getWritableDatabase();
String q = "SELECT * FROM " + TaskContract.TABLE + " WHERE " +
TaskContract.Columns.DATEMONTH + " = " + m + " AND " + TaskContract.Columns.DATEYEAR + " = " + y + " ORDER BY "
+ TaskContract.Columns.DATEDAY + " DESC;";
Cursor c = db.rawQuery(q, null);
c.moveToFirst();
if (c != null)
{
do {
String desc = c.getString(0);
String type = c.getString(1);
int year = Integer.parseInt(c.getString(3));
int month = Integer.parseInt(c.getString(4));
int day = Integer.parseInt(c.getString(5));
int imp = Integer.parseInt(c.getString(6));
Tasks task = new Tasks(day, month, year, imp, desc, type);
t.add(task);
} while (c.moveToNext());
return t;
}
else
{
return null;
}
}
}
將版本代碼'DB_VERSION = 1;'更改爲'DB_VERSION = 2;' – 2015-02-12 02:59:20
後無法正常工作。任何其他的想法傢伙? – Spriggs857 2015-02-12 03:13:49
我想你最後錯過了一個分號。如下:\t \t \t「CREATE TABLE IF NOT EXISTS sale(isfav TEXT,ishidden TEXT,sale_id TEXT);」; – kgandroid 2015-02-12 05:17:56