在MySQL 8中使用MySQL驱动程序在MySQL语句中传递C++变量,0+

7kjnsjlb  于 2023-04-29  发布在  Mysql
关注(0)|答案(2)|浏览(86)

我看过Stack Overflow的大量答案和问题,但它们都是针对旧版本的MySQL的。我也在互联网上寻找答案,并尝试了许多不同的方法都无济于事。所以问题是,我如何在MySQL查询中使用C变量。
例如:
pstmt = con->prepareStatement("SELECT balance FROM accounts WHERE id = [C++ Var]");
其中[C++ Var]是C
变量。我不确定在MySQL 8中使用MySQL 5中的旧方法是否是一个好主意。我认为最有效的方法是使用SET @var_name = data方法,但我找不到任何方法在C中实现它。目前我使用的是MySQL/C Connector 8。0与司机谢谢你!

sqxo8psd

sqxo8psd1#

我不明白为什么你需要在这里使用MySQL @xxx变量。
使用旧的MySQL C++ API(似乎是在Java JDBC API之后建模的)prepareStatment调用应该如下所示:

pstmt = con->prepareStatement("SELECT balance FROM accounts WHERE id = ?");

之后你应该使用类似于

pstmt->setInt(1, userId); //where userId is a C++ int
ResultSet res* = pstmt->executeQuery()

使用较新的C++ API(X Dev API),调用将类似于以下内容:

Table accounts = db.getTable("accounts");
auto query = accounts.select("balance").where("id = :account_id");

RowResult res = query.bind("account_id", account_id).execute(); // where account_id is the name of an int variable.
kknvjkwl

kknvjkwl2#

这些链接示例似乎都基于涉及单个表的查询。但是真实的的查询经常涉及几个表之间的关系。这个也很管用。请注意,如果有多个变量,则按它们出现的顺序绑定它们。

// Perform any operations on the table or query data as needed
string sql = "Select distinct foodname, price, storename from prices \
        join foods on(foods.foodkey = prices.foodkey) \
        join stores on(stores.storekey = prices.storekey) \
        where price > ? and storename like ?";
           
    //bind two parameters to the query
    SqlStatement query = session.sql(sql);
    float pval = 2.0;
    query.bind(pval);
    query.bind("V%");
    
    SqlResult res = query.execute();

您可以重新绑定新参数并再次运行查询,而无需重新编译它。

相关问题