From: | Michael Fuhr <mike(at)fuhr(dot)org> |
---|---|
To: | sandhya <sandhyar(at)amiindia(dot)co(dot)in> |
Cc: | postgre <pgsql-admin(at)postgresql(dot)org> |
Subject: | Re: reading reading files from the DB |
Date: | 2005-12-29 04:47:34 |
Message-ID: | 20051229044734.GA45641@winnie.fuhr.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
On Wed, Dec 28, 2005 at 04:40:02PM +0530, sandhya wrote:
> I have exported few files into my DB server running on LINUX os.
> I connected to it remotely from windows and through one sample application
> like webserver i am trying to read the contents of it when ever there is a
> request for the specified file.Using the below example code.
> Is this correct?I am not finding that it is reading it from the database.
> How can i make sure of this.I am unable to open the requested file from win
> application through database.
What are you expecting to happen and what actually does happen?
> lobj_fd = lo_open(conn, lobjId, INV_READ);
> if (lobj_fd < 0)
> {
> MessageBox(0,"error","Cannot Object Id ",MB_OK);
> }
Does MessageBox() return control to the program? If so then you
should return or exit in case of error because there's no point
continuing if lo_open() failed, and calling other lo_* functions
will almost certainly cause problems. Also, you can use PQerrorMessage()
to get an error message explaining the failure.
> lo_lseek(conn, lobj_fd, start, SEEK_END);
> len = lo_tell(conn,lobj_fd);
> lo_lseek(conn, lobj_fd, start, SEEK_SET);
> buf =(char*) malloc(len + 1);
A robust program would check these calls for errors.
> nread = 0;
> while (len - nread > 0)
> {
> nbytes = lo_read(conn, lobj_fd, buf, len - nread);
> buf[nbytes] = ' ';
> nread += nbytes;
> }
I'm not sure the loop is necessary, but if you keep the loop then
you're not handling buf correctly. As written, each call to lo_read()
will store data at buf, overwriting what was written there before.
And why are you appending a space? Did you mean to append a NUL
('\0') string-terminating character? That would make sense only
if you know the large object data can be handled as a string, i.e.,
that it doesn't contain binary data where NUL might be present in
the middle of the data. And again, a robust program would check
lo_read()'s return value before continuing.
--
Michael Fuhr
From | Date | Subject | |
---|---|---|---|
Next Message | sandhya | 2005-12-29 05:14:23 | Fw: reading reading files from the DB ...pls |
Previous Message | Bruno Wolff III | 2005-12-28 20:26:07 | Re: preventing deadlocks |