【发布时间】:2014-11-21 10:34:46
【问题描述】:
我正在为我的应用程序做 SQLite 数据库部分,我需要帮助。我想清除数据库中的所有数据,但是当我实现这个方法时:
public void cleardb() {
db.execSQL("delete from" + DATABASE_TABLE);
}
它给了我这样的错误,
Error:(25, 11) error: cannot find symbol method execSQL(String)
请详细指导一下。
这是我的数据库完整代码
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class WordDatabase {
public static final String WORD_ID = "_id";
public static final String WORD_TOTRANSLATE = "to_translate";
public static final String WORD_TRANSLATED = "translated";
private static final String DATABASE_NAME = "WordHistory";
private static final String DATABASE_TABLE = "WordTable";
private static final int DATABASE_VERSION = 1;
private Database db;
private final Context cont;
private SQLiteDatabase HistoryDatabase;
public void cleardb() {
db.execSQL("delete from" + DATABASE_TABLE);
}
public static class Database extends SQLiteOpenHelper{
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
WORD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
WORD_TOTRANSLATE + " TEXT NOT NULL, " +
WORD_TRANSLATED + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public WordDatabase(Context con){
cont = con;
}
public WordDatabase open() throws Exception{
db = new Database(cont);
HistoryDatabase = db.getWritableDatabase();
return this;
}
public void close(){
db.close();
}
public void createEntry(String beforeTranslate, String afterTranslate) {
// TODO Auto-generated method stub
ContentValues content = new ContentValues();
content.put(WORD_TOTRANSLATE, beforeTranslate);
content.put(WORD_TRANSLATED, afterTranslate);
HistoryDatabase.insert(DATABASE_TABLE, null, content);
}
public String getData() {
// TODO Auto-generated method stub
String[] col = new String[]{WORD_ID, WORD_TOTRANSLATE, WORD_TRANSLATED};
Cursor curs = HistoryDatabase.query(DATABASE_TABLE, col, null, null, null, null, null);
String res = "";
int rowNum = curs.getColumnIndex(WORD_ID);
int toTranslateNum = curs.getColumnIndex(WORD_TOTRANSLATE);
int TranslatedNum = curs.getColumnIndex(WORD_TRANSLATED);
for(curs.moveToFirst(); !curs.isAfterLast(); curs.moveToNext()){
res = res + curs.getString(rowNum) + " " + curs.getString(toTranslateNum) + " " + curs.getString(TranslatedNum) + "\n";
}
return res;
}
}
监听器将数据存储到数据库中:
translate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
class runTranslation extends AsyncTask<Void,Void,Void>{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
pbTranslate.setVisibility(ProgressBar.VISIBLE);
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
output = translate();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
pbTranslate.setVisibility(ProgressBar.INVISIBLE);
tled.setText(output);
super.onPostExecute(result);
try{
String beforeTranslate = toTl.getText().toString();
String afterTranslate = output;
WordDatabase newEntry = new WordDatabase(MainActivity.this);
newEntry.open();
newEntry.createEntry(beforeTranslate, afterTranslate);
newEntry.close();
}catch(Exception e){
e.printStackTrace();
}
我在尝试@johny kumar 给出的代码后收到此错误:
11-21 20:41:38.584 27938-27938/fyp.atms.juicy.utranslator W/System.err﹕ java.lang.NullPointerException
11-21 20:41:38.584 27938-27938/fyp.atms.juicy.utranslator W/System.err﹕ at fyp.atms.juicy.utranslator.WordDatabase.close(WordDatabase.java:68)
11-21 20:41:38.584 27938-27938/fyp.atms.juicy.utranslator W/System.err﹕ at fyp.atms.juicy.utranslator.MainActivity$1$1runTranslation.onPostExecute(MainActivity.java:129)
11-21 20:41:38.584 27938-27938/fyp.atms.juicy.utranslator W/System.err﹕ at fyp.atms.juicy.utranslator.MainActivity$1$1runTranslation.onPostExecute(MainActivity.java:92)
11-21 20:41:38.584 27938-27938/fyp.atms.juicy.utranslator W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:632)
11-21 20:41:38.584 27938-27938/fyp.atms.juicy.utranslator W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177)
第 129 行:
newEntry.close();
第 92 行:
class runTranslation extends AsyncTask<Void,Void,Void>{
WordDatabase 第 68 行:(从第一块代码开始)
database.close();
【问题讨论】:
-
试试这个:db.delete(TABLE_NAME, null, null);更多检查:developer.android.com/reference/android/database/sqlite/…
-
仍然无法正常工作,但是当我尝试将 db.execSQL("delete from" + DATABASE_TABLE);在 onUpgrade 方法中,“execSQL”的颜色是正常的,所以我怀疑我是否将方法放在了错误的位置? delete 与 execSQL 的结果相同。
标签: java android sql methods exec