我正在开发一个 Ballerina 项目,需要连接到 MySQL 数据库。我用它config.toml
来存储 MySQL 连接详细信息,但我不确定正确的格式和所需字段。
以下是我迄今为止尝试过的方法config.toml
:
host = "localhost"
port = 3306
username = "root"
password = "password"
database = "testdb"
在我的 Ballerina 服务中,我正在加载这些配置来初始化 MySQL 客户端,但我一直遇到诸如Invalid database configuration
或 之类的错误Connection timeout
。
有人可以指导我如何正确配置config.toml
Ballerina 中 MySQL 连接的文件,以及如何在 Ballerina 代码中使用这些配置来建立成功的连接吗?
这是我的db.bal
。我尝试了这些方法,但得到了上述错误
import ballerinax/mysql;
import ballerina/sql;
// import ballerinax/mysql.driver as _;
// Configurable variables
configurable string HOST = ?;
configurable int PORT = ?;
configurable string USERNAME = ?;
configurable string PASSWORD = ?;
configurable string DATABASE = ?;
// Client options configuration (if needed)
configurable mysql:Options & readonly connectionOptions = {};
// Initialize the MySQL client
mysql:Client|sql:Error dbClientResult = new (HOST, USERNAME, PASSWORD, DATABASE, PORT);
// Ensure dbClient is correctly initialized
final mysql:Client dbClient = check dbClientResult;
# Insert a new user into the database
isolated function insertUser(User entry) returns sql:ExecutionResult|error {
User {userId, email, password, createdAt, updatedAt} = entry;
sql:ParameterizedQuery insertQuery = `INSERT INTO users (id, email, password, createdAt, updatedAt)
VALUES (${userId}, ${email}, ${password}, ${createdAt}, ${updatedAt})`;
return dbClient->execute(insertQuery);
}
# Select a user by ID
isolated function selectUserById(int id) returns User|sql:Error {
sql:ParameterizedQuery selectQuery = `SELECT * FROM users WHERE id = ${id}`;
return dbClient->queryRow(selectQuery);
}
# Select a user by email (for login)
isolated function selectUserByEmail(string email) returns User|sql:Error {
sql:ParameterizedQuery selectQuery = `SELECT * FROM users WHERE email = ${email}`;
return dbClient->queryRow(selectQuery);
}
# Insert a new chat into the database
isolated function insertChat(Chat entry) returns sql:ExecutionResult|error {
Chat {chatId, userId, role, text, img, createdAt} = entry;
sql:ParameterizedQuery insertQuery = `INSERT INTO chats (id, userId, role, text, img, createdAt)
VALUES (${chatId}, ${userId}, ${role}, ${text}, ${img}, ${createdAt})`;
return dbClient->execute(insertQuery);
}
# Select a chat by ID and userId
isolated function selectChatByIdAndUser(int id, int userId) returns Chat|sql:Error {
sql:ParameterizedQuery selectQuery = `SELECT * FROM chats WHERE id = ${id} AND userId = ${userId}`;
return dbClient->queryRow(selectQuery);
}
# Select all chats for a user
isolated function selectChatsByUserId(int userId) returns Chat[]|error {
sql:ParameterizedQuery selectQuery = `SELECT * FROM chats WHERE userId = ${userId}`;
stream<Chat, error?> chatStream = dbClient->query(selectQuery);
return from Chat chat in chatStream select chat;
}
# Insert a new user chat entry into the database
isolated function insertUserChat(UserChat entry) returns sql:ExecutionResult|error {
UserChat {id, userId, chatId, title, createdAt} = entry;
sql:ParameterizedQuery insertQuery = `INSERT INTO user_chats (id, userId, chatId, title, createdAt)
VALUES (${id}, ${userId}, ${chatId}, ${title}, ${createdAt})`;
return dbClient->execute(insertQuery);
}
# Select all user chats by userId
isolated function selectUserChatsByUserId(int userId) returns UserChat[]|error {
sql:ParameterizedQuery selectQuery = `SELECT * FROM user_chats WHERE userId = ${userId}`;
stream<UserChat, error?> userChatStream = dbClient->query(selectQuery);
return from UserChat userChat in userChatStream select userChat;
}
我正在使用:
- 芭蕾舞女演员版本:2201.10.0(天鹅湖更新10)
任何帮助或可行的示例都将不胜感激!
1
最佳答案
2
您的代码中存在几个问题。
- 您需要
mysql.driver
导入,因为没有驱动程序您无法连接到 MySQL 数据库。 - 您的配置变量和中的值
Config.bal
不同。这些是区分大小写的,您应该遵循这一点。使用这个Config.toml
可以解决这个问题:
HOST = "localhost" PORT = 3306 USERNAME = "root" PASSWORD = "password" DATABASE = "testdb"
您可以查看来了解有关 Ballerina 配置的更多信息。
4
-
我已经这样做了但仍然显示这些错误
– -
在您最初分享的屏幕截图中,似乎有一些与解析 TOML 内容相关的警告。您可以先尝试解决它们以确保 TOML 内容正确,然后再尝试运行程序吗?
–
-
@AdithyaBandara 您能展示一下修复这些问题后出现了什么错误吗?
– -
我明白了谢谢你的支持
–
|
确保您有一个在本地运行的 MySQL 数据库。
mysql -h localhost -P 3306 -u root -p
- 输入通行证
- 执行
USE testdb;
|
–
|