Flutter数据库连接插件dart_mysql的使用

发布于 1周前 作者 wuwangju 来自 Flutter

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

1 回复

更多关于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数据库,但它是更安全和更常见的做法。通过后端服务器处理数据库请求,你可以更好地控制访问权限、数据验证和安全性。

回到顶部