Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLite数据库未创建_Java_Android_Sqlite_Android Sqlite - Fatal编程技术网

Java SQLite数据库未创建

Java SQLite数据库未创建,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,未创建SQLite数据库。 我使用了一个方法getwritabledatabase()在主类中,但只有日志显示“调用构造函数”,然后关闭应用程序 这是我的密码 table extends SQLiteOpenHelper class import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; impo

未创建SQLite数据库。
我使用了一个方法
getwritabledatabase()在主类中,但只有日志显示“调用构造函数”,然后关闭应用程序

这是我的密码

table extends SQLiteOpenHelper class

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

import java.sql.SQLDataException;
import java.sql.SQLException;

public class Table extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "Hammas's Database";
private static final String TABLE_NAME = "Hammas's Table";
private static final int DATABASE_VERSION = 1;
private static final String ID = "_id";
private static final String COLNAME = "Names";
private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLNAME+" VARCHAR(255));";
private static final String DROP_TABLE = "DROP TABLE IF EXIST "+TABLE_NAME+"";
private static final String TAG = "Hammas";
private Context context;
public Table(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.context = context;
    Message.message(context,"Constructor is called");
    Log.i(TAG,"CONSTRUCTOR IS CALLED");
}

@Override
public void onCreate(SQLiteDatabase db)  {

      db.execSQL(CREATE_TABLE);
      Message.message(context, "onCreate is called");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL(DROP_TABLE);
    onCreate(db);
    Message.message(context,"onUpgrade is called");
}
}
Message类仅用于toast。
这是主课

enter code here

public class MainActivity extends ActionBarActivity {
Table table;

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

    table = new Table(this);
    SQLiteDatabase sql=  table.getReadableDatabase();


}

检查文件系统以确保:

//data/data/<Your-Application-Package-Name>/databases/Hammas's Database.db
//data/data//databases/Hammas's Database.db

是在那里创建和定位的。如果该字符串已经存在,则不会再次创建。

无法按原样处理该字符串

private static final String TABLE_NAME = "Hammas's Table";
它需要根据需要进行修改

private static final String TABLE_NAME = "[Hammas''s Table]";
因为

  • 撇号是字符串分隔符,因此必须加倍
  • 空格将打断表名,因此需要将其括在方括号中(
    []
列名也是如此。

若要在字符串值中插入撇号,它也必须加倍。

如果数据库文件已经存在,
onCreate()
将不再被调用。如果您有“强制关闭”,请发布异常stacktrace。您可以浏览文件系统并查看.db是否存在。它应该是://data/data//databases,不能用作表名。为什么在表/数据库名中使用单引号和空格?是的,这是唯一的问题。您节省了我的大量时间。现在您可以接受我的回答,以便从未回答的问题队列中删除此帖子。