mysql connector c++ 抛出异常

我在官网下了mysql-connector-c++-8.0.17之后跑官网上的例程,抛出了下面这个错误:
Connector/C++ standalone program example...

Creating session on tcp://127.0.0.1 ...

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
已放弃 (核心已转储)

我想知道是哪里出了问题,应该怎么解决

我用的系统是Ubuntu 18.04.4

下面是我的cmake

cmake_minimum_required(VERSION 3.10)

project(SERVER)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Boost Library
set(BOOST_INC_DIR /usr/local/include)
set(BOOST_LIB_DIR /usr/local/lib)

include_directories(${BOST_INC_DIR})
link_directories(${BOOST_LIB_DIR})

add_subdirectory(src)
# Class MySqlConnector referenced by Class MySqlSession
set(MYSQLCONNECTOR_LIB_DIR /usr/local/lib/mysql-connector-c++)
set(MYSQLCONNECTOR_INC_DIR /usr/local/include)
set(MYSQLCONNECTOR_SRC mysqlcppconn)

include_directories(${MYSQLCONNECTOR_INC_DIR} ${SQL_INC_DIR})
link_directories(${MYSQLCONNECTOR_LIB_DIR})

add_executable(Server main.cpp)

target_link_libraries(Server ${MYSQLCONNECTOR_SRC})
/*
 * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License, version 2.0, as
 * published by the Free Software Foundation.
 *
 * This program is also distributed with certain software (including
 * but not limited to OpenSSL) that is licensed under separate terms,
 * as designated in a particular file or component or in included license
 * documentation.  The authors of MySQL hereby grant you an
 * additional permission to link the program and your derivative works
 * with the separately licensed software that they have included with
 * MySQL.
 *
 * Without limiting anything contained in the foregoing, this file,
 * which is part of MySQL Connector/C++, is also subject to the
 * Universal FOSS Exception, version 1.0, a copy of which can be found at
 * http://oss.oracle.com/licenses/universal-foss-exception.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License, version 2.0, for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
 */
/*
   Basic example of an application using JDBC API of Connector/C++
*/
/* Standard C++ includes */
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <stdexcept>
/*
  Note: Boost must be in the include path to build code which uses the
  JDBC API.
*/
#include <boost/scoped_ptr.hpp>
#include <mysql/jdbc.h>
#define DEFAULT_URI "tcp://127.0.0.1"
#define EXAMPLE_USER "root"
#define EXAMPLE_PASS ""
#define EXAMPLE_DB "test"
using namespace std;
/*
  Usage example for Driver, Connection, (simple) Statement, ResultSet
*/
int main(int argc, const char **argv)
{
  const char   *url = (argc > 1 ? argv[1] : DEFAULT_URI);
  const string user(argc >= 3 ? argv[2] : EXAMPLE_USER);
  const string pass(argc >= 4 ? argv[3] : EXAMPLE_PASS);
  const string database(argc >= 5 ? argv[4] : EXAMPLE_DB);
  cout << endl;
  cout << "Connector/C++ standalone program example..." << endl;
  cout << endl;
  try {
    sql::Driver * driver = sql::mysql::get_driver_instance();
    /* Using the Driver to create a connection */
    cout << "Creating session on " << url << " ..."
         << endl << endl;
    boost::scoped_ptr< sql::Connection >
      con(driver->connect(url, user, pass));
    con->setSchema(database);
    boost::scoped_ptr< sql::Statement > stmt(con->createStatement());
    boost::scoped_ptr< sql::ResultSet >
      res(stmt->executeQuery("SELECT 'Welcome to Connector/C++' AS _message"));
    cout << "\t... running 'SELECT 'Welcome to Connector/C++' AS _message'"
         << endl;
    while (res->next())
    {
      cout << "\t... MySQL replies: " << res->getString("_message") << endl;
      cout << "\t... say it again, MySQL" << endl;
      cout << "\t....MySQL replies: " << res->getString(1) << endl;
    }
  }
  catch (sql::SQLException &e)
  {
    /*
      The JDBC API throws three different exceptions:
    - sql::MethodNotImplementedException (derived from sql::SQLException)
    - sql::InvalidArgumentException (derived from sql::SQLException)
    - sql::SQLException (derived from std::runtime_error)
    */
    cout << "# ERR: SQLException in " << __FILE__;
    cout << "(" << "EXAMPLE_FUNCTION" << ") on line " << __LINE__ << endl;
    /* Use what() (derived from std::runtime_error) to fetch the error message */
    cout << "# ERR: " << e.what();
    cout << " (MySQL error code: " << e.getErrorCode();
    cout << ", SQLState: " << e.getSQLState() << " )" << endl;
    return EXIT_FAILURE;
  }
  cout << endl;
  cout << "... find more at http://www.mysql.com" << endl;
  cout << endl;
  return EXIT_SUCCESS;
}

1个回答

weixin_41928081
路人mobu 我这是Ubuntu的
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问