【问题标题】:C++ generating lots of data to input into SQLC++ 生成大量数据以输入 SQL
【发布时间】:2013-11-26 04:26:43
【问题描述】:

生成 2 个文件,其中 1 个包含用于存储到数据库中的数据,第二个包含将其上传到 SQL 所需的内容。代码没有编译,我不知道为什么。附带说明:我正在上传一个关系的 10,000 个,另一个关系的 20000 个,另一个关系的 200 个。

#include<iostream>
#include<fstream>
#include<cstdlib>

using namespace std;

int main()
{
    static const char alphanum[] =
    "0123456789"
    "!@#$%^&*"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz";
    int i;
    ofstream outFile;
    outFile.open("out.txt");

    for ( i = 1 ; i <= 30200 ; i++ )
{       
  if(i<=10000)
    outFile << rand() % 10  << "|" << alphanum[rand() % 8]<< "|" << alphanum[rand() % 10]<< "|" << rand() % 9 << "\n";

  else if(i>10000 && i<=30000)
    outFile << rand() % 11 << "|" << alphanum[rand() % 200] << "|" << rand() % 10  << "|" << rand() % 12 << "|" << "Nov 11 2013\n";
  else if(i>30000)
    outFile << rand() % 10 << "|" << alphanum[rand() % 8] << "\n";
}
    outFile.close("out.txt");

    outFile.open("populate.txt");
    for(i=1; i<=30200; i++)
      {
      if( i<=10000 )
        outFile << "LOAD DATA\n" << 
          "LOCAL INFILE "data/out.txt"\n" << 
          "REPLACE INTO TABLE Users\n" << 
          "FIELDS TERMINATED BY '|'\n"<<
          "(UserID, Username, Name, NOF);\n";

      else if ( i>10000 && i<=30000 )

        outFile >> "LOAD DATA\n"<< 
          "LOCAL INFILE "data/out.txt"\n" << 
          "REPLACE INTO TABLE Tweets\n" << 
          "FIELDS TERMINATED BY '|'\n" <<
          "(ID, Text, Length, Rating, Timestamp);\n";

      else if (i>30000)

        outFile  >> "LOAD DATA\n" << 
          "LOCAL INFILE "data/out.txt"\n" << 
          "REPLACE INTO TABLE Follows\n" << 
          "FIELDS TERMINATED BY '|'\n" <<
          "(UserID, Username);\n";
      }
    return 0;
}

感谢您的帮助

【问题讨论】:

  • 每当您发布有关构建错误的问题时,请在问题中包含 completeunedited 错误日志。还请指出错误发生在源代码中的哪些行。请阅读the Stack Overflow question checklist
  • 基本 string.tcc 998.5 和 fstream 742 void std:: basic_ofstream 的一些长而难以理解的混乱
  • outfile >> 我认为会出错。字符串文字之间的 data/out.txt 也可能是错误的。
  • 啊,谢谢帕特。我仍然得到一个 void std:: basic_ofstream,有什么想法吗?
  • 等等,我需要那个,你是说将内容上传到 SQL 还是 C++ 代码有误?

标签: c++ sql database random populate


【解决方案1】:

问题是您在尝试写入 outFile 时混合了输出 (&lt;&lt;) 和输入 (&gt;&gt;) 运算符。也就是说,您使用输入运算符而不是输出。

你也有这个问题

"LOCAL INFILE "data/out.txt"\n"

你不是说

"LOCAL INFILE data/out.txt\n"

"LOCAL INFILE \"data/out.txt\"\n"

或(知道 SQL 字符串用单引号括起来)

"LOCAL INFILE 'data/out.txt'\n"

很明显,您刚刚完成了一些替换的复制粘贴,您可能需要考虑制作一些将所有常见代码放在一个位置的东西,比如一个函数?这样,当您更改通用代码时,您只需在一处而不是多处进行(有可能忘记一个)。

【讨论】:

  • 在 sql 中,我习惯于在我从中获取信息的文件周围加上引号;我不知道没有它们是否可以工作,但我可以试试。
  • @user2976674 如果你想把双引号放在文字字符串中,你必须转义它们。
猜你喜欢
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
相关资源
最近更新 更多