Here is the snippet of code:
int GetMessageFromDB(char *MD5Sum, struct ReceiveNode *FromDb)
{
int ReturnCode;
sqlite3_stmt *SelectStmtHandle;
sprintf(SqlString, "SELECT SrcIp, DstIp, TimeStamp, SrcPort, DstPort, SeqNum
ReturnCode = sqlite3_prepare(DbHandle, SqlString, -1, &SelectStmtHandle, NULL
if (ReturnCode != SQLITE_OK || SelectStmtHandle == NULL)
{
sqlite3_reset(SelectStmtHandle);
printf("Cannot prepare select statement. %s\n", sqlite3_errmsg(DbHandle));
return(2);
}
sqlite3_bind_text(SelectStmtHandle, 1, MD5Sum, strlen(MD5Sum), SQLITE_TRANSIE
ReturnCode = sqlite3_step(SelectStmtHandle);
if (ReturnCode != SQLITE_ROW)
{
sqlite3_reset(SelectStmtHandle);
printf("Row not found. ReturnCode: %d, Error Message:%s, Error Code: %d\n"
ReturnCode, sqlite3_errmsg(DbHandle), sqlite3_errcode(DbHandle));
return(2);
}
strcpy(FromDb->SourceIP, sqlite3_column_text(SelectStmtHandle, 0));
strcpy(FromDb->DestIP, sqlite3_column_text(SelectStmtHandle, 1));
strcpy(FromDb->TimeStamp, sqlite3_column_text(SelectStmtHandle, 2));
FromDb->SourcePort = sqlite3_column_int(SelectStmtHandle, 3);
FromDb->DestPort = sqlite3_column_int(SelectStmtHandle, 4);
FromDb->SeqNum = sqlite3_column_int(SelectStmtHandle, 5);
strncpy(FromDb->MD5Sum, MD5Sum, MD5SUMLEN);
sqlite3_finalize(SelectStmtHandle);
return(1);
}
int GetMessageFromDB(char *MD5Sum, struct ReceiveNode *FromDb)
{
int ReturnCode;
sqlite3_stmt *SelectStmtHandle;
sprintf(SqlString, "SELECT SrcIp, DstIp, TimeStamp, SrcPort, DstPort, SeqNum
ReturnCode = sqlite3_prepare(DbHandle, SqlString, -1, &SelectStmtHandle, NULL
if (ReturnCode != SQLITE_OK || SelectStmtHandle == NULL)
{
sqlite3_reset(SelectStmtHandle);
printf("Cannot prepare select statement. %s\n", sqlite3_errmsg(DbHandle));
return(2);
}
sqlite3_bind_text(SelectStmtHandle, 1, MD5Sum, strlen(MD5Sum), SQLITE_TRANSIE
ReturnCode = sqlite3_step(SelectStmtHandle);
if (ReturnCode != SQLITE_ROW)
{
sqlite3_reset(SelectStmtHandle);
printf("Row not found. ReturnCode: %d, Error Message:%s, Error Code: %d\n"
ReturnCode, sqlite3_errmsg(DbHandle), sqlite3_errcode(DbHandle));
return(2);
}
strcpy(FromDb->SourceIP, sqlite3_column_text(SelectStmtHandle, 0));
strcpy(FromDb->DestIP, sqlite3_column_text(SelectStmtHandle, 1));
strcpy(FromDb->TimeStamp, sqlite3_column_text(SelectStmtHandle, 2));
FromDb->SourcePort = sqlite3_column_int(SelectStmtHandle, 3);
FromDb->DestPort = sqlite3_column_int(SelectStmtHandle, 4);
FromDb->SeqNum = sqlite3_column_int(SelectStmtHandle, 5);
strncpy(FromDb->MD5Sum, MD5Sum, MD5SUMLEN);
sqlite3_finalize(SelectStmtHandle);
return(1);
}
if (FindDuplicateMessage(ReceiveBuf) == 1)
{
GetMessageFromDB(ReceiveBuf.MD5Sum, &FromDb);
}
When I execute this functions I get following output.
Cannot insert into database. column MD5Sum is not unique
error code = SQLITE_CONSTRAINT
Row not found. ReturnCode: 101, Error Message:not an error, Error Code: 0
101 is SQLITE_DONE. So I get SQLITE_DONE instead of SQLITE_ROW.
Hemant Shah
E-mail: [email protected]
--- On Sun, 9/26/10, Black, Michael (IS) <[email protected]> wrote:
> From: Black, Michael (IS) <[email protected]>
> Subject: Re: [sqlite] sqlite cannot find the row
> To: "General Discussion of SQLite Database" <[email protected]>
> Date: Sunday, September 26, 2010, 8:14 AM
> You don't provide enough into to tell
> what the problem is.
>
> This works for me...so what did you do different?
> Simplify your problem to a complete example like this and we
> can help better...
>
>
> #include <stdio.h>
> #include "sqlite3.h"
> int main()
> {
> int rc;
> char *md5sum="dd5b8911bf377682d8963a859b8c2055";
> sqlite3 *db;
> sqlite3_stmt *stmt;
> remove("test.db");
> sqlite3_open_v2("test.db", &db, SQLITE_OPEN_READWRITE
> | SQLITE_OPEN_CREATE, 0);
> sqlite3_prepare(db, "CREATE TABLE t (md5sum varchar)",
> -1,&stmt, 0);
> rc = sqlite3_step(stmt);
> if (rc != SQLITE_DONE) printf("CREATE %d
> %s\n",rc,sqlite3_errmsg(db));
> sqlite3_prepare(db,"INSERT INTO t VALUES(?)",-1,&stmt,
> 0);
> sqlite3_bind_text(stmt,1,md5sum,-1,SQLITE_TRANSIENT);
> rc = sqlite3_step(stmt);
> if (rc != SQLITE_DONE) printf("INSERT: %d
> %s\n",rc,sqlite3_errmsg(db));
> sqlite3_prepare(db,"SELECT * FROM t WHERE
> md5sum=?",-1,&stmt, 0);
> sqlite3_bind_text(stmt,1,md5sum,-1,SQLITE_TRANSIENT);
> rc = sqlite3_step(stmt);
> if (rc==SQLITE_ROW) {
> const char *s=sqlite3_column_text(stmt,0);
> printf("%s\n",s);
> }
> else {
> printf("SELECT %d %s\n",rc,sqlite3_errmsg(db));
> }
> sqlite3_close(db);
> return 0;
> }
>
> Michael D. Black
> Senior Scientist
> Advanced Analytics Directorate
> Northrop Grumman Information Systems
>
>
> ________________________________
>
> From: [email protected]
> on behalf of Hemant Shah
> Sent: Sat 9/25/2010 8:53 PM
> To: General Discussion of SQLite Database
> Subject: EXTERNAL:[sqlite] sqlite cannot find the row
>
>
>
> Folks
>
> I have a C program that creates in-memory database with
> unique column.
> My code basically inserts row in database and if it gets
> duplicate row it selects the duplicate row from database and
> prints information.
>
> The problem is that when I select the row it says row not
> found.
>
> I simplified the code as follows:
>
> sqlite3_prepare("insert statement")
> sqlite3_bind columns
> sqlite3_step
> sqlite3_finalize
> sqlite3_exec COMMIT
>
> When I insert the row I get following error message:
>
> column MD5Sum is not unique
>
> So I immediately do a select as follows:
>
> sqlite3_prepare("select statement")
> sqlite3_bind column
> sqlite3_step
> sqlite3_finalize
>
>
> But I do not get SQLITE_ROW return code. Here is my code.
>
> sqlite3_prepare(select statement)
> sqlite3_bind_text(SelectStmtHandle, 1, MD5Sum,
> strlen(MD5Sum), SQLITE_TRANSIENT);
> ReturnCode = sqlite3_step(SelectStmtHandle);
> if (ReturnCode != SQLITE_ROW)
> {
> sqlite3_reset(SelectStmtHandle);
> printf("Row not found. %s\n",
> sqlite3_errmsg(DbHandle));
> return(2);
> }
>
> Here is the message it prints:
>
> Row not found. not an error
>
> I am new to sqlite, what am I doing wrong?
> What return code should I get if there is only one row in
> result set?
>
> I print the columns before I do insert and I can see that I
> have duplicate row. Sixth column (MD5SUM) is the unique
> column.
>
> 1219 10.136.28.112
> 44376 239.56.112.112 8146
> dd5b8911bf377682d8963a859b8c2055 2010-09-24 14.11.07.545436
> 1219 10.136.28.112
> 44376 239.56.112.112 8146
> dd5b8911bf377682d8963a859b8c2055 2010-09-24 14.11.07.545855
>
>
>
>
>
> Hemant Shah
> E-mail: [email protected]
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
> -----Inline Attachment Follows-----
>
> _______________________________________________
> 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