Sqlite Constraint Exception error - java
I have worked newly in a app which uses Sqlite Db to retreive and save datas. I have finished the entire project. My app works perfectly for first log in. When i log in using different user id, it throws sqlite constraint exception. My Db field remains the same where as i have used userid as unique element to fetch values for the user.
How to overcome this exception? Else i need to change entire table structure?
#Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + Table_variables + "(id INTEGER PRIMARY KEY ,var1 text, var2 text, var3 text, var4 text, var5 text, var6 text, var7 text, var8 text, var9 text, var10 text, userid text )");
db.execSQL("CREATE TABLE " + Table_values + "(id INTEGER PRIMARY KEY , val1 text, val2 text, val3 text, val4 text, val5 text, val6 text, val7 text, val8 text, val9 text, val10 text ,userid text )");
db.execSQL("CREATE TABLE " + Table_ListId + "(id INTEGER PRIMARY KEY , val1 text, val2 text, val3 text, val4 text, val5 text, val6 text, val7 text, val8 text, val9 text, val10 text,userid text )");
db.execSQL("CREATE TABLE " + Table_PaymentOptions + "(id INTEGER PRIMARY KEY, var1 text, var2 text, var3 text, var4 text, var5 text, var6 text, var7 text, var8 text , userid text, randomID text)");
db.execSQL("CREATE TABLE " + Table_PaymentRemider + "(id INTEGER PRIMARY KEY, plc text, agencyname text,amountDue text, datedue text, reminderNotes text, reminderDate text, reminderTime text, toggleOption text, userid text, uniqueID text)");
}
// TODO TO INSERT REGION DATA
public boolean insertData(Context context, ArrayList list, ArrayList list1, ArrayList list2, String plcData, String agencyName, String userid) {
SQLiteDatabase myDB = getWritableDatabase("my_paygov_secure_key");
System.out.println("AGENCY_NAME_in DBHANDLER" + agencyName);
if (list.size() == 0) {
} else {
for (int i = 0; i < list.size(); i++) {
System.out.println("LIST-label and List-Edittext" + list.get(i));
}
boolean dbCheck = CheckIsDataAlreadyInDBorNot(Table_variables, "id", plcData, "userid", userid);
if (dbCheck) {
String query = "UPDATE " + Table_variables + " SET var2='" + list.get(0) + "',var3='" + list.get(1) + "',var4='" + list.get(2) + "',var5='" + list.get(3) + "',var6='" + list.get(4) + "',var7='" + list.get(5) + "',var8='" + list.get(6) + "',var9='" + list.get(7) + "',var10='" + list.get(8) + "' WHERE id =' " + plcData + " ' and userid='" + userid + "'";
String query1 = "UPDATE " + Table_values + " SET val2='" + list1.get(0) + "',val3='" + list1.get(1) + "',val4='" + list1.get(2) + "',val5='" + list1.get(3) + "',val6='" + list1.get(4) + "',val7='" + list1.get(5) + "',val8='" + list1.get(6) + "',val9='" + list1.get(7) + "',val10='" + list1.get(8) + "' WHERE id =' " + plcData + " ' and userid='" + userid + "'";
String query2 = "UPDATE " + Table_ListId + " SET val2='" + list2.get(0) + "',val3='" + list2.get(1) + "',val4='" + list2.get(2) + "',val5='" + list2.get(3) + "',val6='" + list2.get(4) + "',val7='" + list2.get(5) + "',val8='" + list2.get(6) + "',val9='" + list2.get(7) + "',val10='" + list2.get(8) + "' WHERE id =' " + plcData + " ' and userid='" + userid + "'";
myDB.execSQL(query);
myDB.execSQL(query1);
myDB.execSQL(query2);
} else {
String query = "INSERT INTO " + Table_variables + " VALUES('" + plcData + "', '" + agencyName + "','" + list.get(0) + "','" + list.get(1) + "','" + list.get(2) + "','" + list.get(3) + "','" + list.get(4) + "','" + list.get(5) + "','" + list.get(6) + "','" + list.get(7) + "','" + list.get(8) + "','" + userid + "');";
String query1 = "INSERT INTO " + Table_values + " VALUES('" + plcData + "','" + agencyName + "','" + list1.get(0) + "','" + list1.get(1) + "','" + list1.get(2) + "','" + list1.get(3) + "','" + list1.get(4) + "','" + list1.get(5) + "','" + list1.get(6) + "','" + list1.get(7) + "','" + list1.get(8) + "','" + userid + "');";
String query2 = "INSERT INTO " + Table_ListId + " VALUES('" + plcData + "','" + agencyName + "','" + list2.get(0) + "','" + list2.get(1) + "','" + list2.get(2) + "','" + list2.get(3) + "','" + list2.get(4) + "','" + list2.get(5) + "','" + list2.get(6) + "','" + list2.get(7) + "','" + list2.get(8) + "','" + userid + "');";
myDB.execSQL(query);
myDB.execSQL(query1);
myDB.execSQL(query2);
}
return true;
}
return false;
}
// TODO TO INSERT CARD DETAILS
public boolean insertCardDetails(Context context, ArrayList list, String cardNumber, String userid, String randomID) {
SQLiteDatabase myDB = getWritableDatabase("my_paygov_secure_key");
// Integer i = Integer.parseInt(cardNumber);
long card = Long.valueOf(cardNumber).longValue();
int ccnumber = (int) card;
/* for (int i = 0; i < list.size(); i++) {
System.out.println("LIST VALUE" + i + list.get(i).toString());
}*/
boolean dbCheck = CheckIsDataAlreadyInDBorNot(Table_PaymentOptions, "randomID", randomID, "userid", userid);
if (dbCheck) {
String query = "UPDATE " + Table_PaymentOptions + " SET var1='" + list.get(0) + "',var2='" + list.get(1) + "',var3='" + list.get(2) + "',var4='" + list.get(3) + "',var5='" + list.get(4) + "',var6='" + list.get(5) + "',var7='" + list.get(6) + "',var8='" + list.get(7) + "' WHERE randomID ='" + randomID + "' and userid='" + userid + "'";
} else {
String query = "INSERT INTO " + Table_PaymentOptions + " VALUES('" + ccnumber + "', '" + list.get(0) + "','" + list.get(1) + "','" + list.get(2) + "','" + list.get(3) + "','" + list.get(4) + "','" + list.get(5) + "','" + list.get(6) + "','" + list.get(7) + "','" + userid + "', '" + randomID + "');";
myDB.execSQL(query);
}
return false;
}
// TO INSERT DATA FOR REMINDER
public boolean myPaymentReminder(Context context, ArrayList list, int plcData, String userid) {
SQLiteDatabase myDB = getWritableDatabase("my_paygov_secure_key");
boolean dbCheck = CheckIsDataAlreadyInDBorNot(Table_PaymentRemider, "id", String.valueOf(plcData), "userid", userid);
if (dbCheck) {
String query = "UPDATE " + Table_PaymentRemider + " SET agencyname='" + list.get(1) + "',amountDue='" + list.get(2) + "',dateDue='" + list.get(3) + "',reminderNotes='" + list.get(4) + "',reminderDate='" + list.get(5) + "',reminderTime='" + list.get(6) + "',toggleOption='" + list.get(7) + "', uniqueID='" + list.get(8) + "' WHERE id ='" + plcData + "' and userid = '" + userid + "'";
myDB.execSQL(query);
} else {
String query = "INSERT INTO " + Table_PaymentRemider + " VALUES('" + plcData + "', '" + list.get(0) + "','" + list.get(1) + "','" + list.get(2) + "','" + list.get(3) + "','" + list.get(4) + "','" + list.get(5) + "','" + list.get(6) + "','" + list.get(7) + "','" + userid + "','" + list.get(8) + "');";
myDB.execSQL(query);
}
System.out.println("PlcData" + plcData);
return true;
}
// TODO TO CHECK TABLE IS ALREADY PRESENT OR NOT
public boolean CheckIsDataAlreadyInDBorNot(String TableName,
String dbfield, String fieldValue, String dbfield1, String field1) {
SQLiteDatabase myDB = getWritableDatabase("my_paygov_secure_key");
String Query = "Select * from " + TableName + " where " + dbfield + " = " + fieldValue + " and " + dbfield1 + " = '" + field1 + "'";
System.out.println("Check User id DB" + Query);
Cursor cursor = myDB.rawQuery(Query, null);
if (cursor.getCount() <= 0) {
cursor.close();
return false;
}
cursor.close();
return true;
}
THE EXCEPTION THAT I GET IN LOGCAT !
net.sqlcipher.database.SQLiteConstraintException: UNIQUE constraint failed: PLC_DETAILS_TABLE_VARIABLES.id: INSERT INTO PLC_DETAILS_TABLE_VARIABLES VALUES('36400', 'Indiana-Dearborn County-Environmental Health','Name','Dearborn Enviro','','','','','','','','1e2332d3-cc60-48eb-bca0-8499097411bc');
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + Table_variables + "(id INTEGER PRIMARY KEY ,var1 text, var2 text, var3 text, var4 text, var5 text, var6 text, var7 text, var8 text, var9 text, var10 text, userid text )");
db.execSQL("CREATE TABLE " + Table_values + "(id INTEGER PRIMARY KEY , val1 text, val2 text, val3 text, val4 text, val5 text, val6 text, val7 text, val8 text, val9 text, val10 text ,userid text )");
db.execSQL("CREATE TABLE " + Table_ListId + "(id INTEGER PRIMARY KEY , val1 text, val2 text, val3 text, val4 text, val5 text, val6 text, val7 text, val8 text, val9 text, val10 text,userid text )");
db.execSQL("CREATE TABLE " + Table_PaymentOptions + "(id INTEGER PRIMARY KEY, var1 text, var2 text, var3 text, var4 text, var5 text, var6 text, var7 text, var8 text , userid text, randomID text)");
db.execSQL("CREATE TABLE " + Table_PaymentRemider + "(id INTEGER PRIMARY KEY, plc text, agencyname text,amountDue text, datedue text, reminderNotes text, reminderDate text, reminderTime text, toggleOption text, userid text, uniqueID text)");
}
You have id as primary key. You get the unique constraint error when you insert a duplicate value in the table. Implement a method to check for duplicate IDs or surround execSQL("INSERT ...") with a try-catch block, either should work. The second way:
String query = "INSERT INTO " + Table_variables + " VALUES('" + plcData + "', '" + agencyName + "','" + list.get(0) + "','" + list.get(1) + "','" + list.get(2) + "','" + list.get(3) + "','" + list.get(4) + "','" + list.get(5) + "','" + list.get(6) + "','" + list.get(7) + "','" + list.get(8) + "','" + userid + "');";
String query1 = "INSERT INTO " + Table_values + " VALUES('" + plcData + "','" + agencyName + "','" + list1.get(0) + "','" + list1.get(1) + "','" + list1.get(2) + "','" + list1.get(3) + "','" + list1.get(4) + "','" + list1.get(5) + "','" + list1.get(6) + "','" + list1.get(7) + "','" + list1.get(8) + "','" + userid + "');";
String query2 = "INSERT INTO " + Table_ListId + " VALUES('" + plcData + "','" + agencyName + "','" + list2.get(0) + "','" + list2.get(1) + "','" + list2.get(2) + "','" + list2.get(3) + "','" + list2.get(4) + "','" + list2.get(5) + "','" + list2.get(6) + "','" + list2.get(7) + "','" + list2.get(8) + "','" + userid + "');";
try {
myDB.execSQL(query);
myDB.execSQL(query1);
myDB.execSQL(query2);
} catch(SQLException se) {
//do stuff when you catch a duplicate ID
}
Related
java.lang.IllegalArgumentException: column 'foo' does not exist android
Numerous StackOverflow problems are similar, but it is not an issue of incorrect spacing in the query string. I have two tables, one for peers and one for messages, which has foreign keys associated with ids in the peer table. Here are my creation strings: private static final String DATABASE_CREATE = "CREATE TABLE " + PEER_TABLE + " (" + PeerContract._ID + " INTEGER PRIMARY KEY, " + PeerContract.NAME + " TEXT NOT NULL, " + PeerContract.ADDRESS + " TEXT NOT NULL, " + PeerContract.PORT + " TEXT NOT NULL);"; private static final String MESSAGE_TABLE_CREATE = "CREATE TABLE " + MESSAGE_TABLE + " (" + MessageContract._ID + " INTEGER PRIMARY KEY, " + MessageContract.MESSAGE_TEXT + " TEXT NOT NULL, " + MessageContract.SENDER + " TEXT NOT NULL, " + MessageContract.PEER_FOREIGN_KEY + " INTEGER NOT NULL, " + "FOREIGN KEY ("+ MessageContract.PEER_FOREIGN_KEY+") " + "REFERENCES "+PEER_TABLE+"("+PeerContract._ID+") ON DELETE CASCADE);"; private static final String CREATE_INDEX = "CREATE INDEX " + INDEX + " ON " + MESSAGE_TABLE + "(" + MessageContract.PEER_FOREIGN_KEY + ");"; I want to query a list of all received messages so I did this: public Cursor fetchAllMessages(){ String query = "SELECT " + MESSAGE_TABLE + "." + MessageContract._ID + ", " + MessageContract.MESSAGE_TEXT + ", " + MessageContract.SENDER + " FROM " + MESSAGE_TABLE + " JOIN " + PEER_TABLE + " ON " + MESSAGE_TABLE + "." + MessageContract.PEER_FOREIGN_KEY + "=" + PEER_TABLE + "." + PeerContract._ID; return db.rawQuery(query, null); } Which makes sense to me. And the spacing so far is alright there is no errors. In my main activity I have a SimpleCursorAdapter: listView = (ListView) findViewById(R.id.msgList); dbAdapter = new ServerDbAdapter(this); dbAdapter.open(); String[] from = new String[] {PeerContract.NAME, MessageContract.MESSAGE_TEXT}; int[] to = new int[] {android.R.id.text1, android.R.id.text2}; cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, from, to); listView.setAdapter(cursorAdapter); cursor = dbAdapter.fetchAllMessages(); cursorAdapter.swapCursor(cursor); I get "column 'name' does not exist" and it is driving me crazy! I properly defined it in DATABASE_CREATE as PeerContract.NAME. I'm guessing its happening because of fetchAllMessages but I am not sure how to fix it.
You are not selecting the PeerContract.NAME, MessageContract.MESSAGE_TEXT in your fetchAllMessages() method. Change it to this: public Cursor fetchAllMessages(){ String query = "SELECT " + MESSAGE_TABLE + "." + MessageContract._ID + ", " + MessageContract.MESSAGE_TEXT + ", " + PeerContract.NAME + ", " + PeerContract.MESSAGE_TEXT + ", " + MessageContract.SENDER + " FROM " + MESSAGE_TABLE + " JOIN " + PEER_TABLE + " ON " + MESSAGE_TABLE + "." + MessageContract.PEER_FOREIGN_KEY + "=" + PEER_TABLE + "." + PeerContract._ID; return db.rawQuery(query, null); }
Android: SQLite says a column doesn't exist
I am trying to get all the values in a table that have column _parentbook set to a certain value. When I try to retrieve the entries I get the error shown below. E/SQLiteLog: (1) table recipes has no column named _parentbook E/SQLiteDatabase: Error inserting _parentbook=Test _recipemethod=Stir in pot for 20 mins _recipeingredients=No bugs, freedom _recipedescription=Test recipe _recipename=Recipe 1 in Test _recipenotes=Do on Android Studio The error refers to the method below that I use to add a recipe to the database public void addRecipe(Recipe recipe) { ContentValues values = new ContentValues(); values.put(COLUMN_RECIPE_NAME, recipe.getRecipeTitle()); values.put(COLUMN_RECIPE_DESCRIPTION, recipe.getRecipeDescription()); values.put(COLUMN_RECIPE_INGREDIENTS, recipe.getIngredients()); values.put(COLUMN_RECIPE_METHOD, recipe.getMethod()); values.put(COLUMN_RECIPE_NOTES, recipe.getNotes()); //values.put(COLUMN_IMAGE_ID, recipe.getImageId()); values.put(COLUMN_PARENT_BOOK, recipe.getParentBook()); SQLiteDatabase db = this.getWritableDatabase(); db.insert(TABLE_RECIPES, null, values); db.close(); } Code used to initialise TABLE_RECIPES: String CREATE_TABLE_RECIPES = "CREATE TABLE IF NOT EXISTS " + TABLE_RECIPES + " (" + COLUMN_ID_2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_RECIPE_NAME + " TEXT, " + COLUMN_RECIPE_DESCRIPTION + " TEXT, " + COLUMN_RECIPE_INGREDIENTS + " TEXT, " + COLUMN_RECIPE_METHOD + " TEXT, " + COLUMN_RECIPE_NOTES + " TEXT, " + COLUMN_IMAGE_ID + " INTEGER " + COLUMN_PARENT_BOOK + " TEXT" + ");"; #Override public void onCreate(SQLiteDatabase db) { Log.e(TAG, "OnCreate() called"); db.execSQL(CREATE_TABLE_RECIPES); } Method for getting the recipes from the table: List<Recipe> recipes; public List<Recipe> getRecipes(String bookName) { recipes = new ArrayList<>(); SQLiteDatabase db = getWritableDatabase(); //String query = "SELECT "+ COLUMN_PARENT_BOOK +" FROM " + TABLE_RECIPES + " WHERE " + COLUMN_PARENT_BOOK + "=" + bookName; String query = "SELECT * FROM " + TABLE_RECIPES;// + " WHERE 1"; // Cursor going to point to a location in the results Cursor c = db.rawQuery(query, null); // Move it to the first row of your results c.moveToFirst(); if (c.moveToFirst()) { do { if (c.getString(c.getColumnIndex(COLUMN_RECIPE_NAME)) != null) { recipes.add(new Recipe( c.getString(c.getColumnIndex(COLUMN_RECIPE_NAME)), c.getString(c.getColumnIndex(COLUMN_RECIPE_DESCRIPTION)), c.getString(c.getColumnIndex(COLUMN_RECIPE_INGREDIENTS)), c.getString(c.getColumnIndex(COLUMN_RECIPE_METHOD)), c.getString(c.getColumnIndex(COLUMN_RECIPE_NOTES)), // Add image here if required c.getString(c.getColumnIndex(COLUMN_PARENT_BOOK)) )); } } while (c.moveToNext()); } db.close(); //c.close(); return recipes; } I have tried upgrading the database version and looking at other similar questions on StackOverflow, neither helped. Thanks.
You forgot to put comma(,) in create table statement. Instead of String CREATE_TABLE_RECIPES = "CREATE TABLE IF NOT EXISTS " + TABLE_RECIPES + " (" + COLUMN_ID_2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_RECIPE_NAME + " TEXT, " + COLUMN_RECIPE_DESCRIPTION + " TEXT, " + COLUMN_RECIPE_INGREDIENTS + " TEXT, " + COLUMN_RECIPE_METHOD + " TEXT, " + COLUMN_RECIPE_NOTES + " TEXT, " + COLUMN_IMAGE_ID + " INTEGER " + COLUMN_PARENT_BOOK + " TEXT" + ");"; It should be String CREATE_TABLE_RECIPES = "CREATE TABLE IF NOT EXISTS " + TABLE_RECIPES + " (" + COLUMN_ID_2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_RECIPE_NAME + " TEXT, " + COLUMN_RECIPE_DESCRIPTION + " TEXT, " + COLUMN_RECIPE_INGREDIENTS + " TEXT, " + COLUMN_RECIPE_METHOD + " TEXT, " + COLUMN_RECIPE_NOTES + " TEXT, " + COLUMN_IMAGE_ID + " INTEGER, " + // Here you forgot to put comma(,) in this line COLUMN_PARENT_BOOK + " TEXT" + ");";
How to use int and increase it's value in different code lines
I have to initialize a sqlite database that have a structure like this: Table: Family Table: SubFamily Table: Product One family can have more than one subfamily and and the same for subfamilies with products. So what i'm doing is: int index_family = 1; int index_subfamily = 1; int index_product = 1; //Productos Familia Pavimentos sqlDB.execSQL("INSERT INTO Family VALUES (" + index_family + ",'" + R.string.f1_pavimentos + "','" + R.string.f0_descripcion + "','" + R.drawable.color_pavimento + "');"); sqlDB.execSQL("INSERT INTO SubFamily VALUES (" + index_subfamily + "," + index_family + ",'" + R.string.f1s1_nivelantes + "','" + R.string.f0_descripcion + "','" + R.drawable.nivelante80 + "');"); sqlDB.execSQL("INSERT INTO Product VALUES (" + index_product + "," + index_subfamily + ",'" + R.string.f1s1p1_ni10 + "','" + R.string.f0_descripcion + "','" + R.drawable.nivelante80 + "','" + url + "');"); sqlDB.execSQL("INSERT INTO Product VALUES (" + (index_product + 1) + "," + index_subfamily + ",'" + R.string.f1s1p2_ni80 + "','" + R.string.f0_descripcion + "','" + R.drawable.nivelante80 + "','" + url + "');"); sqlDB.execSQL("INSERT INTO Product VALUES (" + (index_product + 2) + "," + index_subfamily + ",'" + R.string.f1s1p3_beL15 + "','" + R.string.f0_descripcion + "','" + R.drawable.nivelante80 + "','" + url + "');"); sqlDB.execSQL("INSERT INTO Product VALUES (" + (index_product + 3) + "," + index_subfamily + ",'" + R.string.f1s1p4_beL30 + "','" + R.string.f0_descripcion + "','" + R.drawable.nivelante80 + "','" + url + "');"); sqlDB.execSQL("INSERT INTO Product VALUES (" + (index_product + 4) + "," + index_subfamily + ",'" + R.string.f1s1p5_beP + "','" + R.string.f0_descripcion + "','" + R.drawable.nivelante80 + "','" + url + "');"); The problem is that the value of any index will increase all the time, and in a future will be added more products and families. I want to know if there is some way more efficient that use for example this approach I did: (index_product + 1) ; (index_product + 2); ... without to use +N because in a future products (or families,subfamilies) will be added and deleted. And with a lot of products (more than 100) could be very dangerous this way. Hope I explain my problem.
Judging from what your boss is saying, it might make more sense to have a table for products, sub families and what have you and use foreign keys to take care of everything. Thus, each parent will have a foreign key pointing to all their children. If you use an ORM, this would very likely be done automatically behind the scenes. Also as #Weston mentioned, avoid string concatenation within SQL statements. As is your application is prone to SQL injection.
"No such column" when running update on SQLite
I'm trying to update a row in my database. Here is the code I am trying to use to update: public void addFBComments(int id){ SQLiteDatabase db = this.getWritableDatabase(); String query = "UPDATE " + TABLE_FB_FEED + " SET " + COL_FB_COMMENTS+"="+"HELLO" + " WHERE " + COL_FB_ID+"="+id; db.execSQL(query); } When I run the command, it throws this error: 08-18 15:42:10.145: E/AndroidRuntime(10493): FATAL EXCEPTION: Thread-922 08-18 15:42:10.145: E/AndroidRuntime(10493): android.database.sqlite.SQLiteException: no such column: HELLO (code 1): , while compiling: UPDATE fb_feed SET fb_comments= HELLO WHERE _id=3 Here is the TABLE_FB_FEED: private static final String TABLE_FB_FEED_CREATE = "create table " + TABLE_FB_FEED + " (" + COL_FB_ID + " integer primary key autoincrement not null," + COL_FB_MESSAGE + " text," + COL_FB_CAPTION + " text," + COL_FB_POSTER_ID + " text," + COL_FB_POST_ID + " text," + COL_FB_LIKES + " text," + COL_FB_POSTER_NAME + " text," + COL_FB_COMMENTS + " text," // this is the column i want to update + COL_FB_LIKES_NUM + " text," + COL_FB_TIMESTAMP + " text," + COL_FB_PROFILE_PICTURE_URI + " text," + COL_FB_PICTURE_URI + " text," + COL_FB_NAME + " text," + COL_FB_PREVIOUS_PAGE_URI + " text," + COL_FB_NEXT_PAGE_URI + " text," + COL_FB_POST_TYPE + " text," + COL_FB_LINK_NAME + " text," + COL_FB_COMMENTS_NUM + " text," + COL_FB_STORY + " text," + COL_FB_DESCRIPTION + " text," + COL_FB_COMMENTS_BEFORE + " text," + COL_FB_COMMENTS_AFTER + " text," + COL_FB_LIKES_PROFILE_PIC + " text," + COL_FB_COMMENTS_PROFILE_PIC + " text);"; Why is it throwing the query? I thought I was doing everything correctly.
in your code you need to add single quotes: String query = "UPDATE " + TABLE_FB_FEED + " SET " + COL_FB_COMMENTS +"="+"'HELLO'" + " WHERE " + COL_FB_ID+"="+id or String query = "UPDATE " + TABLE_FB_FEED + " SET " + COL_FB_COMMENTS +"='HELLO' WHERE " + COL_FB_ID+"="+id this is another example "UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=myidValue");
In SQL, string values must be quoted: String query = "..." + COL_FB_COMMENTS+"= 'HELLO' WHERE ..."; Anyway, formatting problems such as this (which get worse when the string itself contains quotes) can be avoided by using parameters: String query = "... SET " + COL_FB_COMMENTS+"= ? WHERE " + COL_FB_ID+"="+id; db.execSQL(query, new Object[] { "HELLO" });
You need to escape your String literal, String query = "UPDATE " + TABLE_FB_FEED + " SET " + COL_FB_COMMENTS +"="+"HELLO" + " WHERE " + COL_FB_ID+"="+id Could be String query = "UPDATE " + TABLE_FB_FEED + " SET " + COL_FB_COMMENTS +"="+"'HELLO'" + " WHERE " + COL_FB_ID+"="+id Or, you could use a bind parameter.
something like String query = "UPDATE " + TABLE_FB_FEED + " SET " + COL_FB_COMMENTS+"="+"'HELLO'" + " WHERE " + COL_FB_ID+"="+id; would work
Inserting into database
I have written a query to insert values into a database in Android: db.execSQL("CREATE TABLE " + TABLE_NAME + "( " + KEY_SITUATION_NAME + " TEXT NOT NULL, " + KEY_CATEGORY_NAME + " TEXT NOT NULL," + KEY_LATTIUDE +" NOT NULL," + KEY_LONGITUDE + " NOT NULL," + " );"); However, when I execute it, an error is thrown. Can anyone point out the error in it?
db.execSQL("CREATE TABLE " + TABLE_NAME + "( " + KEY_SITUATION_NAME + " TEXT NOT NULL, " + KEY_CATEGORY_NAME + " TEXT NOT NULL," + KEY_LATTIUDE +" INTEGER NOT NULL," + KEY_LONGITUDE + " INTEGER NOT NULL" + " );"); Provide a Datatype to KEY_LATITUDE and to KEY_LONGITUDE. And also you have kept a (,) at last which was not needed...
the correct code is: db.execSQL("CREATE TABLE " + TABLE_NAME + "( " + KEY_SITUATION_NAME + " TEXT NOT NULL, " + KEY_CATEGORY_NAME + " TEXT NOT NULL," + KEY_LATTIUDE +" NOT NULL," + KEY_LONGITUDE + " NOT NULL," + " )");
db.execSQL("CREATE TABLE " + TABLE_NAME + "( " + KEY_SITUATION_NAME + " TEXT NOT NULL, " + KEY_CATEGORY_NAME + " TEXT NOT NULL," + KEY_LATTIUDE +" NOT NULL," + KEY_LONGITUDE + " NOT NULL);");