diff --git a/applications/examples/mysqlexample/demo01.cpp b/applications/examples/mysqlexample/demo01.cpp new file mode 100644 index 0000000..7bb3793 --- /dev/null +++ b/applications/examples/mysqlexample/demo01.cpp @@ -0,0 +1,123 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +std::string generateRandomString(size_t length) +{ + const std::string CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + std::random_device dev; + std::mt19937 rng(dev()); + std::uniform_int_distribution<> dist(0, CHARACTERS.size() - 1); + + std::string random_string; + for (size_t i = 0; i < length; ++i) { + random_string += CHARACTERS[dist(rng)]; + } + + return random_string; +} + +int main() +{ + try + { + // 数据库连接配置 + std::string server = "tcp://127.0.0.1:3306"; + std::string username = "root"; + std::string password = "Hj57471000"; + std::string database = "hjems"; + + // 创建连接 + sql::mysql::MySQL_Driver *driver; + driver = sql::mysql::get_mysql_driver_instance(); + std::unique_ptr< sql::Connection > con(driver->connect(server, username, password)); + + // 设置为使用指定数据库 + con->setSchema(database); + + // 准备SQL查询语句 + //std::string sql = "SELECT uid, uname, upasswd, usalt, email, mobile1, mobile2, memo FROM tbl_user WHERE uid = ?"; + std::string sql = "SELECT uid, uname, upasswd, usalt, email, mobile1, mobile2, memo FROM tbl_user WHERE uid LIKE ?"; + + // 创建预编译的prepared statement + std::unique_ptr< sql::PreparedStatement > pstmt(con->prepareStatement(sql)); + + // 绑定参数 + //pstmt->setString(1, "hkc"); // 替换为你要查询的用户名 + + // 绑定参数,使用 '%' 作为通配符进行模糊匹配 + // 例如,搜索以 'user' 开头的所有用户名 + std::string pattern = "user%"; // 替换为你要查询的模式 + pstmt->setString(1, pattern); + + // 执行查询 + std::unique_ptr< sql::ResultSet > res(pstmt->executeQuery()); + + // 处理结果集 + while (res->next()) { + // 假设username和password都是字符串类型 + std::string user = res->getString("uname"); + std::string pass = res->getString("upasswd"); + std::string usalt = res->getString("usalt"); + std::string email = res->getString("email"); + std::string mobile1 = res->getString("mobile1"); + std::string mobile2 = res->getString("mobile2"); + std::string memo = res->getString("memo"); + + std::cout << "Username: " << user << ", Password: " << pass << std::endl; + std::cout << "Salt: " << usalt << ", email: " << email << std::endl; + std::cout << "mobile1: " << mobile1 << ", mobile2: " << mobile2 << std::endl; + std::cout << "Memo: " << memo << std::endl; + } + + + // 插入新用户记录的 SQL 语句 + std::string insertSql = "INSERT INTO tbl_user (uid, uname, upasswd, usalt,memo) VALUES (?, ?, ?,?,?)"; + + // 创建预编译的 prepared statement 对象 + std::unique_ptr insertStmt(con->prepareStatement(insertSql)); + + // 绑定插入数据的参数 + size_t passwordLength = 12; // 密码长度不超过12个字符 + std::string newUid = generateRandomString(passwordLength); + //const std::string newUid = "new_uid"; // 替换为新用户的用户名 + const std::string newSalt = "1C915F2C045EA7628E3CF170BFA59F51"; // 替换为新用户的密码 + const std::string newUser = "new_username"; // 替换为新用户的用户名 + const std::string newPassword = "new_password"; // 替换为新用户的密码 + const std::string newMemo = "新备注信息"; + + insertStmt->setString(1, newUid); + insertStmt->setString(2, newUser); + insertStmt->setString(3, newPassword); + insertStmt->setString(4, newSalt); + insertStmt->setString(5, newMemo); + + // 执行插入操作 + int rowsAffected = insertStmt->executeUpdate(); + + // 检查插入操作是否成功 + if (rowsAffected > 0) + { + std::cout << "New user inserted successfully." << std::endl; + } else { + std::cout << "No rows affected during insert operation." << std::endl; + } + + // 关闭连接 + con->close(); + } + catch (sql::SQLException &e) { + std::cerr << "SQLException: " << e.what(); + std::cerr << " (MySQL error code: " << e.getErrorCode(); + std::cerr << ", SQLState: " << e.getSQLState() << " )" << std::endl; + } + + return 0; +} \ No newline at end of file