我刚刚学习了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)
提前致谢
答案 0 :(得分:2)
DEFAULT
是SQL 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);
您可能更善于使用其他名称。