-1

我只是在学习 sqlite 数据库并尝试了一个小应用程序来将条目添加到 sqlite 数据库中......不知道为什么它不起作用......我真的很沮丧,几乎让我对这个 android 的东西失去兴趣.......任何帮助表示赞赏......提前谢谢............

这是代码:
开瓶器类

package com.example.sqlite;

import android.content.ContentValues;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class opener {

   Context cc;
SQLiteDatabase db;

public opener(Context c)
{
    cc=c;
}


class SQLHelper extends SQLiteOpenHelper{


    public SQLHelper(Context context) {

        super(context, "app" , null, 1);

        // TODO Auto-generated constructor stub
    }


    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE default(name TEXT, abc TEXT, ac TEXT)");


    }


    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS default");

        onCreate(db);

    }

}

public void open()

{

SQLHelper sq= new SQLHelper(cc);

db=sq.getWritableDatabase();

}

public void close()

{

db.close();

}

public long insert(String a,String b,String c)

{

ContentValues cv = new ContentValues();

cv.put("name", a);

cv.put("abc", b);

cv.put("ac", c);

return db.insert("default", null,cv);

}



}

这是主类:
MainActivity.java

package com.example.sqlite;

import android.os.Bundle;

import android.app.Activity;

import android.app.Dialog;

import android.view.View;

import android.widget.EditText;

public class MainActivity extends Activity {

    EditText ed1;
EditText ed2;
EditText ed3;
EditText ed4;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ed1 = (EditText) findViewById(R.id.editText1);
    ed2 = (EditText) findViewById(R.id.editText2);
    ed3 = (EditText) findViewById(R.id.editText3);
    ed4 = (EditText) findViewById(R.id.editText4);
}

public void add(View v) {
    String ac = ed1.getText().toString();
    String b = ed2.getText().toString();
    String c = ed3.getText().toString();
    opener a = new opener(this);
    a.open();
    long d = a.insert(ac, b, c);
    a.close();
    if (d != -1) {
        Dialog dia = new Dialog(this);
        dia.setTitle("SUCCESS");
        dia.setCanceledOnTouchOutside(true);
        dia.show();
    }

    else {
        Dialog dia = new Dialog(this);
        dia.setTitle("NoSuccess");
        dia.setCanceledOnTouchOutside(true);
        dia.show();
    }
}}

顺便说一句,如果它看起来很乱,很抱歉.....每当我尝试插入一些东西时,控制台都会说这样的话

07-04 12:45:57.951:I/Database(277):sqlite 返回:错误代码 = 1,msg = 接近“默认”:语法错误

07-04 12:45:57.951:E/Database(277):在准备“创建表默认值(名称文本,abc 文本,ac 文本)”时,0x32a270 上的失败 1(接近“默认”:语法错误)。

07-04 12:45:57.961: D/AndroidRuntime(277): 关闭 VM

07-04 12:45:57.961: W/dalvikvm(277): threadid=1: 线程以未捕获的异常退出 (group=0x4001d800)

07-04 12:45:58.011:E/AndroidRuntime(277):致命异常:主要

07-04 12:45:58.011: E/AndroidRuntime(277): java.lang.IllegalStateException: 无法执行活动的方法

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.view.View$1.onClick(View.java:2072)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.view.View.performClick(View.java:2408)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.view.View$PerformClick.run(View.java:8816)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.os.Handler.handleCallback(Handler.java:587)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.os.Handler.dispatchMessage(Handler.java:92)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.os.Looper.loop(Looper.java:123)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.app.ActivityThread.main(ActivityThread.java:4627)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 java.lang.reflect.Method.invokeNative(Native Method)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 java.lang.reflect.Method.invoke(Method.java:521)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

07-04 12:45:58.011: E/AndroidRuntime(277): at dalvik.system.NativeStart.main(Native Method)

07-04 12:45:58.011:E/AndroidRuntime(277):原因:java.lang.reflect.InvocationTargetException

07-04 12:45:58.011: E/AndroidRuntime(277): 在 com.example.sqlite.MainActivity.add(MainActivity.java:31)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 java.lang.reflect.Method.invokeNative(Native Method)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 java.lang.reflect.Method.invoke(Method.java:521)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.view.View$1.onClick(View.java:2067)

07-04 12:45:58.011: E/AndroidRuntime(277): ... 11 更多

07-04 12:45:58.011:E/AndroidRuntime(277):由:android.database.sqlite.SQLiteException:接近“默认”:语法错误:创建表默认(名称文本,abc 文本,ac 文本)

07-04 12:45:58.011:E/AndroidRuntime(277):在 android.database.sqlite.SQLiteDatabase.native_execSQL(本机方法)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727)

07-04 12:45:58.011: E/AndroidRuntime(277): at com.example.sqlite.opener$SQLHelper.onCreate(opener.java:29)

07-04 12:45:58.011: E/AndroidRuntime(277): 在 android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106)

07-04 12:45:58.011: E/AndroidRuntime(277): at com.example.sqlite.opener.open(opener.java:45)

提前致谢

4

1 回答 1

2

DEFAULT是每次在 SQL 语句中使用时都必须引用的SQL 关键字:

db.execSQL("CREATE TABLE \"default\"(name TEXT, abc TEXT, ac TEXT)");
...
db.execSQL("DROP TABLE IF EXISTS \"default\"");
...
db.insert("\"default\"", null, cv);

您最好使用其他名称。

于 2013-07-04T08:22:33.670 回答