Flutter数据库连接插件dart_mysql的使用
Flutter数据库连接插件dart_mysql的使用
dart_mysql
是一个用于Dart编程语言的MySQL驱动程序。
使用方法
连接到数据库
var settings = new ConnectionSettings(
host: 'localhost',
port: 3306,
user: 'root',
password: 'passwd',
db: 'test'
);
var conn = await MySqlConnection.connect(settings);
执行带有参数的查询
var userId = 1;
var results = await conn.query('select name, email, age from users where id = ?', [userId]);
使用查询结果
for (var row in results) {
print('Name: ${row[0]}, email: ${row[1]} age: ${row[2]}');
}
插入数据
var result = await conn.query(
'insert into users (name, email, age) values (?, ?, ?)',
['Bob', 'bob@bob.com', 25]
);
print("新用户的id: ${result.insertId}");
执行带有多个参数集的查询
var results = await conn.query(
'insert into users (name, email, age) values (?, ?, ?)',
[
['Bob', 'bob@bob.com', 25],
['Bill', 'bill@bill.com', 26],
['Joe', 'joe@joe.com', 37]
]
);
更新数据
await conn.query(
'update users set age=? where name=?',
[26, 'Bob']
);
完整示例
以下是一个完整的示例,展示了如何使用 dart_mysql
插件进行数据库操作:
import 'dart:async';
import 'package:dart_mysql/dart_mysql.dart';
Future<void> main() async {
// 打开一个连接(testdb 应该已经存在)
final conn = await MySqlConnection.connect(ConnectionSettings(
host: 'localhost',
port: 3306,
user: 'root',
db: 'test',
password: 'passwd'));
// 创建一个表
await conn.query(
'CREATE TABLE users (id int NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(255), email varchar(255), age int)');
// 插入一些数据
var result = await conn.query(
'insert into users (name, email, age) values (?, ?, ?)',
['Bob', 'bob@bob.com', 25]
);
print('插入行的id=${result.insertId}');
// 使用参数化查询查询数据库
var results = await conn.query(
'select name, email, age from users where id = ?',
[result.insertId]
);
for (var row in results) {
print('Name: ${row[0]}, email: ${row[1]} age: ${row[2]}');
}
// 更新一些数据
await conn.query(
'update users set age=? where name=?',
[26, 'Bob']
);
// 再次使用参数化查询查询数据库
var results2 = await conn.query(
'select name, email, age from users where id = ?',
[result.insertId]
);
for (var row in results2) {
print('Name: ${row[0]}, email: ${row[1]} age: ${row[2]}');
}
// 最后,关闭连接
await conn.close();
}
更多关于Flutter数据库连接插件dart_mysql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库连接插件dart_mysql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter应用中直接连接和操作MySQL数据库并不是常见的做法,因为Flutter主要用于构建跨平台的移动应用,而MySQL通常是用于服务器端的数据存储。直接在客户端(如Flutter应用)连接MySQL数据库会带来安全和管理上的挑战。
然而,如果你确实需要在Flutter应用中与MySQL数据库交互,通常的做法是通过一个中间层(如后端服务器)来处理数据库请求。后端服务器可以使用Node.js、Python、Ruby、PHP、Java等语言编写,并暴露RESTful API或GraphQL端点供Flutter应用调用。
不过,为了回答你的问题,并展示如何在Flutter中通过HTTP请求与MySQL数据库交互(尽管这不是直接连接),我将提供一个简单的示例,展示如何使用http
包向一个假设的后端服务器发送请求,并从MySQL数据库中获取数据。
1. 后端服务器示例(Node.js + Express + MySQL)
首先,我们需要在服务器端设置一个简单的Express应用,该应用将连接到MySQL数据库并暴露一个API端点。
// server.js
const express = require('express');
const mysql = require('mysql');
const cors = require('cors');
const app = express();
const port = 3000;
app.use(cors()); // 允许跨域请求
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'yourpassword',
database: 'yourdatabase'
});
connection.connect();
app.get('/api/data', (req, res) => {
const sql = 'SELECT * FROM yourtable';
connection.query(sql, (error, results, fields) => {
if (error) throw error;
res.json(results);
});
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
2. Flutter前端示例
在Flutter应用中,我们将使用http
包来向后端服务器发送GET请求,并处理返回的JSON数据。
首先,在pubspec.yaml
文件中添加http
依赖:
dependencies:
flutter:
sdk: flutter
http: ^0.13.3 # 请检查最新版本号
然后,在Dart代码中发送HTTP请求:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter MySQL Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Map<String, dynamic>> data = [];
@override
void initState() {
super.initState();
fetchData();
}
Future<void> fetchData() async {
final response = await http.get(Uri.parse('http://localhost:3000/api/data'));
if (response.statusCode == 200) {
setState(() {
data = jsonDecode(response.body) as List<Map<String, dynamic>>;
});
} else {
throw Exception('Failed to load data');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter MySQL Demo'),
),
body: ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(data[index]['yourColumnName']?.toString()),
);
},
),
);
}
}
在这个示例中,Flutter应用通过HTTP GET请求从Node.js + Express后端服务器获取数据,并在ListView中显示这些数据。请注意,这里的yourColumnName
应该替换为MySQL表中实际的列名。
这种方法虽然不是直接在Flutter应用中连接MySQL数据库,但它是更安全和更常见的做法。通过后端服务器处理数据库请求,你可以更好地控制访问权限、数据验证和安全性。