我的execSQL()
命令出现错误。 Eclipse说我需要在我的DBHelper
类中定义它。我该怎么做呢?我是使用SQL数据库的新手,它是命令。
这是我的课程代码;
package com.example.gymbuddy;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
public class Benchmark extends Activity {
DBHelper db = new DBHelper(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_benchmark);
}
public void onStart() {
super.onStart();
findViewById(R.id.button5).setOnClickListener(new handleButton5());
}
class handleButton5 implements OnClickListener {
public void onClick(View v) {
EditText editText1 = (EditText)findViewById(R.id.editText1);
String sWeight = editText1.getText().toString();
final double dWeight = Double.parseDouble(sWeight);
EditText editText2 = (EditText)findViewById(R.id.editText2);
String sPush = editText2.getText().toString();
final double dPush = Double.parseDouble(sPush);
EditText editText3 = (EditText)findViewById(R.id.editText3);
String sSit = editText3.getText().toString();
final double dSit = Double.parseDouble(sSit);
EditText editText4 = (EditText)findViewById(R.id.editText4);
String sPull = editText4.getText().toString();
final double dPull = Double.parseDouble(sPull);
double dBench = (((Math.floor(dWeight*.0664))*10)-10)+dPush;
double dFlies = (Math.floor(((Math.floor(dBench*.6)/10)*10)));
double dLats = ((Math.floor(dWeight*.05))*10)+dPull;
double dCurls = ((Math.ceil(((dWeight*dPull)*.025)/10))*10);
if(dCurls<20){
dCurls = 20;
}
double dClose = ((Math.floor(dBench*.065))*10);
double dRaise = 15;
double dDcurls = Math.floor(dCurls*.4);
double dDraise = 10;
double dLegExt = dWeight*.5;
double dPress = dWeight-20;
double dSquat = (Math.floor((Math.floor(dWeight/10))*.6))*10;
double dTricepExt = dDcurls+10;
double dTricepKick = dDcurls;
double dCalf = (Math.floor(dWeight*.035))*10;
double dDead = (Math.floor(dWeight*.13))*10;
int iBench = (int)dBench;
int iFlies = (int)dFlies;
int iLats = (int)dLats;
int iCurls = (int)dCurls;
int iClose = (int)dClose;
int iRaise = (int)dRaise;
int iDcurls = (int)dDcurls;
int iDraise = (int)dDraise;
int iLegExt = (int)dLegExt;
int iPress = (int)dPress;
int iSquat = (int)dSquat;
int iTricepExt = (int)dTricepExt;
int iTricepKick = (int)dTricepKick;
int iCalf = (int)dCalf;
int iDead = (int)dDead;
int iSit = (int)dSit;
db.execSQL("INSERT INTO BenchmarkData (COL_VAL)" +
"VALUES (iBench)");
TextView TextView1 = (TextView)findViewById(R.id.textView1);
TextView1.setText(String.valueOf("Bench Press "+ iBench +" lbs"));
TextView TextView2 = (TextView)findViewById(R.id.textView2);
TextView2.setText(String.valueOf("Bar Curls "+ iCurls +" lbs"));
TextView TextView3 = (TextView)findViewById(R.id.textView3);
TextView3.setText(String.valueOf("Close Grip "+ iClose +" lbs"));
TextView TextView4 = (TextView)findViewById(R.id.textView4);
TextView4.setText(String.valueOf("Deltoid Raise "+ iRaise +" lbs"));
TextView TextView5 = (TextView)findViewById(R.id.textView5);
TextView5.setText(String.valueOf("Dumbbell Curls "+ iDcurls +" lbs"));
TextView TextView6 = (TextView)findViewById(R.id.textView6);
TextView6.setText(String.valueOf("Dumbbell Raise "+ iDraise +" lbs"));
TextView TextView7 = (TextView)findViewById(R.id.textView7);
TextView7.setText(String.valueOf("Lat Pull Down "+ iLats +" lbs"));
TextView TextView8 = (TextView)findViewById(R.id.textView8);
TextView8.setText(String.valueOf("Leg Extension "+ iLegExt +" lbs"));
TextView TextView9 = (TextView)findViewById(R.id.textView9);
TextView9.setText(String.valueOf("Leg Press "+ iPress +" lbs"));
TextView TextView10 = (TextView)findViewById(R.id.textView10);
TextView10.setText(String.valueOf("Pec Flies "+ iFlies +" lbs"));
TextView TextView11 = (TextView)findViewById(R.id.textView11);
TextView11.setText(String.valueOf("Squats "+ iSquat +" lbs"));
TextView TextView12 = (TextView)findViewById(R.id.textView12);
TextView12.setText(String.valueOf("Tricep Extension "+ iTricepExt +" lbs"));
TextView TextView13 = (TextView)findViewById(R.id.textView13);
TextView13.setText(String.valueOf("Tricep Kickbacks "+ iTricepKick +" lbs"));
TextView TextView14 = (TextView)findViewById(R.id.textView14);
TextView14.setText(String.valueOf("Calf Raises "+ iCalf +" lbs"));
TextView TextView15 = (TextView)findViewById(R.id.textView15);
TextView15.setText(String.valueOf("Dead Lift "+ iDead +" lbs"));
TextView TextView16 = (TextView)findViewById(R.id.textView16);
TextView16.setText(String.valueOf("Sit Ups "+ iSit));
}
}
}
这是我的DBHelper类;
package com.example.gymbuddy;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper{
//Declaring Database and Table
protected final static String MY_DATABASE_NAME = "GymBuddy.db";
protected static final int iVersion = 1;
//Defining Table
protected static final String BenchmarkData = "dataBenchmark";
protected static final String KEY_ID = "id";
protected static final String COL_VAL = "value";
//To refer to the Database
public SQLiteDatabase db;
public DBHelper(Context context) {
super(context, MY_DATABASE_NAME, null, iVersion);
this.db = this.getWritableDatabase();
}
public void onCreate(SQLiteDatabase db) {
String CREATE_QUERY = "CREATE TABLE " + BenchmarkData + "("
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COL_VAL + " TEXT NOT NULL, " + ");";
db.execSQL(CREATE_QUERY);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
最佳答案
您的第一点困惑是BenchMark
Activity
中的以下内容...
DBHelper db = new DBHelper(this);
将
db
用作您的DBHelper
实例的名称不是一个好主意-通常db
应该直接用于数据库对象,而不是数据库助手。给它起一个更具代表性的名称,以免使助手与数据库混淆。问题的实际原因是此行(在
Activity
中)...db.execSQL("INSERT INTO BenchmarkData (COL_VAL)" +
"VALUES (iBench)");
因为
db
是DBHelper
的实例(扩展了SQLiteOpenHelper
),而execSQL(...)
是SQLiteDatabase
的方法。编辑:一种可行的快速解决方案是重命名
DBHelper
,然后获取数据库的实例,然后调用execSQL(...)
。例...// Rename db to dbh (for example) to avoid confusion
DBHelper dbh = new DBHelper(this);
...
dbh.getWritableDatabase().execSQL(...);