Kittayya: My issue is, I already have imported table in the Database, there alreay around 1000 records in that table where ROWID is from 1 to 1000, now system generates new events, where ROWID again starts from beginning from 1, now these new events are overwriting the earlier imported events by "REPLACE INTO......", I made that change to instead REPLACE, I need INSERT, but now I need new ROWID (I need to update at the end of previous imported records. I don't want to overwrite original records.
On Fri, Feb 5, 2010 at 4:09 PM, P Kishor <punk.k...@gmail.com> wrote: > I am top posting here because, (1) You are simply unable to articulate > your own problem clearly, (2) you are not listening to the advice that > you are getting, and (3) the quicker we put you on the right track the > better it will be for everyone. > > First, if you have a table, you should have a primary key. You should > create your own primary key instead of using ROWID as that is used by > the software, and is not reliable for your own use. Creating a primary > key is as easy as defining a column as INTEGER PRIMARY KEY. For > example, > > CREATE TABLE eventlog (id INTEGER PRIMARY KEY, foo TEXT, bar REAL); > > There, that was easy, no? Now, sqlite will do the work for you, > automatically inserting primary keys for you, automatically ensuring > that there will be no collisions and you saving you from the misery of > figuring out what key to create and use next. > > Second, if for some reason you want to know what the highest primary > key already in use is, you can ask the database > > SELECT Max(id) FROM eventlog; > > There, that was easy also. > > > Third, if, for some reason, you want to insert a new row, and then > immediately want to use the id of that new row for a different > operation, you can use last_insert_rowid() > > BEGIN TRANSACTION; > -- insert a new row > INSERT INTO eventlog (foo, bar) VALUES ('blah blah', 21.546); > -- note that you didn't have to insert the id, as sqlite did that work for > you > -- now, update some other table with the last inserted row id > UPDATE someothertable > SET col = ( SELECT last_insert_rowid() ) > WHERE condition; > -- note, last_insert_rowid() is a db connection property, > -- so you don't have to specify a table. Make sure to > -- wrap the two in a transaction > COMMIT > > Now, wasn't that easy? > > Next step. Please read the docs and do some sql tutorials. You will > really benefit. > > > On Fri, Feb 5, 2010 at 2:54 PM, Vasanta <vtan...@gmail.com> wrote: > > I wroe this code to get ROWID, but if I assign output of sqlite3_step to > an > > id, and assign that id, is OK?. > > > > const char * rowidSql = "SELECT max(ROWID)+1 "EVENTLOG_TBL ; > > > > const char * zSql; > > sqlite3_stmt * pStmt, pStmt2; > > > > /* This is added to run query to get ROWID */ > > rc = sqlite3_prepare(pDB, rowidSql, -1, &pStmt2, 0); > > if( rc != SQLITE_OK ) > > { > > ADP_PRINTF ("sqlite3_prepare failed for %s\n", rowidSql); > > return (ERROR); > > } > > eventLogRowIndex = sqlite3_step(pStmt2) > > sqlite3_bind_int(pStmt, 1, eventLogRowIndex); > > > > > > On Fri, Feb 5, 2010 at 3:30 PM, Shane Harrelson <sh...@sqlite.org> > wrote: > > > >> As stated before, in general, you should not specify the ROWID on > inserts, > >> but instead, let the database engine choose it for you. > >> This is true of most/all database engines. > >> > >> The syntax you're trying below is not supported. Indeed, even it were, > >> max(ROWID) is the maximum ROWID *in use*. Trying to insert another row > >> with > >> the same ROWID will result in a collision. > >> > >> At the very least you would need to do something like "SELECT > max(ROWID)+1 > >> from EVENTLOG_TBL;", use sqlite_step() to run this query, and bind the > >> ROWID > >> returned here into your insert statement and run that. > >> > >> You can read more on SQLite's ROWID usage at > >> http://www.sqlite.org/search?q=rowid > >> > >> HTH. > >> -Shane > >> > >> > >> > >> > >> On Fri, Feb 5, 2010 at 3:22 PM, Vasanta <vtan...@gmail.com> wrote: > >> > >> > This is my actual string, still not working: > >> > > >> > const char * replaceSql = "INSERT INTO "EVENTLOG_TBL \ > >> > "(_ROWID_, component, facilityId, > logLevel,"\ > >> > "textMessage, binMessage) > VALUES(?,?,?,?,?,?); > >> > SELECT max(ROWID) from EVENTLOG_TBL"; > >> > > >> > > >> > On Fri, Feb 5, 2010 at 3:05 PM, Vasanta <vtan...@gmail.com> wrote: > >> > > >> > > Thanks jay. > >> > > > >> > > Can I combine like this: > >> > > > >> > > "INSERT INTO trends(UnitID,HeureTrends,DateTrends) > VALUES(?,?,?);SELECT > >> > > max(ROWID) FROM table-name"; > >> > > > >> > > or > >> > > > >> > > "INSERT INTO trends(UnitID,HeureTrends,DateTrends) > VALUES(?,?,?);SELECT > >> > > last_insert_rowid() AS [ID]"; > >> > > > >> > > > >> > > On Fri, Feb 5, 2010 at 2:49 PM, Jay A. Kreibich <j...@kreibi.ch> > wrote: > >> > > > >> > >> On Fri, Feb 05, 2010 at 02:28:33PM -0500, Vasanta scratched on the > >> wall: > >> > >> > command "SELECT rowid from table-name;" gives all rows from 1 > to > >> 100 > >> > >> for > >> > >> > total 100 rows, any command to get last rowid?. I need insert > from > >> > last > >> > >> > rowid onwards (if table already 100 records, need to insert from > 101 > >> > >> > onwards) > >> > >> > >> > >> SELECT max(ROWID) FROM table-name; > >> > >> > >> > >> > >> > >> You shouldn't be setting ROWIDs manually, however. Just insert > the > >> > >> row and let SQLite pick the ROWID. If you have a ROWID alias in > the > >> > >> form of an INTEGER PRIMARY KEY, in most cases you should still > just > >> > >> let SQLite pick the value, possibly with AUTOINCREMENT. > >> > >> > >> > >> -j > >> > >> > >> > >> -- > >> > >> Jay A. Kreibich < J A Y @ K R E I B I.C H > > >> > >> > >> > >> "Our opponent is an alien starship packed with atomic bombs. We > have > >> > >> a protractor." "I'll go home and see if I can scrounge up a > ruler > >> > >> and a piece of string." --from Anathem by Neal Stephenson > >> > >> _______________________________________________ > >> > >> sqlite-users mailing list > >> > >> sqlite-users@sqlite.org > >> > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > >> > >> > > > >> > > > >> > _______________________________________________ > >> > sqlite-users mailing list > >> > sqlite-users@sqlite.org > >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > > >> _______________________________________________ > >> sqlite-users mailing list > >> sqlite-users@sqlite.org > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > > _______________________________________________ > > sqlite-users mailing list > > sqlite-users@sqlite.org > > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > > > > > -- > Puneet Kishor http://www.punkish.org > Carbon Model http://carbonmodel.org > Charter Member, Open Source Geospatial Foundation http://www.osgeo.org > Science Commons Fellow, http://sciencecommons.org/about/whoweare/kishor > Nelson Institute, UW-Madison http://www.nelson.wisc.edu > ----------------------------------------------------------------------- > Assertions are politics; backing up assertions with evidence is science > ======================================================================= > Sent from Madison, Wisconsin, United States > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users