我阅读了很多教程,但对我来说仍然很难。 然后我复制一些到Eclipse尝试它不起作用 我检查文件探索数据库没有创建。 以下是我的代码。请帮助和谢谢。
这是数据库助手。
package com.example.trydb;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBHelper extends SQLiteOpenHelper {
public static final String TABLE_NAME = "friends";
public static final String NAME = "name";
public static final String TEL = "tel";
public static final String EMAIL = "email";
private final static String DATABASE_NAME = "demo.db";
private final static int DATABASE_VERSION = 1;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.d("Database operations","Database created ");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + NAME + "CHAR," + TEL + "CHAR," + EMAIL + "CHAR);");
Log.d("Database operations","Database created successfully");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(DROP_TABLE);
onCreate(db);
}
}
这是主要活动。
package com.example.trydb;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
private DBHelper dbhelper ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbhelper = new DBHelper(this);
dbhelper.close();
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
答案 0 :(得分:1)
尝试更改为
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ NAME + " CHAR,"
+ TEL + " CHAR,"
+ EMAIL + " CHAR"
+ ")";
db.execSQL(CREATE_TABLE);
Log.d("Database operations","Database created successfully");
}
答案 1 :(得分:0)
您需要在数据库帮助程序上调用getWritableDatabase()
或getReadableDatabase()
来实际创建数据库。仅仅实例化助手是不够的。
进一步阅读:When is SQLiteOpenHelper onCreate() / onUpgrade() run?
您可能还希望在列名称及其类型之间添加空格。
答案 2 :(得分:0)
尝试在列之间添加空格。
答案 3 :(得分:0)
来自方法docs的getWritibleDatabase();
创建和/或打开将用于读写的数据库。第一次调用它时,将打开数据库并调用onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)和/或onOpen(SQLiteDatabase)。
<强>因此... 强>
成功打开后,数据库将被缓存,因此您可以在每次需要写入数据库时调用此方法。 (确保在不再需要数据库时调用close()。)错误权限或完整磁盘等错误可能导致此方法失败,但如果问题得到解决,将来的尝试可能会成功。