Это довольно долго, так как я чувствую, что проблема сложная.
Я следую инструкциям / учебным пособиям / что-у-тебя, которые я могу найти на mysql сайт, однако, я не могу заставить его работать. Я был в этом в течение нескольких дней. Сначала я столкнулся с проблемами пути, отсутствующими файлами и т. Д. c. Я думаю, что я исправил это, но я все еще не могу заставить это работать.
Я должен отметить, что я очень неопытен в работе с make-файлами и сложной компиляцией через терминал. Я знаю, как скомпилировать со знакомым g++ main.cpp -o main
, а затем запустить программу с ./main
, но это все. Затем я обнаружил, что у Ma c есть компиляторы clang ++.
Я работаю с этим примером кода:
#include <iostream>
#include <mysqlx/xdevapi.h>
using ::std::cout;
using ::std::endl;
using namespace ::mysqlx;
int main(int argc, const char* argv[])
try {
const char *url = (argc > 1 ? argv[1] : "mysqlx://root@127.0.0.1");
cout << "Creating session on " << url
<< " ..." << endl;
Session sess(url);
{
/*
TODO: Only working with server version 8
*/
RowResult res = sess.sql("show variables like 'version'").execute();
std::stringstream version;
version << res.fetchOne().get(1).get<string>();
int major_version;
version >> major_version;
if (major_version < 8)
{
cout <<"Done!" <<endl;
return 0;
}
}
cout <<"Session accepted, creating collection..." <<endl;
Schema sch= sess.getSchema("test");
Collection coll= sch.createCollection("c1", true);
cout <<"Inserting documents..." <<endl;
coll.remove("true").execute();
{
Result add;
add= coll.add(R"({ "name": "foo", "age": 1 })").execute();
std::vector<string> ids = add.getGeneratedIds();
cout <<"- added doc with id: " << ids[0] <<endl;
add= coll.add(R"({ "name": "bar", "age": 2, "toys": [ "car", "ball" ] })")
.execute();
if (ids.size() != 0)
cout <<"- added doc with id: " << ids[0] <<endl;
else
cout <<"- added doc" <<endl;
add= coll.add(R"({
"name": "baz",
"age": 3,
"date": { "day": 20, "month": "Apr" }
})").execute();
if (ids.size() != 0)
cout <<"- added doc with id: " << ids[0] <<endl;
else
cout <<"- added doc" <<endl;
add= coll.add(R"({ "_id": "myuuid-1", "name": "foo", "age": 7 })")
.execute();
ids = add.getGeneratedIds();
if (ids.size() != 0)
cout <<"- added doc with id: " << ids[0] <<endl;
else
cout <<"- added doc" <<endl;
}
cout <<"Fetching documents..." <<endl;
DocResult docs = coll.find("age > 1 and name like 'ba%'").execute();
DbDoc doc = docs.fetchOne();
for (int i = 0; doc; ++i, doc = docs.fetchOne())
{
cout <<"doc#" <<i <<": " <<doc <<endl;
for (Field fld : doc)
{
cout << " field `" << fld << "`: " <<doc[fld] << endl;
}
string name = doc["name"];
cout << " name: " << name << endl;
if (doc.hasField("date") && Value::DOCUMENT == doc.fieldType("date"))
{
cout << "- date field" << endl;
DbDoc date = doc["date"];
for (Field fld : date)
{
cout << " date `" << fld << "`: " << date[fld] << endl;
}
string month = doc["date"]["month"];
int day = date["day"];
cout << " month: " << month << endl;
cout << " day: " << day << endl;
}
if (doc.hasField("toys") && Value::ARRAY == doc.fieldType("toys"))
{
cout << "- toys:" << endl;
for (auto toy : doc["toys"])
{
cout << " " << toy << endl;
}
}
cout << endl;
}
cout <<"Done!" <<endl;
}
catch (const mysqlx::Error &err)
{
cout <<"ERROR: " <<err <<endl;
return 1;
}
catch (std::exception &ex)
{
cout <<"STD EXCEPTION: " <<ex.what() <<endl;
return 1;
}
catch (const char *ex)
{
cout <<"EXCEPTION: " <<ex <<endl;
return 1;
}
Вывод должен быть следующим:
Creating session on localhost, port 13009 ...
Session accepted, creating collection...
Inserting documents...
- added doc with id: AA71B4BF6B72E511BD76001E684A06F0
- added doc with id: 2885B4BF6B72E511BD76001E684A06F0
- added doc with id: 3492B4BF6B72E511BD76001E684A06F0
- added doc with id: myuuid-1
Fetching documents...
doc#0: {"_id": "AEFD9C44EB77E5116134001E684A06F0", "age": 3, "date": {"day": 20, "month": "Apr"}, "name": "baz"}
field `_id`: AEFD9C44EB77E5116134001E684A06F0
field `age`: 3
field `date`: <document>
field `name`: baz
name: baz
- date field
date `day`: 20
date `month`: Apr
month: Apr
day: 20
doc#1: {"_id": "A0ABC08DAABAD1110C120800273BD115", "age": 2, "name": "bar", "toys": ["car", "ball"]}
field `_id`: A0ABC08DAABAD1110C120800273BD115
field `age`: 2
field `name`: bar
field `toys`: <array with 2 element(s)>
name: bar
- toys:
car
ball
Done!
Поскольку я не знаком с передачей аргументов командной строки через makefiles, я избавился от URL-указателя и откорректировал строку подключения, внеся изменения в других местах по мере необходимости.
Это мой make-файл:
MYSQL_CONCPP_DIR = /usr/local/mysql-connector-c++-8.0.20
CPPFLAGS = -I $(MYSQL_CONCPP_DIR)/include -L $(MYSQL_CONCPP_DIR)/lib64
LDLIBS = -lmysqlcppconn8
CXX = clang++ -stdlib=libc++
CXXFLAGS = -std=c++11
app : app.cc
Я запускаю make app
, он работает без ошибок, но после этого ничего не отображается. Я дал ему go с обычным SQL, следуя другому учебнику на этом сайте здесь , но, опять же, ничего не отображается. Может ли кто-нибудь дать мне руководство? Я думаю, что проблема в make-файле, поэтому я хочу изменить его, но не знаю, что еще нужно изменить.