This question is similar to this and this.
I have 4 columns in my database (id, name, surname, image). I only want to check if the name that is being entered already exists in "name" column.
here is my SQLiteOpenHelper:
public class SQLiteHelper extends SQLiteOpenHelper {
public SQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public void queryData(String sql){
SQLiteDatabase database = getWritableDatabase();
database.execSQL(sql);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
public void insertData(String name, String surname, byte[] image){
SQLiteDatabase database = getWritableDatabase();
String sql = "INSERT INTO STUDENTS VALUES (NULL, ?, ?, ?)";
SQLiteStatement statement = database.compileStatement(sql);
statement.clearBindings();
statement.bindString(1, name);
statement.bindString(2, surname);
statement.bindBlob(3, image);
statement.executeInsert();
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
/*public void removeSingleContact(String name, String price, byte[] image) {
SQLiteDatabase dbb = getWritableDatabase();
dbb.delete(name, surname, image);
}*/
public Cursor getData(String sql){
SQLiteDatabase database = getReadableDatabase();
return database.rawQuery(sql, null);
}
}
and this is how I add to SQlite;
public class AddEditStudent extends AppCompatActivity {
public static SQLiteHelper sqLiteHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_addedit_student);
sqLiteHelper = new SQLiteHelper(this, "StudentsDB.sqlite", null, 1);
sqLiteHelper.queryData("CREATE TABLE IF NOT EXISTS STUDENTS(Id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, surname VARCHAR, image BLOB)");
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (edtName.getText().toString().trim().length() == 0) {
Toast.makeText(getApplicationContext(), "Please provide your students name", Toast.LENGTH_SHORT).show();
} else
try {
//THIS IS WHERE I WANT TO CHECK---------
sqLiteHelper.insertData(
edtName.getText().toString().trim(),
edtPrice.getText().toString().trim(),
imageViewToByte(imageView)
);
Toast.makeText(getApplicationContext(), "Added successfully!", Toast.LENGTH_SHORT).show();
finish();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
EDIT---- Thank you for the help so far. I have 2 buttons, one for update and one for insert, the problem I am facing is how will I know what row to update without using an ID. I have a gridview that is being populated by cardviews, in the cardview there is a button to edit info, please see image.
https://i.stack.imgur.com/aFJTl.png
If I click on the exit sign I do;
holder.dit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do something
Intent editintent = new Intent(context, AddEditStudent.class);
editintent.putExtra("studentname", finalHolder.txtName.getText().toString());
editintent.putExtra("studentsurname", finalHolder.txtPrice.getText().toString());
context.startActivity(editintent);
}
});
then in AddEditStudent Class is where the insert and update is.