dart之Flutter/dart-从mysql服务器数据库下载数据

lexus 阅读:921 2023-08-25 12:46:42 评论:0

作为序言,我对所有这些都是新手,不需要一步一步的信息,只是看看有什么可能。

我一直在尝试将我的 flutter/dart 应用程序连接到 mysql 后端

我使用 sqljocky 连接到它,想知道是否有用户可以从它下载数据以供离线使用。我阅读了有关 NSUserDefaults(适用于 ios)和 Shared_Preferences(适用于 android)的内容,用于在应用程序上存储持久和简单的数据,并想知道这是否是继续前进的正确途径。

请您参考如下方法:

我认为这里需要这个答案:

几天前,我不得不处理一个现有的 MySQL 数据库,除了通过网络请求(有一个与 Dart 2 不兼容的 sqljocky 包)之外,没有办法用 Dart 来处理它。阅读最佳选择 here .

在这里,我将展示一个使用 Flutter http 请求和简单的 PHP 和 MySQL 获取简单数据的示例。

注意:这可能不是 100% 安全的。

如果你在本地服务器上做,你需要运行服务器(例如:apache)和 MySQL(你可以使用 XAMPP 来获得两者)。

  • 第 1 步:创建数据库。
  • 第 2 步: 在 htdocs(在 XAMP 中)中创建一个文件夹。接下来,在该文件中创建名为 conn.php 的文件。然后,添加以下代码段并更改 使用您的数据库凭据连接到数据库。

    <?php 
     
        $connection = new mysqli("localhost", "username", "password", "db_name"); 
     
        if (!$connection) { 
            echo "connection failed!"; 
            exit(); 
        } 
    ?> 
    

注意:上面的代码片段是一个简单的示例,您可以根据需要进行自定义。

  • 第 3 步: 创建名为 fetch_data.php 的 php 文件并复制粘贴到下面的代码片段中:

    <?php  
     
      include("conn.php"); 
     
      $queryResult = $connection-> 
          query("SELECT * FROM your_table");//change your_table with your database table that you want to fetch values 
     
      $result = array(); 
     
      while ($fetchdata=$queryResult->fetch_assoc()) { 
          $result[] = $fetchdata; 
      } 
     
      echo json_encode($result); 
     ?> 
    

上面的代码片段将从数据库表中获取数据并在json_encode之后显示。

第 4 步:打开您的 Flutter 项目或创建一个。下面是请求获取数据并使用 ListView 显示它们的代码片段。

import 'dart:convert'; 
 
import 'package:flutter/material.dart'; 
import 'package:http/http.dart' as http; 
 
void main() => runApp(MyApp()); 
 
class MyApp extends StatelessWidget { 
  @override 
  Widget build(BuildContext context) { 
    return MaterialApp( 
      title: "Login", 
      debugShowCheckedModeBanner: false, 
      home: HomePage(), 
    ); 
  } 
} 
 
class HomePage extends StatefulWidget { 
  @override 
  _HomePageState createState() => _HomePageState(); 
} 
 
class _HomePageState extends State<HomePage> { 
  List data = []; 
 
  @override 
  void initState() { 
    fetchData(); 
    super.initState(); 
  } 
 
  void fetchData() async { 
    final response = await http.get('http://10.0.2.2/fluttertest/fetch_data.php'); 
 
    if (response.statusCode == 200) { 
      setState(() { 
        data = json.decode(response.body); 
      }); 
    } 
  } 
 
  @override 
  Widget build(BuildContext context) { 
    return Scaffold( 
      appBar: AppBar(), 
      body: ListView.builder( 
          itemCount: data.length, 
          itemBuilder: (BuildContext context, int index) => ListTile( 
                title: Text(data[index]['title']), 
              )), 
    ); 
  } 
} 

有一件重要的事情,你应该记住:10.0.2.2 或你的机器 IP 地址(在 cmd 中输入 ipconfig 来获取你的 IP 地址)必须使用是因为模拟器本身是 localhost(127.0.0.1)。

注意:我没有使用任何模型或高级东西来向您展示最简单的示例。如果你想要一个很好的 CRUD 示例,请检查 my github repo你也可以做一些拉取请求,因为它可以扩展。

如果要插入或更新数据,可以使用http.post(),在php中使用INSERT, UPDATE sql语句(最好使用Prepared Statement来防止sql注入(inject))。

您也可以阅读我的文章。我已经使用 CRUD 应用程序解释了所有内容。


标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

全民解析

全民解析

关注我们