我尝试了很多修复,但仍然无法找出无法插入数据的原因。我使用了一个名为BD Browser for SQLite的工具来检查数据,并且有表和列但没有值..
代码:
public class MainActivity extends Activity {
private Button btnadd,btnselect;
private EditText etmiles,etdate,etcosts,etprice;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnadd=(Button)findViewById(R.id.add);
btnselect=(Button)findViewById(R.id.select);
etmiles=(EditText)findViewById(R.id.miles);
etdate=(EditText)findViewById(R.id.date);
etprice=(EditText)findViewById(R.id.price);
etcosts=(EditText)findViewById(R.id.costs);
db=SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString() + "/my.db3", null);
btnselect.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent=new Intent(MainActivity.this,Activity02.class);
startActivity(intent);
}
});
btnadd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String amiles=etmiles.getText().toString();
String sdate=etdate.getText().toString();
String sprice=etprice.getText().toString();
String acosts=etcosts.getText().toString();
if(etmiles.getText().toString().length() == 0||etdate.getText().toString().length() == 0||etprice.getText().toString().length() == 0||etcosts.getText().toString().length() == 0)
{
Toast toast=Toast.makeText(MainActivity.this, "xxxx", Toast.LENGTH_SHORT);
toast.show();
return;
}
else
{
try{
db.execSQL("insert into test1('" + sdate + "','" + amiles + "','" + sprice + "','" + acosts + "')");
}
catch(SQLiteException e)
{
db.execSQL("create table if not exists test1(sdate varchar(40) primary key,amiles varchar(30),sprice varchar(30),acosts varchar(30))");
}
Toast toast=Toast.makeText(MainActivity.this, "xxxx", Toast.LENGTH_SHORT);
toast.show();
}
}
});
}
}
错误消息:附近")":语法错误
答案 0 :(得分:1)
您的INSERT
语句似乎与SQLite的语法不匹配。尝试添加VALUES
,如下所示:
INSERT INTO test1 VALUES (..., ..., ...)
事实上,在Android上你应该考虑使用insert()方法。
答案 1 :(得分:1)
你应该使用insert(String table, String nullColumnHack, ContentValues values)
其中table是要插入的表的名称,nullColumnHack
它是可选的,可以为null,值是包含我们要插入的值的映射。此映射的关键是列名称。 E.g。
ContentValues values = new ContentValues();
values.put(HISTORY_ORDER_ID_COL, orderId);
values.put(HISTORY_PRODUCT_ID_COL, productId);
long rowId = db.insert(TABLE_ORDER, null, values);
android将负责为您编写插入查询。