我在创建一个创建和操作数据库的类时遇到了麻烦!但方法create ()
有问题说
“方法openOrCreateDatabase(String,int,null)未定义 类型BancoDeDados“。
有人有任何建议可以解决这个问题吗?我的代码如下:
package com.example;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class DataBase{
private SQLiteDatabase db;
private String DATABASE_NAME;
private String TABLE_NAME;
private String SQL_SELECT_ALL;
private String SQL_SELECT_ID;
private String SQL_CREATE;
public DataBase(SQLiteDatabase db,String DATABASE_NAME,String TABLE_NAME,String SQL_SELECT_ALL,String SQL_SELECT_ID,String SQL_CREATE){
this.db = db;
this.DATABASE_NAME = DATABASE_NAME;
this.TABLE_NAME = TABLE_NAME;
this.SQL_SELECT_ALL = SQL_SELECT_ALL;
this.SQL_SELECT_ID = SQL_SELECT_ID;
this.SQL_CREATE = SQL_CREATE;
}
public void create(){
this.db = openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
this.db.execSQL(this.SQL_CREATE);
this.db.close();
}
}
答案 0 :(得分:0)
SQLiteOpenHelper用于在Android中创建数据库。
扩展此类后,您需要覆盖onCreate方法。
onCreate中的db.execSQL(TABLE_CREATE);
创建数据库。
TABLE_CREATE是您的DDL字符串。
public class DbHelper extends SQLiteOpenHelper {
//The database name and version can be parameterized in the constructor.
public DbHelper(Context context, String databaseName, int databaseVersion) {
super(context, databaseName, null, databaseVersion);
}
/*
* (non-Javadoc)
*
* @see
* android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
* .SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase db) {
try {
// Create Database
db.execSQL(TABLE_CREATE);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see
* android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
* .SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase arg0, int oldVersion, int newVersion) {
}
}
答案 1 :(得分:0)
创建此class to create and manipulate database
的主要原因是repackage
以及this class EXTENDS NO need no other!
Under My class after you solve the problem '.
DataBase.java`
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DataBase{
private String DATABASE_NAME;
private int DATABASE_VERSION;
private String TABLE_NAME;
private String SQL_SELECT_ALL;
private String SQL_SELECT_ID;
private String SQL_CREATE;
public DataBase(String DATABASE_NAME,int DATABASE_VERSION,String TABLE_NAME,String SQL_SELECT_ALL,String SQL_SELECT_ID,String SQL_CREATE){
this.DATABASE_NAME = DATABASE_NAME;
this.DATABASE_VERSION = DATABASE_VERSION;
this.TABLE_NAME = TABLE_NAME;
this.SQL_SELECT_ALL = SQL_SELECT_ALL;
this.SQL_SELECT_ID = SQL_SELECT_ID;
this.SQL_CREATE = SQL_CREATE;
}
public DataBase(String DATABASE_NAME,int DATABASE_VERSION,String TABLE_NAME,String SQL_SELECT_ALL,String SQL_CREATE){
this.DATABASE_NAME = DATABASE_NAME;
this.DATABASE_VERSION = DATABASE_VERSION;
this.TABLE_NAME = TABLE_NAME;
this.SQL_SELECT_ALL = SQL_SELECT_ALL;
this.SQL_CREATE = SQL_CREATE;
}
public void onCreate(Context ctx,SQLiteDatabase db){
db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE, null);
db.execSQL(this.SQL_CREATE); //Criando tabela caso não exista!!
db.close();
}
public void onUpgrade(Context ctx,SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + this.TABLE_NAME);
// Create tables again
onCreate(ctx,db);
}
public long onWrite(Context ctx,SQLiteDatabase db,String row,ContentValues ctv){
db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
long lg = db.insert(this.TABLE_NAME,row,ctv);
db.close();
return lg;
}
public int onUpdate(Context ctx,SQLiteDatabase db,ContentValues ctv,String row,int id){
db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
int x = db.update(this.TABLE_NAME, ctv, row, new String[]{String.valueOf(id)});
db.close();
return x;
}
public Cursor onSelecAll(Context ctx,SQLiteDatabase db){
db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
Cursor cursor = db.rawQuery(this.SQL_SELECT_ALL, null);
return cursor;
}
public Cursor onSelecId(Context ctx,SQLiteDatabase db,int id){
db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
Cursor cursor = db.rawQuery(SQL_SELECT_ID, new String[]{String.valueOf(id)});
return cursor;
}
public int onDelete(Context ctx,SQLiteDatabase db,String row,int id){
db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
int x = db.delete(this.TABLE_NAME, row, new String[]{String.valueOf(id)});
db.close();
return x;
}
public void onClose(Context ctx,SQLiteDatabase db){
db = ctx.openOrCreateDatabase(this.DATABASE_NAME,Context.MODE_PRIVATE,null);
db.close();
}
}
在
Main.java
:
import android...
public class Main extends Activity {
private SQLiteDatabase db;
private Context ctx;
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "database.db";
private static final String TABLE_NAME = "table";
private static final String SQL_SELECT_ALL = "SELECT * FROM "+TABLE_NAME;
private static final String SQL_SELECT_ID = "SELECT * FROM table WHERE _id = ?";
/* SQL de criação do banco de dados. */
private static final String SQL_CREATE = "CREATE TABLE IF NOT EXISTS table(" +
"_id INTEGER PRIMARY KEY, " +
"person VARCHAR(30), "
"animal VARCHAR(30))";
BancoDeDados BD = new BancoDeDados(DATABASE_NAME,DATABASE_VERSION,TABLE_NAME,SQL_SELECT_ALL,SQL_SELECT_ID,SQL_CREATE);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ctx = getBaseContext(); //Context to use in class BancoDeDados
BD.onCreate(ctx, db); // Create BD and table if needed!!
/* .... */
}
}