簡體   English   中英

插入到MySQL數據庫中的表后出現錯誤消息

[英]Error message after inserting to a table in MYSQL db

我有運行良好的C ++代碼,我可以從表中讀取並寫入表中:

int main()

{


    // Try to get a driver to use to connect to our DBMS
    try
    {
        driver = get_driver_instance();
    }
    catch (sql::SQLException e)
    {
        cout << "Could not get a database driver. Error message: " << e.what() << endl;
        system("pause");
        exit(1);
    }

    // Try to connect to the DBMS server
    try
    {
        dbConn = driver->connect(server, username, password);
    }
    catch (sql::SQLException e)
    {
        cout << "Could not connect to database. Error message: " << e.what() << endl;
        system("pause");
        exit(1);
    }

    stmt = dbConn->createStatement(); // Specify which connection our SQL statement should be executed on

    // Try to query the database
    try
    {
        stmt->execute("USE test");  // Select which database to use. Notice that we use "execute" to perform a command.

        res = stmt->executeQuery("INSERT INTO users (fName, lName, age) VALUES ('fname', 'lname', 25)"); // Perform a query and get the results. Notice that we use "executeQuery" to get results back
        //res = stmt->executeQuery("SELECT * FROM users");
        //return 0;
    }
    catch (sql::SQLException e)
    {
        cout << "SQL error. Error message: " << e.what() << endl;
        system("pause");
        exit(1);
    }


    sql::ResultSetMetaData *res_meta = res -> getMetaData();
    int columns = res_meta -> getColumnCount();


    // While there are still results (i.e. rows/records) in our result set...
    while (res->next())
    {

        for (int i = 1; i <= columns; i++) {
                cout << res->getString(i) << " | " ;
                }
         cout << endl;
    }

    delete res;
    delete stmt;
    delete dbConn;
    //system("pause");
    return 0;
}

所以,這插入到表中,但隨后我收到此錯誤消息

SQL錯誤。 錯誤消息:sh:1:暫停:找不到

如果我使用“選擇”,則不會發生這種情況。

我也知道這個問題已經在這里過了,但不幸的是它沒有答案,所以我再問一次。

INSERT不是查詢。 嘗試使用executeUpdate()而不是executeQuery()。 這里查看官方的MySQL示例。

替換此行

res = stmt->executeQuery("INSERT INTO users (fName, lName, age) VALUES ('fname', 'lname', 25)"); // Perform a query and get the results. Notice that we use "executeQuery" to get results back

包含以下幾行(您可能需要一個新的.h文件):

sql::PreparedStatement *pstmt;

pstmt = con->prepareStatement("INSERT INTO users (fName, lName, age) 
VALUES ('fname', 'lname', 25)");
res = pstmt->executeUpdate();
delete pstmt;

您還可以嘗試使用execute(),如 Stackoverflow問題所示。 函數execute()用於一般的SQL命令,但在返回值上可能不像其他指定函數那樣冗長(它返回布爾值)。

您的問題看起來與MySQL查詢執行有關, 但引發異常

executeQuery()假定sql查詢應返回sql::ResultSet但您的INSERT INTO查詢則不會。 您可以改用execute() ,它返回true或false:

try
{
    stmt->execute("USE test");
    stmt->execute("INSERT INTO users (fName, lName, age) VALUES ('fname', 'lname', 25)");
}
catch (sql::SQLException e)
{
    cout << "SQL error. Error message: " << e.what() << endl;
    exit(1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM