unixODBC中 column .... does not exist 的解决过程

前端之家收集整理的这篇文章主要介绍了unixODBC中 column .... does not exist 的解决过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

情况描述:在postgresql添加表example后,用DTL示范代码访问,提示错误

dtl代码如下:(添加库odbc、DTL、odbcinst、stdc++)

  1. #include "DTL.h"
  2. #include <iostream>
  3. using namespace dtl;
  4. using namespace std;
  5.  
  6. int main() {
  7. cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
  8. try
  9. {
  10. // Connect to the database DBConnection::GetDefaultConnection().Connect("UID=sa;PWD=123123;DSN=example;");
  11. // Create a container to hold records from a query.
  12. // In this case,the query will be "SELECT * FROM DB_EXAMPLE".
  13. DynamicDBView<> view("DB_EXAMPLE","*");
  14. // Read all rows from the database and send to cout
  15. copy(view.begin(),view.end(),ostream_iterator<variant_row>(cout,"\n"));
  16. }
  17. catch (std::exception &ex)
  18. {
  19. // Show any database or other standard errors
  20. cerr << ex.what() << endl;
  21. }
  22. return 0;
  23. }
错误描述如下:

1)在表为空的时候运行程序,提示

[unixODBC]ERROR:Syntax error at or near "FROM";Error while executing the query

2)在表中添加第一个字段INT_VALUE时,在代码中访问,提示如下:

[unixODBC]ERROR:column"int_value"does not exist;


postgresql的官网上也有人提出了同样的问题,不过这个应该不是postgresql的问题,而是DTL的

对于以上两点,各自的解决方法如下:

1)保证表不空

2)字段改为小写,不要出现纯大写或大小写混合

至此,问题解决



楼主探索出这个解决方法的过程比较麻烦,一直坚信问题是在postgresql上,因为对系统表则可以成功显示内容,而用自己建的就不行。

当时新建了example数据库,example表,结果用最惨重的一次,是删除example表后,sudo -u postgres sh进入了postgres用户新建example表,结果由于这是postgres用户的表,而pgadmin3是用sa用户登录,在图形化窗口中反而删除不了example表,提示permission denies....

然后又在postgres的shell中加上alternate table example owner to sa;把用户改写,依旧不行。

最后才发现是大小写的问题,不过依旧掩盖不了DTL的强大啊。话说,postgresql有一个很蛋疼的地方,添加主键没法往表添加内容,不过有的系统表就没主键,怎么添加的呢?哎

其实学这些用的人少的东东,有个很不爽的地方就是能参考的中文资料太少(比如linux下的数据库,能找到的绝大部分都是MysqL的),所以只能看英文的,虽然英文的也不多,遇到问题的时候,总是很苦恼的,不过解决了这些问题之后,还是很开心的,就这样吧,继续了


菜鸟go go go ~~~

猜你在找的Postgre SQL相关文章