简体   繁体   中英

SOCI: How to deal with many columns?

I'm using SOCI to access a PostgreSQL database. One particular table that I'm inserting into and selecting from has (at present) 72 columns. My question is how does one best deal with so many columns?

I've determined that for selecting, using the SOCI dynamic result set is probably best. In this way I can loop over the columns.

However, for inserting I'm having difficulty. What I want to achieve is something as follows:

int vals[NUM_VALS];
statement st = s.prepare << "INSERT INTO table (c0, c1, c2, ...) VALUES (";
for(int i = 0; i < NUM_VALS; ++i)
    st << vals[i];
st << ")";
st.execute();

Is anything like this possible? I've had no luck finding any way of dealing with large numbers of columns in an easy way.

The SOCI-users mailing list provided me with the answer. Deferred construction of the statement object is required. For example, to make the above work, change it to:

int vals[NUM_VALS];
auto temp = (s.prepare << "INSERT INTO table (c0, c1, c2, ...) VALUES (:c1, :c2, ...)");
for(int i = 0; i < NUM_VALS; ++i)
    temp , into(vals[i]);
statement st(temp).execute();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM