Обсуждение: Postgres inserts null value for parameterized statement
Hi,
I have created table using following sql statement through psql tool in test
database using
create table t1(f1 int);
table is created.
Now I am using an odbc script to insert 5 records. But it inserts 6 records
NULL value being the first one inserted.
the code snippet is as below.
...
...
retVal = SQLDriverConnect(dbHdl, NULL, (SQLCHAR*)"psql",
SQL_NTS,outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);
SQLSetConnectAttr(dbHdl, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, 0);
int f1 = 0;
ret = SQLPrepare(stmt,(unsigned char*)"INSERT INTO T1 VALUES(?);" ,
SQL_NTS);
ret = SQLBindParameter (stmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG,
SQL_INTEGER,0,0,&f1,0,NULL);
int i,count=0;
// EXECUTE THE STATEMENT
for(i=0;i<5;i++)
{
f1++;
ret = SQLExecute(stmt);
ret = SQLTransact(env,dbc,SQL_COMMIT);
count++;
}
...
...
I am using unixodb driver and my odbc.ini file reads as follows.
$ vi ~/.odbc.ini
[psql]
Description = CP resources db
Driver = postgres
Trace = No
TraceFile = sql.log
Database = test
Servername = localhost
UserName = kishoramballi
Password = kishoramballi
Port = 5432
Protocol = 6.4
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =
ExtraSysTablePrefixes =
$ vi /etc/odbcinst.ini
[ODBC]
Trace = yes
TraceFile = /tmp/sql.log
[postgres]
Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
Description = Connector Driver DSN
SERVER = localhost
Database = test
ReadOnly = No
[PostgreSQL]
Description = PostgreSQL ODBC driver for Linux
Driver = /usr/lib/libodbcpsql.so.1
Setup = /usr/lib/libodbcpsqlS.so.1
ExtraSysTablePrefixes =
UsageCount = 1
Am I missing something or have I added some thing more than required for
this problem to occur.
Please help
thanks
--
View this message in context:
http://www.nabble.com/Postgres-inserts-null-value-for-parameterized-statement-tp25896531p25896531.html
Sent from the PostgreSQL - odbc mailing list archive at Nabble.com.
kishoramballi wrote:
> Hi,
>
> I have created table using following sql statement through psql tool in test
> database using
> create table t1(f1 int);
> table is created.
> Now I am using an odbc script to insert 5 records. But it inserts 6 records
> NULL value being the first one inserted.
> the code snippet is as below.
>
> ...
> ...
> retVal = SQLDriverConnect(dbHdl, NULL, (SQLCHAR*)"psql",
> SQL_NTS,outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);
> SQLSetConnectAttr(dbHdl, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, 0);
> int f1 = 0;
> ret = SQLPrepare(stmt,(unsigned char*)"INSERT INTO T1 VALUES(?);" ,
> SQL_NTS);
> ret = SQLBindParameter (stmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG,
> SQL_INTEGER,0,0,&f1,0,NULL);
> int i,count=0;
> // EXECUTE THE STATEMENT
> for(i=0;i<5;i++)
> {
> f1++;
> ret = SQLExecute(stmt);
> ret = SQLTransact(env,dbc,SQL_COMMIT);
> count++;
> }
> ...
> ...
>
> I am using unixodb driver and my odbc.ini file reads as follows.
>
> $ vi ~/.odbc.ini
>
> [psql]
> Description = CP resources db
> Driver = postgres
> Trace = No
> TraceFile = sql.log
> Database = test
> Servername = localhost
> UserName = kishoramballi
> Password = kishoramballi
> Port = 5432
> Protocol = 6.4
Please set
Protocol = 7.4
and set one of the follwoing.
1)
UseServerSidePrepare = 1
2)
DisallowPremature = 1
3)
Parse = 1
regards,
Hiroshi Inoue