AccessExample.cpp
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997, 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: AccessExample.cpp,v 11.7 2000/12/06 18:58:23 bostic Exp $
  8.  */
  9. #include "db_config.h"
  10. #ifndef NO_SYSTEM_INCLUDES
  11. #include <sys/types.h>
  12. #include <iostream.h>
  13. #include <errno.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #ifndef _MSC_VER
  17. #include <unistd.h>
  18. #endif
  19. #endif
  20. #include <iomanip.h>
  21. #include <db_cxx.h>
  22. class AccessExample
  23. {
  24. public:
  25. AccessExample();
  26. void run();
  27. private:
  28. static const char FileName[];
  29. // no need for copy and assignment
  30. AccessExample(const AccessExample &);
  31. void operator = (const AccessExample &);
  32. };
  33. static void usage();          // forward
  34. int main(int argc, char *argv[])
  35. {
  36. if (argc > 1) {
  37. usage();
  38. }
  39. // Use a try block just to report any errors.
  40. // An alternate approach to using exceptions is to
  41. // use error models (see DbEnv::set_error_model()) so
  42. // that error codes are returned for all Berkeley DB methods.
  43. //
  44. try {
  45. AccessExample app;
  46. app.run();
  47. return 0;
  48. }
  49. catch (DbException &dbe) {
  50. cerr << "AccessExample: " << dbe.what() << "n";
  51. return 1;
  52. }
  53. }
  54. static void usage()
  55. {
  56. cerr << "usage: AccessExamplen";
  57. exit(1);
  58. }
  59. const char AccessExample::FileName[] = "access.db";
  60. AccessExample::AccessExample()
  61. {
  62. }
  63. void AccessExample::run()
  64. {
  65. // Remove the previous database.
  66. (void)unlink(FileName);
  67. // Create the database object.
  68. // There is no environment for this simple example.
  69. Db db(0, 0);
  70. db.set_error_stream(&cerr);
  71. db.set_errpfx("AccessExample");
  72. db.set_pagesize(1024); /* Page size: 1K. */
  73. db.set_cachesize(0, 32 * 1024, 0);
  74. db.open(FileName, NULL, DB_BTREE, DB_CREATE, 0664);
  75. //
  76. // Insert records into the database, where the key is the user
  77. // input and the data is the user input in reverse order.
  78. //
  79. char buf[1024];
  80. char rbuf[1024];
  81. char *t;
  82. char *p;
  83. int ret;
  84. int len;
  85. for (;;) {
  86. cout << "input> ";
  87. cout.flush();
  88. cin.getline(buf, sizeof(buf));
  89. if (cin.eof())
  90. break;
  91. if ((len = strlen(buf)) <= 0)
  92. continue;
  93. for (t = rbuf, p = buf + (len - 1); p >= buf;)
  94. *t++ = *p--;
  95. *t++ = '';
  96. Dbt key(buf, len + 1);
  97. Dbt data(rbuf, len + 1);
  98. ret = db.put(0, &key, &data, DB_NOOVERWRITE);
  99. if (ret == DB_KEYEXIST) {
  100. cout << "Key " << buf << " already exists.n";
  101. }
  102. }
  103. cout << "n";
  104. // We put a try block around this section of code
  105. // to ensure that our database is properly closed
  106. // in the event of an error.
  107. //
  108. try {
  109. // Acquire a cursor for the table.
  110. Dbc *dbcp;
  111. db.cursor(NULL, &dbcp, 0);
  112. // Walk through the table, printing the key/data pairs.
  113. Dbt key;
  114. Dbt data;
  115. while (dbcp->get(&key, &data, DB_NEXT) == 0) {
  116. char *key_string = (char *)key.get_data();
  117. char *data_string = (char *)data.get_data();
  118. cout << key_string << " : " << data_string << "n";
  119. }
  120. dbcp->close();
  121. }
  122. catch (DbException &dbe) {
  123. cerr << "AccessExample: " << dbe.what() << "n";
  124. }
  125. db.close(0);
  126. }