我已经尝试了很长时间了,我的大脑已经累了。我正在尝试通过微调器,收音机和编辑文本获取用户输入。以下是我获取所有输入的主要活动代码。
public class SQLiteActivity extends Activity implements AdapterView.OnItemSelectedListener, RadioGroup.OnCheckedChangeListener {
private String crop;
private String flowrate;
private String soil;
private String threshold;
private String limit;
SqliteHelper sqliteHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shared);
crop = "";
flowrate = "";
soil = "";
threshold="";
limit="";
Spinner spinnerZodiac = (Spinner) findViewById(R.id.spinnerZodiac);
spinnerZodiac.setOnItemSelectedListener(this);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.soil, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerZodiac.setAdapter(adapter);
RadioGroup radioGroupGender = (RadioGroup) findViewById(R.id.radioGroupFlowrate);
radioGroupGender.setOnCheckedChangeListener(this);
sqliteHelper = new SqliteHelper(this);
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
int radioButtonId = radioGroup.getCheckedRadioButtonId();
RadioButton radioButton = (RadioButton)radioGroup.findViewById(radioButtonId);
flowrate = radioButton.getText().toString();
}
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
soil = parent.getItemAtPosition(position).toString();
}
public void onNothingSelected(AdapterView<?> parent) {
// An interface callback
}
public void save(View view) {
crop = ((EditText)findViewById(R.id.txtCrop)).getText().toString();
threshold = ((EditText)findViewById(R.id.txtThreshold)).getText().toString().trim();
limit= ((EditText)findViewById(R.id.txtLimit)).getText().toString().trim();
if (crop.isEmpty()){
Toast.makeText(getApplicationContext(), "Crop type cannot be empty!", Toast.LENGTH_LONG).show();
return;
}
boolean result = sqliteHelper.saveUser(crop, flowrate, soil,threshold,limit);
if (result){
Toast.makeText(getApplicationContext(), "You have been saved!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Failed to save!", Toast.LENGTH_LONG).show();
}
}
public void retrieve(View view) {
crop = ((EditText)findViewById(R.id.txtCrop)).getText().toString();
Cursor cursor = sqliteHelper.getUser(crop);
if (cursor.getCount() != 0) {
cursor.moveToFirst();
crop = cursor.getString(cursor.getColumnIndex("crop"));
flowrate= cursor.getString(cursor.getColumnIndex("flowrate"));
soil = cursor.getString(cursor.getColumnIndex("soil"));
threshold=cursor.getString(cursor.getColumnIndex("threshold"));
limit=cursor.getString(cursor.getColumnIndex("limit"));
if (!cursor.isClosed()) {
cursor.close();
}
setUI();
}
}
protected void setUI(){
((TextView)findViewById(R.id.txtCrop)).setText(crop);
if (flowrate.equals("50")){
((RadioButton)findViewById(R.id.radMale)).setChecked(true);
} else if (flowrate.equals("60")){
((RadioButton)findViewById(R.id.radFemale)).setChecked(true);
}
Resources resource = getResources();
String[] zodiacArray = resource.getStringArray(R.array.soil);
for(int i = 0; i < zodiacArray.length; i++){
if(zodiacArray[i].equals(soil)){
((Spinner)findViewById(R.id.spinnerZodiac)).setSelection(i);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.sqlite, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
以下是在sqlite数据库中保存输入的详细信息的功能(sqlitehelper类)
public boolean saveDetail(String crop, String flowrate,String soil,String threshold,String limit)
{
Cursor cursor = getUser(crop);
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("flowrate", flowrate);
contentValues.put("soil", soil);
contentValues.put("threshold", threshold);
contentValues.put("limit", limit);
long result;
if (cursor.getCount() == 0) {
contentValues.put("crop", crop);
result = db.insert("configuration", null, contentValues);
} else {
result = db.update("configuration", contentValues, "crop=?", new String[] { crop });
}
if (result == -1) {
return false;
} else {
return true;
}
}
public Cursor getDetail(String crop){
SQLiteDatabase db = this.getReadableDatabase();
String sql = "SELECT * FROM configuration WHERE crop=?";
return db.rawQuery(sql, new String[] { crop } );
}
执行它时会抛出异常
Error inserting crop=tea threshold=10 soil=Alluvial limit=20 flowrate=15
android.database.sqlite.SQLiteException: near "limit": syntax error (code 1): , while compiling: INSERT INTO configuration(crop,threshold,soil,limit,flowrate) VALUES (?,?,?,?,?)
非常感谢您的回答。我将变量名称更改为绑定,现在它没有显示该错误。但我得到了另一个。
Error inserting crop=un threshold=11 bound=111 soil=Alluvial flowrate=50
android.database.sqlite.SQLiteException: table configuration has no column named threshold (code 1): , while compiling: INSERT INTO configuration(crop,threshold,bound,soil,flowrate) VALUES (?,?,?,?,?)
答案 0 :(得分:0)
Limit
是一个保留的SQL字,尝试更改它,它应该运行良好。
如果您不想更改它,可以使用:
`"Limit"`
`[Limit]`
`Limit`
答案 1 :(得分:0)
您不能在sqlite中使用“LIMIT”作为列名来获取更多信息,请访问http://www.sqlite.org/lang_keywords.html
答案 2 :(得分:0)
Looking to your query and your Exception message, "limit" is an SQLite keyword used to limit the data amount returned by the SELECT statement. That is why you are getting an Exception. It is making conflict with your column name. Change the column name to mylimit, for example, and it will work
And the second Error may be you added columns name "crop" later in the database. you can fix it by changing database_version
答案 3 :(得分:0)
1.Limit is a keyword in SQLite.That is why I got the above error.Change the variable name to something else. 2.I created the table at first with only 3 columns.But then I added 2 columns.In such cases you might have to do a clear data so the data base can be created again. The procedure to create only happens on the first execution and it can get updates if the database version has changed, which goes to the onUpgrade method.Read Saeed's comment below Go Here