SQLite数据库Android ..........只是基本的东西<不知道y不起作用:/>

时间:2013-07-04 07:23:34

标签: sql sqliteopenhelper

我刚刚学习了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):当准备'CREATE TABLE default(名称TEXT,abc TEXT,ac TEXT)'时,0x32a270上的失败1(接近“默认”:语法错误)。

     

07-04 12:45:57.961:D / AndroidRuntime(277):关闭虚拟机

     

07-04 12:45:57.961:W / dalvikvm(277):threadid = 1:线程退出时未捕获异常(组= 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):at a   android.app.ActivityThread.main(ActivityThread.java:4627)

     

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

     

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

     

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

     

07-04 12:45:58.011:E / AndroidRuntime(277):at 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):at com.example.sqlite.MainActivity.add(MainActivity.java:31)

     

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

     

07-04 12:45:58.011:E / AndroidRuntime(277):at 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:接近“default”:语法错误:CREATE TABLE   默认(名称TEXT,abc TEXT,ac TEXT)

     

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)

提前致谢

1 个答案:

答案 0 :(得分:2)

DEFAULTSQL keyword,每次在SQL语句中使用时都必须引用它:

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

您可能更善于使用其他名称。