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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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
> > >> [email protected]
> > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> > >>
> > >
> > >
> > _______________________________________________
> > sqlite-users mailing list
> > [email protected]
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users