如何在android中创建SQLite数据库

Posted

技术标签:

【中文标题】如何在android中创建SQLite数据库【英文标题】:How to create SQLite database in android 【发布时间】:2016-05-01 19:21:58 【问题描述】:

我创建了一个 Databasehelper.java 类,在该类中我调用了 SQLite 数据库类并实现了它的所有方法,并且在我调用这个类实例和运行应用程序时在主类中显示“不幸的是您的应用已停止”

这是代码

package com.example.android.viewpager1;

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

/**
 * Created by Vikas on 5/1/2016.
 */
public class Databasehelper extends SQLiteOpenHelper

public static final String DATABASE_NAME="Answers.db";
    public static final String TABLE_NAME="answers_table";
    public static final String COL_1="QUESTION_NO";
    public static final String COL_2="QUESTION_ANS";



    public Databasehelper(Context context)
    
        super(context,DATABASE_NAME,null,1);
        SQLiteDatabase db= this.getWritableDatabase();
    
    @Override
    public void onCreate(SQLiteDatabase db)
    
    db.execSQL("create table" + TABLE_NAME+"(QUESTION_NO INTEGER PRIMARY KEY AUTOINCREMENT,QUESTION_ANS VARCHAR);");
    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    
      db.execSQL("DROP TABLE IF EXISTS"+TABLE_NAME);
      onCreate(db);
    

这是 mainactivity.java

package com.example.android.viewpager1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.RadioButton;

import java.util.List;
import java.util.Vector;

public class MainActivity extends FragmentActivity

    Databasehelper mydb;

    private PagerAdapter mPagerAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewpager_layout);
        initialisePaging();
        mydb=new Databasehelper(this);//here I am making DB 

    

这里我正在创建数据库,但它没有运行,我也知道在主线程或 UI 线程上我们不应该创建数据库或网络对象,我们应该使用 AsynTask 类,但任何人都可以告诉如何使用它或任何其他解决方案 logcat 是

05-02 01:34:29.710 32328-32328/com.example.android.viewpager1 E/AndroidRuntime: 致命异常: main java.lang.RuntimeException:无法启动活动 ComponentInfocom.example.android.viewpager1/com.example.android.viewpager1.MainActivity:android.database.sqlite.SQLiteException:靠近“TABLEanswers_table”:语法错误(代码 1) : , 编译时: CREATE TABLEanswers_table (QUESTION_NO INTEGER PRIMARY KEY AUTOINCREMENT,QUESTION_ANS VARCHAR); 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2141) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2166) 在 android.app.ActivityThread.access$700(ActivityThread.java:141) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1221) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5019) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:574) 在 dalvik.system.NativeStart.main(本机方法) 引起:android.database.sqlite.SQLiteException:靠近“TABLEanswers_table”:语法错误(代码1):,编译时:CREATE TABLEanswers_table(QUESTION_NO INTEGER PRIMARY KEY AUTOINCREMENT,QUESTION_ANS VARCHAR); 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法) 在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在 android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 在 android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) 在 android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663) 在 android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594) 在 com.example.android.viewpager1.Databasehelper.onCreate(Databasehelper.java:27) 在 android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 在 android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 在 com.example.android.viewpager1.Databasehelper.(Databasehelper.java:22) 在 com.example.android.viewpager1.MainActivity.onCreate(MainActivity.java:24) 在 android.app.Activity.performCreate(Activity.java:5056) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2099) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2166) 在 android.app.ActivityThread.access$700(ActivityThread.java:141) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1221) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5019) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:574) 在 dalvik.system.NativeStart.main(本机方法)

【问题讨论】:

为什么要在您的应用程序中创建数据库?使用您的应用部署预先创建的数据库。 我只能使用 SQLite DB 我只使用了 Sqlite DB,它仅由 android 提供 您可以创建一个 SQLite DB 并将其与您的应用一起部署,方法是将其放在您的 android 项目的 ASSETS 文件夹中 @VikasKumar 尝试阅读 logcat 它指出了有价值的调试信息 【参考方案1】:

我会指出您的代码中存在一些语法问题,但修复它们并不能保证您的应用程序可以正常工作,您仍然需要阅读 Logcat 以获取更多信息:

1-db.execSQL("create table " + TABLE_NAME+" ("+ COL_1 +" INTEGER PRIMARY KEY AUTOINCREMENT, "+COL_2+" VARCHAR);");

(注意“table”之后和“(”之前添加的空格,并且还使用列常量而不是硬编码字符串)

2-db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);

(注意EXISTS后添加的空格)

【讨论】:

【参考方案2】:

您忘记在“TABLE_NAME”和“(”之间留出空格。请参阅更新后的代码。如有任何疑问,请告诉我。

public void onCreate(SQLiteDatabase db)
    
    db.execSQL("create table" + TABLE_NAME+" ( _id INTEGER PRIMARY KEY AUTOINCREMENT,QUESTION_NO INTEGER  AUTOINCREMENT,QUESTION_ANS VARCHAR);");
    

【讨论】:

没有解决问题还是没有运行

以上是关于如何在android中创建SQLite数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在android自带的sqlite3中创建一个数据库文件,请大虾门详细指导

如何在 Android 应用程序的 SQLite 中创建排序规则?

Ionic - 在 android 的不同目录中创建 SQLite 数据库

在 Android 的 SQLite 中创建数据库的问题

在 Android 上的 SQLite 中创建多个表

如何在 Qt SQLite 中创建多个连接?