cpdo  Hex Artifact Content

Artifact 50cea121708f13d4cff0e3493ef404feb3338f5d:

Wiki page [cpdopp] by stephan 2011-05-17 18:39:29.
0000: 44 20 32 30 31 31 2d 30 35 2d 31 37 54 31 38 3a  D 2011-05-17T18:
0010: 33 39 3a 32 39 2e 36 36 38 0a 4c 20 63 70 64 6f  39:29.668.L cpdo
0020: 70 70 0a 50 20 36 39 36 31 38 36 62 35 63 66 37  pp.P 696186b5cf7
0030: 66 61 36 65 64 35 32 66 38 62 33 66 38 65 39 36  fa6ed52f8b3f8e96
0040: 36 33 66 35 63 35 65 38 61 64 34 34 35 0a 55 20  63f5c5e8ad445.U 
0050: 73 74 65 70 68 61 6e 0a 57 20 31 31 37 32 0a 3c  stephan.W 1172.<
0060: 73 74 72 6f 6e 67 3e 41 43 48 54 55 4e 47 3a 20  strong>ACHTUNG: 
0070: 54 48 45 20 43 50 44 4f 20 57 49 4b 49 20 49 53  THE CPDO WIKI IS
0080: 20 4e 4f 57 20 28 41 53 20 4f 46 20 32 30 31 31   NOW (AS OF 2011
0090: 2d 4d 61 79 2d 31 37 29 20 4d 41 49 4e 54 41 49  -May-17) MAINTAI
00a0: 4e 45 44 20 4f 4e 20 41 20 44 45 44 49 43 41 54  NED ON A DEDICAT
00b0: 45 44 20 57 49 4b 49 20 53 49 54 45 3a 3c 2f 73  ED WIKI SITE:</s
00c0: 74 72 6f 6e 67 3e 20 5b 68 74 74 70 3a 2f 2f 77  trong> [http://w
00d0: 68 69 6b 69 2e 77 61 6e 64 65 72 69 6e 67 68 6f  hiki.wanderingho
00e0: 72 73 65 2e 6e 65 74 2f 77 69 6b 69 73 2f 63 70  rse.net/wikis/cp
00f0: 64 6f 2f 3f 70 61 67 65 3d 63 70 64 6f 70 70 5d  do/?page=cpdopp]
0100: 0a 0a 41 73 20 6f 66 20 32 30 31 31 30 32 31 30  ..As of 20110210
0110: 2c 20 63 70 64 6f 20 69 6e 63 6c 75 64 65 73 20  , cpdo includes 
0120: 61 20 43 2b 2b 20 77 72 61 70 70 65 72 20 41 50  a C++ wrapper AP
0130: 49 2e 20 49 74 20 69 73 20 72 65 61 6c 6c 79 20  I. It is really 
0140: 65 61 73 79 20 74 6f 20 75 73 65 2e 2e 2e 0d 0a  easy to use.....
0150: 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 23 69  ..<verbatim>..#i
0160: 6e 63 6c 75 64 65 20 22 77 68 2f 63 70 64 6f 2f  nclude "wh/cpdo/
0170: 63 70 64 6f 2e 68 70 70 22 0d 0a 2e 2e 2e 0d 0a  cpdo.hpp".......
0180: 0d 0a 63 70 64 6f 3a 3a 64 72 69 76 65 72 20 2a  ..cpdo::driver *
0190: 20 64 72 76 20 3d 20 6e 65 77 20 63 70 64 6f 3a   drv = new cpdo:
01a0: 3a 64 72 69 76 65 72 28 22 73 71 6c 69 74 65 33  :driver("sqlite3
01b0: 3a 2f 70 61 74 68 2f 74 6f 2f 64 62 2e 73 71 6c  :/path/to/db.sql
01c0: 69 74 65 33 22 29 3b 0d 0a 2e 2e 2e 0d 0a 63 70  ite3");.......cp
01d0: 64 6f 3a 3a 73 74 6d 74 20 73 74 28 20 64 72 76  do::stmt st( drv
01e0: 2d 3e 70 72 65 70 61 72 65 28 22 53 45 4c 45 43  ->prepare("SELEC
01f0: 54 20 2a 20 46 52 4f 4d 20 74 22 29 20 29 3b 0d  T * FROM t") );.
0200: 0a 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20 63 70  .// Note that cp
0210: 64 6f 3a 3a 73 74 6d 74 20 69 73 20 61 20 73 74  do::stmt is a st
0220: 64 3a 3a 61 75 74 6f 5f 70 74 72 2d 6c 69 6b 65  d::auto_ptr-like
0230: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 63 6c 61   convenience cla
0240: 73 73 0d 0a 2f 2f 20 66 6f 72 20 6d 61 6e 61 67  ss..// for manag
0250: 69 6e 67 20 63 70 64 6f 3a 3a 73 74 61 74 65 6d  ing cpdo::statem
0260: 65 6e 74 20 70 6f 69 6e 74 65 72 20 6c 69 66 65  ent pointer life
0270: 74 69 6d 65 2c 20 61 6e 64 20 74 68 75 73 20 77  time, and thus w
0280: 65 0d 0a 2f 2f 20 75 73 65 20 74 68 65 20 27 2d  e..// use the '-
0290: 3e 27 20 6f 70 65 72 61 74 6f 72 20 65 76 65 6e  >' operator even
02a0: 20 74 68 6f 75 67 68 20 27 73 74 27 20 69 73 6e   though 'st' isn
02b0: 27 74 20 61 20 70 6f 69 6e 74 65 72 2e 2e 2e 0d  't a pointer....
02c0: 0a 77 68 69 6c 65 28 20 73 74 2d 3e 73 74 65 70  .while( st->step
02d0: 28 29 20 29 20 7b 0d 0a 20 20 20 73 74 64 3a 3a  () ) {..   std::
02e0: 63 6f 75 74 20 3c 3c 20 73 74 2d 3e 67 65 74 5f  cout << st->get_
02f0: 69 6e 74 33 32 28 30 29 20 3c 3c 20 27 5c 6e 27  int32(0) << '\n'
0300: 3b 0d 0a 7d 0d 0a 73 74 2e 66 69 6e 61 6c 69 7a  ;..}..st.finaliz
0310: 65 28 29 3b 20 2f 2f 20 6d 69 67 68 74 20 6e 6f  e(); // might no
0320: 74 20 62 65 20 6e 65 63 65 73 73 61 72 79 3a 20  t be necessary: 
0330: 73 65 65 20 74 68 65 20 41 50 49 20 64 6f 63 73  see the API docs
0340: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
0350: 20 20 2f 2f 20 57 65 20 75 73 65 20 69 74 20 68    // We use it h
0360: 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ere because the 
0370: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62  statement must b
0380: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
0390: 20 20 2f 2f 20 66 69 6e 61 6c 69 7a 65 64 20 62    // finalized b
03a0: 65 66 6f 72 65 20 77 65 20 64 6f 20 74 68 69 73  efore we do this
03b0: 3a 0d 0a 64 65 6c 65 74 65 20 64 72 76 3b 0d 0a  :..delete drv;..
03c0: 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 0d 0a 54  </verbatim>....T
03d0: 68 65 20 6d 61 69 6e 20 75 73 61 67 65 20 64 69  he main usage di
03e0: 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
03f0: 20 74 68 65 20 43 20 61 6e 64 20 43 2b 2b 20 41   the C and C++ A
0400: 50 49 73 20 69 73 20 74 68 61 74 20 74 68 65 20  PIs is that the 
0410: 43 2b 2b 20 77 72 61 70 70 65 72 20 74 68 72 6f  C++ wrapper thro
0420: 77 73 20 65 78 63 65 70 74 69 6f 6e 73 20 28 3c  ws exceptions (<
0430: 74 74 3e 63 70 64 6f 3a 3a 65 78 63 65 70 74 69  tt>cpdo::excepti
0440: 6f 6e 3c 2f 74 74 3e 2c 20 77 68 69 63 68 20 64  on</tt>, which d
0450: 65 72 69 76 65 73 20 66 72 6f 6d 20 3c 74 74 3e  erives from <tt>
0460: 73 74 64 3a 3a 65 78 63 65 70 74 69 6f 6e 3c 2f  std::exception</
0470: 74 74 3e 29 20 66 6f 72 20 74 68 65 20 76 61 73  tt>) for the vas
0480: 74 20 6d 61 6a 6f 72 69 74 79 20 6f 66 20 65 72  t majority of er
0490: 72 6f 72 20 63 61 73 65 73 2e 20 53 65 65 20 74  ror cases. See t
04a0: 68 65 20 41 50 49 20 64 6f 63 73 20 66 6f 72 20  he API docs for 
04b0: 74 68 65 20 64 65 74 61 69 6c 73 20 61 6e 64 20  the details and 
04c0: 74 68 65 20 73 6d 61 6c 6c 20 68 61 6e 64 66 75  the small handfu
04d0: 6c 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 20 77  l of functions w
04e0: 68 69 63 68 20 64 6f 20 6e 6f 74 20 74 68 72 6f  hich do not thro
04f0: 77 2e 0a 0a 5a 20 34 37 62 34 65 38 37 32 39 66  w...Z 47b4e8729f
0500: 62 31 38 62 39 31 63 31 33 30 37 61 35 66 62 62  b18b91c1307a5fbb
0510: 36 31 64 62 61 36 0a                             61dba6.