Fragment(四)Fragment生命周期分析

转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/24271607

 

例子一 从Layout中加载Fragment:

 

假设我们有一个Activity的Layout中有两个Fragment:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/container"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.androidtest.MainActivity"

android:orientation="horizontal"

tools:ignore="MergeRootFrame" >

<fragmentandroid:name="com.example.androidtest.FragmentA"

android:id="@+id/fragmentA"

android:layout_weight="1"

android:layout_width="match_parent"

android:layout_height="match_parent" />

<fragment android:name="com.example.androidtest.FragmentB"

android:id="@+id/fragmentB"

android:layout_weight="1"

android:layout_width="match_parent"

android:layout_height="match_parent" />

</LinearLayout>

而我们的Fragment很简单:

public class MainActivity extends FragmentActivity {

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d("==========","MainActivity onCreate");

setContentView(R.layout.activity_main);

Log.d("==========","MainActivity onCreate finish");

}

@Override

protectedvoid onDestroy() {

Log.d("==========","MainActivity onDestroy");

super.onDestroy();

Log.d("==========","MainActivity onDestroy finish");

}

@Override

protectedvoid onPause() {

Log.d("==========","MainActivity onPause");

super.onPause();

Log.d("==========","MainActivity onPause finish");

}

@Override

protectedvoid onResume() {

Log.d("==========","MainActivity onResume");

super.onResume();

Log.d("==========","MainActivity onResume finish");

}

@Override

protectedvoid onStart() {

Log.d("==========","MainActivity onStart");

super.onStart();

Log.d("==========","MainActivity onStart finish");

}

@Override

protectedvoid onStop() {

Log.d("==========","MainActivity onStop");

super.onStop();

Log.d("==========","MainActivity onStop finish");

}

}

接下来是我们的FragmentA:

public class FragmentA extends Fragment {

@Override

publicvoid onAttach(Activity activity) {

super.onAttach(activity);

Log.d("==========","FragmentA onAttach");

}

@Override

publicvoid onActivityCreated(Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

Log.d("==========","FragmentA onActivityCreated");

}

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d("==========","FragmentA onCreate");

}

@Override

publicView onCreateView(LayoutInflater inflater, ViewGroup container,

BundlesavedInstanceState) {

Log.d("==========","FragmentA onCreateView");

returninflater.inflate(R.layout.fragment_main, container, false);

}

@Override

publicvoid onDestroy() {

super.onDestroy();

Log.d("==========","FragmentA onDestroy");

}

@Override

publicvoid onDestroyView() {

super.onDestroyView();

Log.d("==========","FragmentA onDestroyView");

}

@Override

publicvoid onDetach() {

super.onDetach();

Log.d("==========","FragmentA onDetach");

}

@Override

publicvoid onPause() {

super.onPause();

Log.d("==========","FragmentA onPause");

}

@Override

publicvoid onResume() {

super.onResume();

Log.d("==========","FragmentA onResume");

}

@Override

publicvoid onStart() {

super.onStart();

Log.d("==========","FragmentA onStart");

}

@Override

publicvoid onStop() {

super.onStop();

Log.d("==========","FragmentA onStop");

}

}

Fragment B和A类似,只是log不同。

开始测试。运行程序,当出现界面之后,关闭屏幕电源,然后再点亮屏幕,出现屏幕之后再旋转屏幕,最后按back退出程序。

查看Log:

======运行程序

04-21 16:54:05.689: D/==========(31589):MainActivity onCreate

04-21 16:54:05.699: D/==========(31589):FragmentA onAttach

04-21 16:54:05.699: D/==========(31589):FragmentA onCreate

04-21 16:54:05.709: D/==========(31589):FragmentA onCreateView

04-21 16:54:05.709: D/==========(31589):FragmentB onAttach

04-21 16:54:05.709: D/==========(31589):FragmentB onCreate

04-21 16:54:05.709: D/==========(31589):FragmentB onCreateView

04-21 16:54:05.709: D/==========(31589):MainActivity onCreate finish

04-21 16:54:05.709: D/==========(31589):MainActivity onStart

04-21 16:54:05.709: D/==========(31589):FragmentA onActivityCreated

04-21 16:54:05.709: D/==========(31589):FragmentB onActivityCreated

04-21 16:54:05.709: D/==========(31589):FragmentA onStart

04-21 16:54:05.709: D/==========(31589):FragmentB onStart

04-21 16:54:05.709: D/==========(31589):MainActivity onStart finish

04-21 16:54:05.709: D/==========(31589):MainActivity onResume

04-21 16:54:05.709: D/==========(31589):MainActivity onResume finish

04-21 16:54:05.709: D/==========(31589):FragmentA onResume

04-21 16:54:05.709: D/==========(31589):FragmentB onResume

======关闭屏幕

04-21 16:54:09.929: D/==========(31589):MainActivity onPause

04-21 16:54:09.989: D/==========(31589):FragmentA onPause

04-21 16:54:09.989: D/==========(31589):FragmentB onPause

04-21 16:54:09.989: D/==========(31589):MainActivity onPause finish

04-21 16:54:09.999: D/==========(31589):MainActivity onStop

04-21 16:54:09.999: D/==========(31589):FragmentA onStop

04-21 16:54:09.999: D/==========(31589):FragmentB onStop

04-21 16:54:09.999: D/==========(31589):MainActivity onStop finish

======再次点亮屏幕

04-21 16:54:22.099: D/==========(31589):MainActivity onStart

04-21 16:54:22.099: D/==========(31589):FragmentA onStart

04-21 16:54:22.099: D/==========(31589):FragmentB onStart

04-21 16:54:22.099: D/==========(31589):MainActivity onStart finish

04-21 16:54:22.109: D/==========(31589):MainActivity onResume

04-21 16:54:22.109: D/==========(31589):MainActivity onResume finish

04-21 16:54:22.109: D/==========(31589):FragmentA onResume

04-21 16:54:22.109: D/==========(31589):FragmentB onResume

======旋转屏幕(导致重新创建Activity和Fragment)

04-21 16:54:26.729: D/==========(31589):MainActivity onPause

04-21 16:54:26.729: D/==========(31589):FragmentA onPause

04-21 16:54:26.729: D/==========(31589):FragmentB onPause

04-21 16:54:26.729: D/==========(31589):MainActivity onPause finish

04-21 16:54:26.729: D/==========(31589):MainActivity onStop

04-21 16:54:26.729: D/==========(31589):FragmentA onStop

04-21 16:54:26.729: D/==========(31589):FragmentB onStop

04-21 16:54:26.729: D/==========(31589):MainActivity onStop finish

04-21 16:54:26.729: D/==========(31589):MainActivity onDestroy

04-21 16:54:26.729: D/==========(31589):FragmentA onDestroyView

04-21 16:54:26.729: D/==========(31589):FragmentA onDestroy

04-21 16:54:26.729: D/==========(31589):FragmentA onDetach

04-21 16:54:26.729: D/==========(31589):FragmentB onDestroyView

04-21 16:54:26.729: D/==========(31589):FragmentB onDestroy

04-21 16:54:26.729: D/==========(31589):FragmentB onDetach

04-21 16:54:26.729: D/==========(31589):MainActivity onDestroy finish

04-21 16:54:26.739: D/==========(31589):MainActivity onCreate

04-21 16:54:26.749: D/==========(31589):FragmentA onAttach

04-21 16:54:26.749: D/==========(31589):FragmentA onCreate

04-21 16:54:26.749: D/==========(31589):FragmentA onCreateView

04-21 16:54:26.749: D/==========(31589):FragmentB onAttach

04-21 16:54:26.749: D/==========(31589):FragmentB onCreate

04-21 16:54:26.749: D/==========(31589):FragmentB onCreateView

04-21 16:54:26.749: D/==========(31589):MainActivity onCreate finish

04-21 16:54:26.749: D/==========(31589):MainActivity onStart

04-21 16:54:26.749: D/==========(31589):FragmentA onActivityCreated

04-21 16:54:26.749: D/==========(31589):FragmentB onActivityCreated

04-21 16:54:26.749: D/==========(31589):FragmentA onStart

04-21 16:54:26.749: D/==========(31589):FragmentB onStart

04-21 16:54:26.749: D/==========(31589):MainActivity onStart finish

04-21 16:54:26.749: D/==========(31589):MainActivity onResume

04-21 16:54:26.749: D/==========(31589):MainActivity onResume finish

04-21 16:54:26.749: D/==========(31589):FragmentA onResume

04-21 16:54:26.749: D/==========(31589):FragmentB onResume

04-21 16:54:26.759: E/ViewRootImpl(31589):sendUserActionEvent() mView == null

======按Back退出程序

04-21 16:54:33.249: D/==========(31589):MainActivity onPause

04-21 16:54:33.249: D/==========(31589):FragmentA onPause

04-21 16:54:33.249: D/==========(31589):FragmentB onPause

04-21 16:54:33.249: D/==========(31589):MainActivity onPause finish

04-21 16:54:33.439:W/IInputConnectionWrapper(31589): showStatusIcon on inactive InputConnection

04-21 16:54:33.469: D/==========(31589):MainActivity onStop

04-21 16:54:33.469: D/==========(31589):FragmentA onStop

04-21 16:54:33.469: D/==========(31589):FragmentB onStop

04-21 16:54:33.469: D/==========(31589):MainActivity onStop finish

04-21 16:54:33.469: D/==========(31589):MainActivity onDestroy

04-21 16:54:33.469: D/==========(31589):FragmentA onDestroyView

04-21 16:54:33.469: D/==========(31589):FragmentA onDestroy

04-21 16:54:33.469: D/==========(31589):FragmentA onDetach

04-21 16:54:33.469: D/==========(31589):FragmentB onDestroyView

04-21 16:54:33.469: D/==========(31589):FragmentB onDestroy

04-21 16:54:33.469: D/==========(31589):FragmentB onDetach

04-21 16:54:33.469: D/==========(31589):MainActivity onDestroy finish

例子二 从代码中加载Fragment

接下来我们将上面的例子改一下,在点击Activity界面一个Button的时候添加两个Fragment。

我们将Activity的layout文件改成如下所示:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/container"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

tools:context="com.example.androidtest.MainActivity"

tools:ignore="MergeRootFrame" >

<Button

android:id="@+id/btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content" >

</Button>

</LinearLayout>

将MainActivity的onCreate函数改成如下:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d("==========","MainActivity onCreate");

setContentView(R.layout.activity_main);

Buttonbtn = (Button) findViewById(R.id.btn);

btn.setOnClickListener(newOnClickListener() {

@Override

publicvoid onClick(View arg0) {

Fragmenta = new FragmentA();

FragmentTransactionft = getSupportFragmentManager().beginTransaction();

ft.add(R.id.container,a);

ft.commit();

}

});

Log.d("==========","MainActivity onCreate finish");

}

开始测试。运行程序,当出现界面之后,点击按钮,出现新的界面的之后,关闭屏幕电源,然后再点亮屏幕,出现屏幕之后再旋转屏幕,最后按back退出程序。

查看Log:

======运行程序

04-21 17:08:39.869: D/==========(2830):MainActivity onCreate

04-21 17:08:39.889: D/==========(2830):MainActivity onCreate finish

04-21 17:08:39.889: D/==========(2830):MainActivity onStart

04-21 17:08:39.889: D/==========(2830):MainActivity onStart finish

04-21 17:08:39.889: D/==========(2830):MainActivity onResume

04-21 17:08:39.889: D/==========(2830):MainActivity onResume finish

======点击按钮

04-21 17:08:46.039: D/==========(2830):FragmentA onAttach

04-21 17:08:46.039: D/==========(2830):FragmentA onCreate

04-21 17:08:46.039: D/==========(2830):FragmentA onCreateView

04-21 17:08:46.039: D/==========(2830): FragmentAonActivityCreated

04-21 17:08:46.039: D/==========(2830):FragmentA onStart

04-21 17:08:46.039: D/==========(2830):FragmentA onResume

======关闭屏幕

04-21 17:09:23.239: D/==========(2830):MainActivity onPause

04-21 17:09:23.329: D/==========(2830): FragmentAonPause

04-21 17:09:23.329: D/==========(2830):MainActivity onPause finish

04-21 17:09:23.429: D/==========(2830):MainActivity onStop

04-21 17:09:23.429: D/==========(2830):FragmentA onStop

04-21 17:09:23.429: D/==========(2830):MainActivity onStop finish

======再次点亮屏幕

04-21 17:09:46.779: D/==========(2830):MainActivity onStart

04-21 17:09:46.779: D/==========(2830):FragmentA onStart

04-21 17:09:46.779: D/==========(2830):MainActivity onStart finish

04-21 17:09:46.789: D/==========(2830): MainActivityonResume

04-21 17:09:46.789: D/==========(2830):MainActivity onResume finish

04-21 17:09:46.789: D/==========(2830):FragmentA onResume

======旋转屏幕

04-21 17:09:53.339: D/==========(2830):MainActivity onPause

04-21 17:09:53.339: D/==========(2830):FragmentA onPause

04-21 17:09:53.349: D/==========(2830):MainActivity onPause finish

04-21 17:09:53.349: D/==========(2830):MainActivity onStop

04-21 17:09:53.349: D/==========(2830):FragmentA onStop

04-21 17:09:53.349: D/==========(2830):MainActivity onStop finish

04-21 17:09:53.349: D/==========(2830):MainActivity onDestroy

04-21 17:09:53.349: D/==========(2830):FragmentA onDestroyView

04-21 17:09:53.349: D/==========(2830):FragmentA onDestroy

04-21 17:09:53.349: D/==========(2830):FragmentA onDetach

04-21 17:09:53.349: D/==========(2830):MainActivity onDestroy finish

04-21 17:09:53.359: D/==========(2830):FragmentA onAttach

04-21 17:09:53.359: D/==========(2830):FragmentA onCreate

04-21 17:09:53.359: D/==========(2830):MainActivity onCreate

04-21 17:09:53.379: D/==========(2830):MainActivity onCreate finish

04-21 17:09:53.379: D/==========(2830):MainActivity onStart

04-21 17:09:53.379: D/==========(2830):FragmentA onCreateView

04-21 17:09:53.379: D/==========(2830):FragmentA onActivityCreated

04-21 17:09:53.379: D/==========(2830):FragmentA onStart

04-21 17:09:53.379: D/==========(2830):MainActivity onStart finish

04-21 17:09:53.379: D/==========(2830):MainActivity onResume

04-21 17:09:53.379: D/==========(2830):MainActivity onResume finish

04-21 17:09:53.379: D/==========(2830):FragmentA onResume

04-21 17:09:53.399: E/ViewRootImpl(2830):sendUserActionEvent() mView == null

======按back退出程序

04-21 17:10:14.069: D/==========(2830):MainActivity onPause

04-21 17:10:14.069: D/==========(2830):FragmentA onPause

04-21 17:10:14.079: D/==========(2830):MainActivity onPause finish

04-21 17:10:14.249:W/IInputConnectionWrapper(2830): showStatusIcon on inactive InputConnection

04-21 17:10:14.269: D/==========(2830):MainActivity onStop

04-21 17:10:14.269: D/==========(2830):FragmentA onStop

04-21 17:10:14.269: D/==========(2830):MainActivity onStop finish

04-21 17:10:14.269: D/==========(2830):MainActivity onDestroy

04-21 17:10:14.269: D/==========(2830):FragmentA onDestroyView

04-21 17:10:14.269: D/==========(2830):FragmentA onDestroy

04-21 17:10:14.269: D/==========(2830):FragmentA onDetach

04-21 17:10:14.269: D/==========(2830):MainActivity onDestroy finish

例子三 Hide Fragment之后的生命周期

我们在main activity中添加两个按钮,一个add fragment,一个hidefragment

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/container"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

tools:context="com.example.androidtest.MainActivity"

tools:ignore="MergeRootFrame" >

<Button

android:id="@+id/btn1"

android:text="add Fragment"

android:layout_width="wrap_content"

android:layout_height="wrap_content" >

</Button>

<Button

android:id="@+id/btn2"

android:text="hide Fragment"

android:layout_width="wrap_content"

android:layout_height="wrap_content" >

</Button>

</LinearLayout>

修改MainActivity的onCreate函数

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d("==========","MainActivity onCreate");

setContentView(R.layout.activity_main);

Buttonbtn1 = (Button) findViewById(R.id.btn1);

btn1.setOnClickListener(newOnClickListener() {

@Override

publicvoid onClick(View arg0) {

Log.d("==========","Add Fragment");

Fragmenta = new FragmentA();

FragmentTransactionft = getSupportFragmentManager().beginTransaction();

ft.add(R.id.container,a,"Fragment A");

ft.commit();

}

});

Buttonbtn2 = (Button) findViewById(R.id.btn2);

btn2.setOnClickListener(newOnClickListener() {

@Override

publicvoid onClick(View arg0) {

Log.d("==========","Hide Fragment");

FragmentTransactionft = getSupportFragmentManager().beginTransaction();

ft.hide(getSupportFragmentManager().findFragmentByTag("FragmentA"));

ft.commit();

}

});

Log.d("==========","MainActivity onCreate finish");

}

开始测试。运行程序,当出现界面之后,点击add Fragment,出现新的界面的之后,再点击hide Fragment,然后关闭屏幕,接着点亮屏幕。

查看Log:

======运行程序

04-21 17:18:53.069: D/==========(3974):MainActivity onCreate

04-21 17:18:53.079: D/==========(3974):MainActivity onCreate finish

04-21 17:18:53.079: D/==========(3974):MainActivity onStart

04-21 17:18:53.079: D/==========(3974):MainActivity onStart finish

04-21 17:18:53.079: D/==========(3974):MainActivity onResume

04-21 17:18:53.079: D/==========(3974):MainActivity onResume finish

======点击add Fragment

04-21 17:18:55.729: D/==========(3974): AddFragment

04-21 17:18:55.729: D/==========(3974):FragmentA onAttach

04-21 17:18:55.729: D/==========(3974):FragmentA onCreate

04-21 17:18:55.729: D/==========(3974):FragmentA onCreateView

04-21 17:18:55.729: D/==========(3974):FragmentA onActivityCreated

04-21 17:18:55.729: D/==========(3974):FragmentA onStart

04-21 17:18:55.729: D/==========(3974):FragmentA onResume

======点击hide Fragment

04-21 17:19:03.409: D/==========(3974):Hide Fragment

======关闭屏幕

04-21 17:19:20.349: D/==========(3974):MainActivity onPause

04-21 17:19:20.369: D/==========(3974):FragmentA onPause

04-21 17:19:20.369: D/==========(3974):MainActivity onPause finish

04-21 17:19:20.379: D/==========(3974):MainActivity onStop

04-21 17:19:20.379: D/==========(3974):FragmentA onStop

04-21 17:19:20.379: D/==========(3974):MainActivity onStop finish

======点亮屏幕

04-21 17:19:35.079: D/==========(3974):MainActivity onStart

04-21 17:19:35.079: D/==========(3974):FragmentA onStart

04-21 17:19:35.079: D/==========(3974):MainActivity onStart finish

04-21 17:19:35.089: D/==========(3974):MainActivity onResume

04-21 17:19:35.089: D/==========(3974):MainActivity onResume finish

04-21 17:19:35.089: D/==========(3974):FragmentA onResume

我们发现虽然我们的Fragment被hide起来了,但是因为他没有被移除掉,所以他的生命周期还是会被宿主Activity影响。

Fragment(四)Fragment生命周期分析(转)的更多相关文章

  1. 12、Cocos2dx 3.0游戏开发找小三之3.0中的生命周期分析

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706303 生命周期分析 在前面文章中我们执行了第 ...

  2. Django(35)Django请求生命周期分析(超详细)

    Django请求生命周期分析 1.客户端发送请求 在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都 ...

  3. Django(47)drf请求生命周期分析

    前言   一般我们写完序列化以后,我们就会开始写视图了,drf中我们一般使用CBV的方式,也就是类视图的方式,最基础的我们会使用from rest_framework.views import API ...

  4. Android Fragment详解(二):Fragment创建及其生命周期

    Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 创建片元(Creating a Fragment) To c ...

  5. Android开发 - Fragment与Activity生命周期比较

    1. Fragment的生命周期 见下图 2. 与Activity生命周期的对比 见下图 3. 代码场景演示实例 切换到该Fragment: AppListFragment(7649): onAtta ...

  6. Activity ViewPager Fragment框架的生命周期

    1.Fragment的生命周期函数 onAttach.onCreate.onCreateView.onViewCreated.onActivityCreated.onStart.onResume.on ...

  7. *Fragment与Activity生命周期的协调

    本文出处:http://blog.csdn.net/think_soft/article/details/7272869 拥有Fragment的Activity的生命周期直接影响了其中的Fragmen ...

  8. fragment hide/show 生命周期

    Fragment的使用越来越普遍了,掌握它的生命周期以及注意事项时非常有必要的,首先 All subclasses of Fragment must include a public empty co ...

  9. Android 中Activity生命周期分析(二):从AActivity 到BActivity过程分析

    如果你没有动手去演示的话,你一定要去动手试试看,这个东西非学容易出错,面试中经常出现,好了,上代码: package com.king.review.base; import android.app. ...

随机推荐

  1. 错误记录-spring+mybatis

    1.Syntax error on token "String", @ expected 解决:去掉类名后的括号 ps:这错误太二了 2.The nested type UserS ...

  2. mysql 数据表

    CREATE DATABASE IF NOT EXISTS  `shop`;USE `shop`; drop table if exists lidepeng; create table lidepe ...

  3. hdu_4507_吉哥系列故事——恨7不成妻(鬼畜数位DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题意:中文,不解释,注意的是求的是合法数字的平方和,即(a+b+c+……)^2 题解:数位DP, ...

  4. hdu_3001_Travelling(状压DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题意:给你N个点,M条边,每个点最多走两次,问走完N个点最短的路程为多少. 题解:注意这题有重边 ...

  5. IoC容器Autofac正篇之简单实例(四)

    先上一段代码. namespace ConsoleApplication3 { class Program { static void Main(string[] args) { ContainerB ...

  6. isPostBack原理

    从 到输入用户名,点击提交按钮 这个过程就叫做postback(是两个不同的状态)     利用ispostback原理,实现是否第一次进入处理程序(上一个用用户名判断的不好,会导致在用户名空的情况下 ...

  7. 获取表空间的语句 以及 建表和索引的ddl

    alter session set container=PHD1; SET SERVEROUTPUT ON SET LINESIZE SET FEEDBACK OFF SET PAGESIZE sel ...

  8. selenium2(WebDriver) API

    selenium2(WebDriver) API 作者:Glen.He出处:http://www.cnblogs.com/puresoul/  1.1  下载selenium2.0的包 官方downl ...

  9. Android OpenGL ES(一)OpenGL ES介绍

    在学习Android OpenGL ES开发之前,你必须具备Java 语言开发经验和一些Android开发的基本知识,但并不需要有图形开发的经验,本教程也会涉及到一些基本的线性几何知识,如矢量,矩阵运 ...

  10. JPA 系列教程9-双向一对一唯一外键

    双向一对一唯一外键的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(25 ...