gpt4 book ai didi

android - Helper.getWritableDatabase() 函数

转载 作者:行者123 更新时间:2023-12-02 01:35:26 25 4
gpt4 key购买 nike

我正在开发我的第一个 SQLite 数据库应用程序,因为我被困了很长时间,所以我决定在线询问。

由于以下函数,我无法运行我编写的应用程序:Helper.getWritableDatabase();

没有它,它运行良好。

当我查看 DDMS 上的数据/数据/项目源时,我的数据库确实创建了

代码:

症状类别:

public class Symptom {

long symptomId;
String name;
long details;


public Symptom(long symptomId, String name, long details) {
super();
this.symptomId = symptomId;
this.name = name;
this.details = details;
}

public Symptom() {}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public long getDetails() {
return details;
}

public void setDetails(long details) {
this.details = details;
}

public long getSymptomId() {
return symptomId;
}

public void setSymptomId(long symptomId) {
this.symptomId = symptomId;
};

}

SymptomOpenHelper 类:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class SymptomOpenHelper extends SQLiteOpenHelper {


public static final String DATABASENAME="Symptom.db";
public static final String TABLE_SYMPTOM="tblSymptom";
public static final int DATABASEVERSION = 1;

public static final String COLUMN_ID="symptomId";
public static final String COLUMN_NAME="name";
public static final String COLUMN_DETAILS="details";

private static final String CREATE_TABLE_SYMPTOM="CREATE TABLE IF NOT EXIST" + TABLE_SYMPTOM + "(" + COLUMN_ID + "INTEGER PRIMART KEY AUTOINCREMENT," + COLUMN_NAME +"VARCHAR," +COLUMN_DETAILS +"VARCHAR" + ");";


public SymptomOpenHelper(Context context)
{
super(context, DATABASENAME, null, DATABASEVERSION);

}


@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_SYMPTOM);
Log.i("data" ,"Table sypmpton created");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int NewVersion) {
db.execSQL("DROP TABLE IF NOT EXIST" + TABLE_SYMPTOM);
onCreate(db);

}

}

MainActivity 代码:

    import android.os.Bundle;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;

public class MainActivity extends Activity {

SymptomOpenHelper sHelper;
SQLiteDatabase database;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


sHelper =new SymptomOpenHelper(this);
// The trouble-maker line:

database=sHelper.getWritableDatabase();

}

@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;
}

}

根据 Android 模拟器:“不幸的是,The_app_name 已停止”

LogCat:

12-31 19:55:37.744: E/Trace(924): error opening trace file: No such file or directory (2) 12-31 19:55:38.964: E/SQLiteLog(924): (1) near "AUTOINCREMENT": syntax error 12-31 19:55:38.994: D/AndroidRuntime(924): Shutting down VM 12-31 19:55:38.994: W/dalvikvm(924): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 12-31 19:55:39.124: E/AndroidRuntime(924): FATAL EXCEPTION: main 12-31 19:55:39.124: E/AndroidRuntime(924): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.idiagnostician1/com.example.idiagnostician1.MainActivity}: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS tblSymptom (symptomId INTEGER PRIMART KEY AUTOINCREMENT,name VARCHAR, details VARCHAR); 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.ActivityThread.access$600(ActivityThread.java:141) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.os.Handler.dispatchMessage(Handler.java:99) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.os.Looper.loop(Looper.java:137) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.ActivityThread.main(ActivityThread.java:5041) 12-31 19:55:39.124: E/AndroidRuntime(924): at java.lang.reflect.Method.invokeNative(Native Method) 12-31 19:55:39.124: E/AndroidRuntime(924): at java.lang.reflect.Method.invoke(Method.java:511) 12-31 19:55:39.124: E/AndroidRuntime(924): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-31 19:55:39.124: E/AndroidRuntime(924): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 12-31 19:55:39.124: E/AndroidRuntime(924): at dalvik.system.NativeStart.main(Native Method) 12-31 19:55:39.124: E/AndroidRuntime(924): Caused by: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS tblSymptom (symptomId INTEGER PRIMART KEY AUTOINCREMENT,name VARCHAR, details VARCHAR); 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594) 12-31 19:55:39.124: E/AndroidRuntime(924): at com.example.idiagnostician1.SymptomOpenHelper.onCreate(SymptomOpenHelper.java:30) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 12-31 19:55:39.124: E/AndroidRuntime(924): at com.example.idiagnostician1.MainActivity.onCreate(MainActivity.java:20) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.Activity.performCreate(Activity.java:5104) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 12-31 19:55:39.124: E/AndroidRuntime(924): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 12-31 19:55:39.124: E/AndroidRuntime(924): ... 11 more 12-31 19:55:44.334: E/Trace(986): error opening trace file: No such file or directory (2) 12-31 19:55:44.624: E/SQLiteLog(986): (1) near "AUTOINCREMENT": syntax error 12-31 19:55:44.624: D/AndroidRuntime(986): Shutting down VM 12-31 19:55:44.634: W/dalvikvm(986): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 12-31 19:55:44.653: E/AndroidRuntime(986): FATAL EXCEPTION: main 12-31 19:55:44.653: E/AndroidRuntime(986): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.idiagnostician1/com.example.idiagnostician1.MainActivity}: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS tblSymptom (symptomId INTEGER PRIMART KEY AUTOINCREMENT,name VARCHAR, details VARCHAR); 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.ActivityThread.access$600(ActivityThread.java:141) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.os.Handler.dispatchMessage(Handler.java:99) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.os.Looper.loop(Looper.java:137) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.ActivityThread.main(ActivityThread.java:5041) 12-31 19:55:44.653: E/AndroidRuntime(986): at java.lang.reflect.Method.invokeNative(Native Method) 12-31 19:55:44.653: E/AndroidRuntime(986): at java.lang.reflect.Method.invoke(Method.java:511) 12-31 19:55:44.653: E/AndroidRuntime(986): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-31 19:55:44.653: E/AndroidRuntime(986): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 12-31 19:55:44.653: E/AndroidRuntime(986): at dalvik.system.NativeStart.main(Native Method) 12-31 19:55:44.653: E/AndroidRuntime(986): Caused by: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS tblSymptom (symptomId INTEGER PRIMART KEY AUTOINCREMENT,name VARCHAR, details VARCHAR); 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594) 12-31 19:55:44.653: E/AndroidRuntime(986): at com.example.idiagnostician1.SymptomOpenHelper.onCreate(SymptomOpenHelper.java:30) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 12-31 19:55:44.653: E/AndroidRuntime(986): at com.example.idiagnostician1.MainActivity.onCreate(MainActivity.java:20) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.Activity.performCreate(Activity.java:5104) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 12-31 19:55:44.653: E/AndroidRuntime(986): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 12-31 19:55:44.653: E/AndroidRuntime(986): ... 11 more

最佳答案

ComponentInfo{com.example.idiagnostician1/com.example.idiagnostician1.MainActivity}: android.database.sqlite.SQLiteException: near "EXISTtblSymptom": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTtblSymptom(symptomIdINTEGER PRIMART KEY 

根据 logcat 中的此信息,您的查询 CREATE_TABLE_SYMPTOM 存在问题。您需要在 NOT EXIST 之后附加空格。示例:

"CREATE TABLE IF NOT EXIST " + TABLE_SYMPTOM ...

而不是

"CREATE TABLE IF NOT EXIST" + TABLE_SYMPTOM 

检查您的查询是否正确,您会发现您在所有查询中都犯了这个错误。在同一查询中的其他所需位置添加空格。尝试这个查询:

"CREATE TABLE IF NOT EXISTS " + TABLE_SYMPTOM + " ("+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME +" VARCHAR, " +COLUMN_DETAILS +" VARCHAR" + ");"

关于android - Helper.getWritableDatabase() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20862062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com