从 XML 文件到 MySQL 的转换,调试笔记

MySQL连接方法:

1、安装最新版本的MySQL;

2、确定安装了C++ connector,这是关键,如果用其他语言开发要安装相应的连接器;

3、下面是在项目中调用MySQL API之前需要完成的事:参考:http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html

      这一步总结一下需要告诉编译器该项目总共依赖3个东西(具体位置与版本依据自己安装和使用的情况而定):

     (1)工程的头文件路径:项目属性页的C/C++->常规->附加包含目录指向:C:\Program Files\MySQL\MySQL Server 5.1\include

   (2)工程的连接库路径:项目属性页的链接器->常规->附加库目录指向:C:\Program Files\MySQL\MySQL Server 5.1\lib

   (3)工程的连接器的附加依赖项:项目属性页的链接器->输入->附加依赖项中添加:libmysql.lib

4、在写源文件时还需要:#include <mysql.h>

5、SQL的插入语句中包含单引号时,必须在它之前加一个单引号以表示转义:

    inline void Replace(string &str)
  {
string::size_type pos=0;
    
while( (pos=str.find_first_of("'",pos)) != string::npos)
{
str.replace(pos,1,"''");
++pos;
++pos;
}
  }

MSXML使用方法:

下载最新版msxml6_x86.msi(当前是6)然后安装;

打开VS2008新建控制台程序,在源文件中添加声明:

#import "msxml6.dll" raw_interfaces_only
http://leonax.net/p/740/using-msxml-in-c-language/

然后即可使用其中提供的类,具体通过的代码:

http://dev.yesky.com/413/2510413_2.shtml

IXMLDOMDocument   //装载文档时
IXMLDOMNode      //搜寻结点时
IXMLDOMElement    //设置元素属性时
IXMLDOMNode     //创建新的结点时
IXMLDOMNode      //添加结点时

1、格式

      从网上直接copy下来的代码,可能存在格式问题,如空格,大小写,字体等,首先修改完这些东西。

2、CComPtr、CComQIPtr 的声明

    COM提供的一个类,智能指针,包含于头文件 atlbase.h 中,只要将该头文件包含在源文件中即可。

     http://www.cnblogs.com/lzjsky/archive/2011/01/07/1929701.html

3、CString

    包含于文件 atlstr.h 中,也包含于 afxstr.h 中,但是后者要求是MFC应用,纯C/C++应用不可以。

    http://msdn.microsoft.com/en-us/library/vstudio/ms174288(v=vs.90).aspx

4、关于CComPtr、CComQIPtr 变量的释放

    如果在CoUninitialize()调用之前,没有释放CComPtr与CComQIPtr变量的话,程序会崩溃,所以应该在CoUninitialize()调用之前释放这两个智能指针的变量,

   CComPtr的变量可以直接赋NULL,但是CComQIPtr的变量如果赋NULL的话会出现重定义的错误,它的对象应该显示调用Release()函数,当然CComPtr的对象也可以显示调用    Release()函数。

   http://blog.csdn.net/bb8cbb8c/article/details/5935098

5、如何对结点(元素)进行操作

    IXMLDOMNode 类的属性、接口:http://technet.microsoft.com/zh-cn/subscriptions/ms761386.aspx

6、如何对结点的属性进行操作

    IXMLDOMElement 类的接口:http://technet.microsoft.com/zh-CN/library/ms751229

7、如何对XML文件进行操作

    IXMLDOMDocument类的属性、接口:http://technet.microsoft.com/zh-cn/subscriptions/ms757878.aspx

8、读取某属性的值时,需要将读取的值放到CComVariant类的对象中,然而为了写到数据库中,我们需要构造SQL语句,所以要将存在CComVariant类的对象中的值取出变成       字符串,转化需要一个曲折CComVariant -> BSTR -> char *

     CComVariant 类的属性和接口:http://technet.microsoft.com/zh-cn/subscriptions/z255545y(v=vs.80).aspx

     8.1、CComVariant -> BSTR这个过程还有些小要求:

     (1) 调用CComVariant类的接口CopyTo(),将该类对象中的内容复制到BSTR类型的指针所指的对象中,

          CopyTo()函数的说明:http://technet.microsoft.com/zh-cn/subscriptions/37k91ewb(v=vs.80).aspx

     (2) 在调用CopyTo()之前,需要将CComVariant类的对象变成VT_BSTR类型,调用ChangeType()函数:http://msdn.microsoft.com/en-us/library/5b5x72ya(v=vs.80).aspx;;

          且BSTR的指针不可以是空的。

     8.2、BSTR -> char *:http://jingyan.baidu.com/article/c1a3101ee590e8de656deb1a.html(使用该连接中的方法一)

     8.3、CComVariant -> BSTR -> char *这是一种方法,另一种方法是直接使用bstrVal就可以将CComVariant 的对象转化为BSTR,然后再使用8.2的方法。

            CComVariant  tmp;

           BSTR bStr = tmp.bstrVal ; 即可

9、如何使用IXMLNode类提供的 selectNode() 函数依次读取同名结点,并对其做读写操作:

     http://technet.microsoft.com/zh-cn/subscriptions/ms757073.aspx


Windows编程方面:

1、如何依次读取某一文件夹下的所有文件:http://www.cnblogs.com/elucsn/archive/2012/02/24/2366780.html

这里的绝对路径的写法需要注意:"C:\\Users\\Administrator.wangxiaosu-PC\\Desktop\\Test\\Test_Read_File\\Test_Read_File\\lu\\*.*"

 #include<windows.h>

#include<string>
#include<vector>
#include<iostream>
#include<fstream>

using namespace std;

void get_filelist(char *foldname)
{
HANDLE file;
WIN32_FIND_DATA fileData;
char line[1024];
wchar_t fn[1000];


mbstowcs(fn,(const char*)foldname,999);
file = FindFirstFile(fn, &fileData);
FindNextFile(file, &fileData);


while(FindNextFile(file, &fileData))
{
wcstombs(line,(const wchar_t*)fileData.cFileName,259);
cout<<line<<endl;
}
}


int main()
{
get_filelist("C:\\Users\\Administrator.wangxiaosu-PC\\Desktop\\Test\\Test_Read_File\\Test_Read_File\\lu\\*.*");
return 0;
}



    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值