每个人,我在Android应用程序开发方面都是全新的,并尝试使用数据库存储一些字符串,但每次我尝试打开我的数据库时,我的应用程序崩溃时出现以下错误消息:< / p>
android.database.sqlite.SQLiteException:near&#34; TABLETASKS&#34 ;:语法错误(代码1):,编译时:CREATE TABLETASKS(_idinteger主键autoincrementtasktext not null);
完整代码和错误日志如下:
package org.example.tasklist;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends Activity {
HelperMethods localhelpermethods;
OpenHelper localopenhelper;
SQLiteDatabase localdatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context localcontext = getApplicationContext();
localopenhelper = new OpenHelper(localcontext);
localhelpermethods = new HelperMethods(localcontext);
final ArrayList<String> al = new ArrayList<String>();
ListView listView1 = (ListView)findViewById(R.id.listView1);
final EditText editText1 = (EditText)findViewById(R.id.editText1);
Button button1 = (Button)findViewById(R.id.button1);
final ArrayAdapter<String> aa = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,al);
listView1.setAdapter(aa);
button1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
localhelpermethods.open_database();
String task = editText1.getText().toString();
localhelpermethods.add_task(task);
aa.notifyDataSetChanged();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我的OpenHelper课程。 package org.example.tasklist;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class OpenHelper extends SQLiteOpenHelper
{
public static final String DATABASE_NAME = "TASKS.db";
public static final int DATABASE_VERSION = 1;
public final String DATABASE_TABLE = "TASKS";
//Columns in the table.
public final String KEY_TASK = "task";
public final String KEY_ID = "_id";
private static Context context;
public OpenHelper(Context context)
{
super(context,DATABASE_NAME,null,DATABASE_VERSION);
this.context = context;
}
public void onCreate(SQLiteDatabase database)
{
database.execSQL("CREATE TABLE" + DATABASE_TABLE + "(" + KEY_ID + "integer primary key autoincrement"
+ KEY_TASK + "text not null);");
}
public void onUpgrade(SQLiteDatabase database, int oldversion, int newversion)
{
if(newversion > oldversion)
{
database.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE );
onCreate(database);
}
}
}
My HelperMethods课程。
package org.example.tasklist;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class HelperMethods
{
OpenHelper OH;
SQLiteDatabase task_database;
ArrayList<String> return_list = new ArrayList<String>();
private static Context localcontext;
public HelperMethods(Context context)
{
HelperMethods.localcontext = context;
OH = new OpenHelper(localcontext);
}
public HelperMethods open_database() throws SQLException
{
task_database = OH.getWritableDatabase();
return this;
}
public ArrayList<String> getAllTasks()
{
String[] columns = new String[] {OH.KEY_TASK};
Cursor cursor = task_database.query(OH.DATABASE_TABLE, columns, null, null, null, null, null, null);
while(cursor.moveToNext())
{
return_list.add(cursor.getString(cursor.getColumnIndex(OH.KEY_TASK)));
}
return return_list;
}
public void add_task(String task)
{
OH.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(OH.KEY_TASK, task);
task_database.insert(OH.KEY_TASK, null, cv);
OH.close();
}
}
logcat错误输出。
05-02 16:08:50.990: E/SQLiteLog(2590): (1) near "TABLETASKS": syntax error
05-02 16:08:51.020: E/AndroidRuntime(2590): FATAL EXCEPTION: main
05-02 16:08:51.020: E/AndroidRuntime(2590): Process: org.example.tasklist, PID: 2590
05-02 16:08:51.020: E/AndroidRuntime(2590): android.database.sqlite.SQLiteException: near "TABLETASKS": syntax error (code 1): , while compiling: CREATE TABLETASKS(_idinteger primary key autoincrementtasktext not null);
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
05-02 16:08:51.020: E/AndroidRuntime(2590): at org.example.tasklist.OpenHelper.onCreate(OpenHelper.java:29)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
05-02 16:08:51.020: E/AndroidRuntime(2590): at org.example.tasklist.HelperMethods.open_database(HelperMethods.java:26)
05-02 16:08:51.020: E/AndroidRuntime(2590): at org.example.tasklist.MainActivity$1.onClick(MainActivity.java:46)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.view.View.performClick(View.java:4424)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.view.View$PerformClick.run(View.java:18383)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.os.Handler.handleCallback(Handler.java:733)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.os.Handler.dispatchMessage(Handler.java:95)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.os.Looper.loop(Looper.java:137)
05-02 16:08:51.020: E/AndroidRuntime(2590): at android.app.ActivityThread.main(ActivityThread.java:4998)
05-02 16:08:51.020: E/AndroidRuntime(2590): at java.lang.reflect.Method.invokeNative(Native Method)
05-02 16:08:51.020: E/AndroidRuntime(2590): at java.lang.reflect.Method.invoke(Method.java:515)
05-02 16:08:51.020: E/AndroidRuntime(2590): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
05-02 16:08:51.020: E/AndroidRuntime(2590): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
05-02 16:08:51.020: E/AndroidRuntime(2590): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
你有一个错字: _idinteger主键autoincrementtasktext not null
应该是 _idinteger主键autoincrement tasktext not null
注意空格
答案 1 :(得分:0)
您必须在表行名称和数据类型之间添加一些空格以识别它,这是您错过的。
只需更改您的创建表查询,如下所示:
database.execSQL("CREATE TABLE " + DATABASE_TABLE + " ( " + KEY_ID + " integer primary key autoincrement " + KEY_TASK + " text not null); ");