I am trying to create a database and a table to store my Card's details and then display it. And I created this schema
public class MyDatabaseHelper extends SQLiteOpenHelper {
private Context context;
private static String DB_NAME="CardsDetails.db";
private static final int DB_VERSION=1;
private static final String table_name="my_cards";
private static final String id="_id";
private static final String card_num="Card Number";
private static final String cvv="cvv";
private static final String year="year";
private static final String month="month";
private static final String user_name="Name on Card";
public MyDatabaseHelper(@Nullable Context context) {
super(context,DB_NAME,null,DB_VERSION);
this.context=context;
}
@Override
public void onCreate(SQLiteDatabase db) {
String query= "CREATE TABLE "+table_name+" ("+id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+"card_num"+" TEXT, "+month+" TEXT, "+year+" TEXT, "+cvv+" TEXT, "+user_name+" TEXT);";
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS "+table_name);
onCreate(db);
}
void addCard(String CardNo, String mon_, String year_, String cvv_, String name)
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(card_num,CardNo);
cv.put(month,mon_);
cv.put(year,year_);
cv.put(cvv,cvv_);
cv.put(user_name,name);
long result=db.insert(table_name,null,cv);
if(result==-1)
Toast.makeText(context,"Input Failed!",Toast.LENGTH_LONG).show();
else
Toast.makeText(context,"Card Saved Successfully",Toast.LENGTH_LONG).show();
}
}
But, I am getting some errors and Exceptions on this code which i don't understand. Here is the snippet from the log.
E/SQLiteLog: (1) near "on": syntax error
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.antas.fingerprintauth, PID: 22200
android.database.sqlite.SQLiteException: near "on": syntax error (code 1 SQLITE_ERROR): , while compiling: CREATE TABLE my_cards (_id INTEGER PRIMARY KEY AUTOINCREMENT, card_num TEXT, month TEXT, year TEXT, cvv TEXT, Name on Card TEXT);
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1850)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1773)
at com.antas.fingerprintauth.MyDatabaseHelper.onCreate(MyDatabaseHelper.java:34)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:412)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:317)
at com.antas.fingerprintauth.MyDatabaseHelper.addCard(MyDatabaseHelper.java:45)
at com.antas.fingerprintauth.AddDetails$1.onClick(AddDetails.java:60)
at android.view.View.performClick(View.java:7218)
at android.view.View.performClickInternal(View.java:7187)
at android.view.View.access$3500(View.java:817)
at android.view.View$PerformClick.run(View.java:27629)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7707)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
And here is my Activity from which i am inserting data to database.
public class AddDetails extends AppCompatActivity {
EditText card_num, cvv, yr, mo, user;
int i = 0;
Button saveBtn;
ImageButton validate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_details);
card_num = (EditText) findViewById(R.id.cardnum);
cvv = (EditText) findViewById(R.id.cvv);
yr = (EditText) findViewById(R.id.year);
mo = (EditText) findViewById(R.id.month);
saveBtn = (Button) findViewById(R.id.save);
user = (EditText) findViewById(R.id.nameCard);
validate = (ImageButton) findViewById(R.id.visibility);
card_num.requestFocus();
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
.setError("Enter Name on Card");
}
else {*/
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(AddDetails.this);
myDatabaseHelper.addCard(card_num.getText().toString().trim(), mo.getText().toString().trim(), yr.getText().toString().trim(), cvv.getText().toString().trim(), user.getText().toString().trim());
}
});
}
}
Can Someone please help me!
You're creating the sql statement using the values you defined in those constants. The value for your "name" parameter is "name on card" so when that gets substituted into your create statement you get illegal syntax since a table name cannot contain spaces.
The error is telling you when creating the database that the "username" variable you are passing is invalid.
try doing
private static final String user_name="Name_on_Card";
A Sql column cannot have spaces in the name.
Edit I would advise you to not store any sensitive data such a credit card etc. in something that is easily accessible
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.