目次
这里是Classroom的添加页面
这里是Classroom的管理页面
这里是Classroom--{{name}}的修改页面
ホームページ データベース mysql チュートリアル Python+Django+SAE系列课程13-MySQL记录的添删改

Python+Django+SAE系列课程13-MySQL记录的添删改

Jun 07, 2016 pm 04:25 PM
シリーズ コース

Python+Django+SAE系列教程13-----MySQL记录的添\删\改 建立了数据库后,我们就来做一个简单的表( person_classroom )的添加、删除、修改的操作。 首先我们建立一个添加的页面的模板 Classroom_Add.html(添加的表单) 并把它放在 Bidding\templates\person

Python+Django+SAE系列教程13-----MySQL记录的添\删\改

建立了数据库后,我们就来做一个简单的表(person_classroom)的添加、删除、修改的操作。

首先我们建立一个添加的页面的模板Classroom_Add.html(添加的表单)并把它放在Bidding\templates\person中:

Classroom_Add.html



    <title>数据库操作简单表的添加</title>


    <h1 id="这里是Classroom的添加页面">这里是Classroom的添加页面</h1>
    {% if error %}
        <p style="color: red;">请输入班级名称和导师姓名</p>
    {% endif %}
   
ログイン後にコピー
项目 内容
班级名称:
导师姓名:

Classroom_Add_results.html


    <title>查询用户结果页</title>


    
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
班级:{{name}}添加成功 !
点击返回
上面的 这个文件时添加后的结果页。

然后建立对应的view,我们修改person/views.py 文件

Views.py

# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.db import connection,transaction
from person.models import *

def ClassroonAdd(request):
    if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']:
        name = request.GET['name']
        tutor = request.GET['tutor']

        cursor=connection.cursor()
        sql='insert into person_classroom (name,tutor) values (\''+name+'\',\''+tutor+'\')'
        cursor.execute(sql)
        transaction.commit_unless_managed()
        cursor.close()
        
        return render_to_response('person/Classroom_Add_results.html',
            {'name': name})
    else:
        return render_to_response('person/Classroom_Add.html', {'error': True})
ログイン後にコピー

在修改一下urls.py文件:

from django.conf.urls import patterns, include, url


# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Bidding.views.home', name='home'),
    # url(r'^Bidding/', include('Bidding.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', 'Bidding.views.hello'),
    url(r'^time/$', 'Bidding.views.current_datetime'),
    url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'),
    url(r'^hello_base/$', 'Bidding.views.hello_base'),
    url(r'^request_test/$', 'Bidding.views.request_test'),
    url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'),
    url(r'^search/$', 'Bidding.Users.views.search'),
    url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'),
)
ログイン後にコピー

这时我们的添加就做好了,访问一下classroom/add这个 页面,就可以看到结果了。




不过上面我们所说的办法是执行一个原始的sql语句,这个方式其实并不是Django推荐的,我们可以直接使用models操作数据库的方法,改造一下ClassroomAdd这个视图:


def ClassroonAdd(request):
    if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']:
        name = request.GET['name']
        tutor = request.GET['tutor']
        c = ClassRoom(name=name,tutor=tutor)
        c.save()
        
        return render_to_response('person/Classroom_Add_results.html',
            {'name': name})
    else:
        return render_to_response('person/Classroom_Add.html', {'error': True})
ログイン後にコピー

这样的方法即简单,有不用我们很多sql的语法,并且最重要的是如果更换数据库类型(sqlserver->oracle),也不会因为受sql语法不一致的影响。

在接下来,我们来做一个列表页,把数据库中的Classroom表的记录以一个表格的形式显示出来。还是从模板先入手,建立一个Classroom_List.html,放入Bidding\templates\person文件夹下:

Classroom_List.html



    <title>数据库操作简单表的添加</title>


    <h1 id="这里是Classroom的管理页面">这里是Classroom的管理页面</h1>
        
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
{% for myclass in ClassroonList%} {% endfor %}
序号 班级名称 导师姓名
{{ myclass.id }} {{ myclass.name }} {{ myclass.tutor }}

添加视图:

# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.db import connection,transaction
from person.models import *

def ClassroonAdd(request):
    if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']:
        name = request.GET['name']
        tutor = request.GET['tutor']

        cursor=connection.cursor()
        sql='insert into person_classroom (name,tutor) values (\''+name+'\',\''+tutor+'\')'
        cursor.execute(sql)
        transaction.commit_unless_managed()
        cursor.close()
        
        return render_to_response('person/Classroom_Add_results.html',
            {'name': name})
    else:
        return render_to_response('person/Classroom_Add.html', {'error': True})


def ClassroonAdd(request):
    if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']:
        name = request.GET['name']
        tutor = request.GET['tutor']
        c = ClassRoom(name=name,tutor=tutor)
        c.save()
        
        return render_to_response('person/Classroom_Add_results.html',
            {'name': name})
    else:
        return render_to_response('person/Classroom_Add.html', {'error': True})





def ClassroonList(request):
        cursor=connection.cursor()
        sql='select id,name,tutor from person_classroom'
        ClassroonList=ClassRoom.objects.raw(sql)
        return render_to_response('person/Classroom_List.html',
            {'ClassroonList': ClassroonList})
ログイン後にコピー

配置urls.py:

from django.conf.urls import patterns, include, url


# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Bidding.views.home', name='home'),
    # url(r'^Bidding/', include('Bidding.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', 'Bidding.views.hello'),
    url(r'^time/$', 'Bidding.views.current_datetime'),
    url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'),
    url(r'^hello_base/$', 'Bidding.views.hello_base'),
    url(r'^request_test/$', 'Bidding.views.request_test'),
    url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'),
    url(r'^search/$', 'Bidding.Users.views.search'),
    url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'),
    url(r'^ClassRoom/list/$', 'person.views.ClassroonList'),
)
ログイン後にコピー

如同上述讨论的一样,我们现在的视图执行的是一个原始的sql,现在我们需要用models来修改一下:

def ClassroonList(request):
        cursor=connection.cursor()
        ClassroonList=ClassRoom.objects.all()
        #ClassroonList=ClassRoom.objects.filter(name__icontains='大')
        return render_to_response('person/Classroom_List.html',
            {'ClassroonList': ClassroonList})  
ログイン後にコピー

如果需要执行where或者order by等操作可以这样:

 ClassroonList=ClassRoom.objects.filter(name__icontains='').order_by(‘name’)

这里还有很多关于选择的内容以后我们逐渐会介绍到。

做完了列表页,我们在来做一个修改的页面,思路是这样的:在列表页中的每一行的后面添加一列“修改”按钮,点击按钮后跳转到修改页面,首先以此条记录的主键专递到修改页面,在修改页面中要先读取出数据库中的信息,然后点击确定按钮以后执行修改操作。

我们首先来修改这个管理页面的模板:

Classroom_List.html



    <title>数据库操作简单表的添加</title>


    <h1 id="这里是Classroom的管理页面">这里是Classroom的管理页面</h1>
        
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
{% for myclass in ClassroonList%} {% endfor %}
序号 班级名称 导师姓名 操作
{{ myclass.id }} {{ myclass.name }} {{ myclass.tutor }}

建立一个Classroom_Modify.html模板,把它放在Bidding\templates\person文件夹下

Classroom_Modify.html



    <title>数据库操作简单表的修改</title>


    <h1 id="这里是Classroom-name-的修改页面">这里是Classroom--{{name}}的修改页面</h1>
    {% if error %}
        <p style="color: red;">请输入班级名称和导师姓名</p>
    {% endif %}
   
ログイン後にコピー
项目 内容
班级名称:
导师姓名:

Classroom_Modify_results.html


    <title>查询用户结果页</title>


    
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  修改前 修改后
班级名称: {{old_name}} {{new_name}}
导师姓名: {{old_tutor}} {{new_tutor}}
修改成功!
点击返回

添加视图:

def ClassroonModify(request,id1):
    cursor=connection.cursor()
    sql='select id,name,tutor from person_classroom where id='+id1
    ClassroonList=ClassRoom.objects.raw(sql)
    old_name = ClassroonList[0].name
    old_tutor = ClassroonList[0].tutor
    if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']:
        new_name = request.GET['name']
        new_tutor = request.GET['tutor']
        cursor=connection.cursor()
        sql='update person_classroom set name=\''+new_name+'\',tutor=\''+new_tutor+'\' where id=\''+id1+'\''
        cursor.execute(sql)
        transaction.commit_unless_managed()
        cursor.close()
        return render_to_response('person/Classroom_Modify_results.html',
            {'old_name': old_name,'old_tutor':old_tutor,'new_name':new_name,'new_tutor':new_tutor})
    else:
        return render_to_response('person/Classroom_Modify.html', {'error': True,'id':id1,'name':old_name,'tutor':old_tutor})
ログイン後にコピー

编辑urls.py,这里面需要注意的是正则的写法,这个之前的章节已经说过了,这里我们可以再复习一遍:

from django.conf.urls import patterns, include, url


# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Bidding.views.home', name='home'),
    # url(r'^Bidding/', include('Bidding.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', 'Bidding.views.hello'),
    url(r'^time/$', 'Bidding.views.current_datetime'),
    url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'),
    url(r'^hello_base/$', 'Bidding.views.hello_base'),
    url(r'^request_test/$', 'Bidding.views.request_test'),
    url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'),
    url(r'^search/$', 'Bidding.Users.views.search'),
    url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'),
    url(r'^ClassRoom/list/$', 'person.views.ClassroonList'),
    url(r'^ClassRoom/modify/(\d+)/$', 'person.views.ClassroonModify'),
)
ログイン後にコピー

如同添加时候的问题,我们这里面使用的仍然是最原始的sql语句,我们同样可以给他修改成为model的方式:

def ClassroonModify(request,id1):
    cursor=connection.cursor()
    Classroon=ClassRoom.objects.get(id=id1)
    old_name = Classroon.name
    old_tutor = Classroon.tutor
    cursor.close()
    if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']:
        new_name = request.GET['name']
        new_tutor = request.GET['tutor']
        Classroon.name=new_name
        Classroon.tutor=new_tutor
        Classroon.save()
        return render_to_response('person/Classroom_Modify_results.html',
            {'old_name': old_name,'old_tutor':old_tutor,'new_name':new_name,'new_tutor':new_tutor})
    else:
        return render_to_response('person/Classroom_Modify.html', {'error': True,'id':id1,'name':old_name,'tutor':old_tutor})
ログイン後にコピー

这样看起来是不是简便多了?我们打开 页面看看效果吧 :




接下来我们来做删除的功能,首先修改列表页的模板,加入一列删除按钮:



    <title>数据库操作简单表的添加</title>


    <h1 id="这里是Classroom的管理页面">这里是Classroom的管理页面</h1>
        
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
{% for myclass in ClassroonList%} {% endfor %}
序号 班级名称 导师姓名 操作
{{ myclass.id }} {{ myclass.name }} {{ myclass.tutor }}

Classroom_Delete_results.html:


    <title>查询用户结果页</title>


    
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
班级:{{name}}删除成功 !
点击返回

修改视图:

def ClassroonDelete(request,id1):
    cursor=connection.cursor()
    Classroon=ClassRoom.objects.get(id=id1)
    old_name = Classroon.name
    Classroon.delete()
    ClassroonList=ClassRoom.objects.all()
    cursor.close()
  return render_to_response('person/Classroom_Delete_results.html',{'name':old_name})
ログイン後にコピー

配置urls.py:

from django.conf.urls import patterns, include, url


# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Bidding.views.home', name='home'),
    # url(r'^Bidding/', include('Bidding.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', 'Bidding.views.hello'),
    url(r'^time/$', 'Bidding.views.current_datetime'),
    url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'),
    url(r'^hello_base/$', 'Bidding.views.hello_base'),
    url(r'^request_test/$', 'Bidding.views.request_test'),
    url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'),
    url(r'^search/$', 'Bidding.Users.views.search'),
    url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'),
    url(r'^ClassRoom/list/$', 'person.views.ClassroonList'),
    url(r'^ClassRoom/modify/(\d+)/$', 'person.views.ClassroonModify'),
    url(r'^ClassRoom/delete/(\d+)/$', 'person.views.ClassroonDelete'),
)
ログイン後にコピー


到此,我们就做好了一个简单的表的添加、删除、修改的操作。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xiaomi 15シリーズの完全なコードネームが明らかに:Dada、Haotian、Xuanyuan Xiaomi 15シリーズの完全なコードネームが明らかに:Dada、Haotian、Xuanyuan Aug 22, 2024 pm 06:47 PM

Xiaomi Mi 15シリーズは10月に正式リリースされる予定で、その全シリーズのコードネームが海外メディアのMiCodeコードベースで公開されている。その中でもフラッグシップモデルであるXiaomi Mi 15 Ultraのコードネームは「Xuanyuan」(「玄源」の意味)です。この名前は中国神話に登場する高貴さを象徴する黄帝に由来しています。 Xiaomi 15のコードネームは「Dada」、Xiaomi 15Proのコード名は「Haotian」(「好天」の意味)です。 Xiaomi Mi 15S Proの内部コード名は「dijun」で、「山と海の古典」の創造神である淳皇帝を暗示しています。 Xiaomi 15Ultra シリーズのカバー

Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期 Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期 Aug 29, 2024 pm 03:33 PM

昨年Huawei Mate60シリーズが発売されて以来、個人的にはMate60Proをメインで使っています。ほぼ1年の間に、Huawei Mate60Proは複数のOTAアップグレードを受け、全体的なエクスペリエンスが大幅に向上し、人々に常に新しい感覚を与えました。たとえば、最近、Huawei Mate60 シリーズは再びイメージング機能の大幅なアップグレードを受けました。 1 つ目は、新しい AI 除去機能で、通行人やゴミをインテリジェントに除去し、空白領域を自動的に埋めることができます。2 つ目は、メインカメラの色の精度と望遠の鮮明さが大幅に向上しました。新学期シーズンであることを考慮して、Huawei Mate60シリーズは秋のプロモーションも開始しました。携帯電話の購入時に最大800元の割引が受けられ、開始価格は4,999元という低価格です。よく使われる、価値の高い新製品が多い

iPhone 15 と iPhone 15 Pro のどちらを選択すればよいですか? 9つの大きな違いを一度に iPhone 15 と iPhone 15 Pro のどちらを選択すればよいですか? 9つの大きな違いを一度に Sep 14, 2023 am 08:01 AM

本日、iPhone15とiPhone15Proが正式に発売されましたが、Proシリーズはハイエンドモデルとして価格が高いだけでなく、独自の機能も多く搭載されており、購入後に問題が発生しないように、消費者は購入前に違いを認識する必要があります。 iPhone15. Proシリーズのみの機能です。これらのモニターには同じ表示パネルが装備されていますが、ProMotion 自動適応更新頻度テクノロジーと常時表示機能は、依然として Pro シリーズ専用です。残りのiPhone 15およびiPhone 15 Proシリーズは、解像度、コントラスト、ピーク輝度などの点で同じです。アクションボタン アクションボタンは現在、iPhone 15 Pro シリーズ専用のデザインとなっており、ユーザーがカスタマイズできます。

殿堂入りしているシリーズは何ですか? 殿堂入りしているシリーズは何ですか? Feb 04, 2024 am 09:18 AM

メモリ モジュールを購入したいユーザーの多くは、GALAX 殿堂ブランドのメモリ モジュールがどのようなシリーズであるかを知りたいと考えていますが、実際、このブランドには現在、HOFEXTREME 限定版、HOFEXTREME、HOFPRORGB の 3 シリーズがあります。殿堂入り記念シリーズとは: A: HOFEXTREME 限定版、HOFEXTREME、HOFPRORGB。これら 3 つのメモリ モジュールはどれも比較的優れたパフォーマンスを持っていますが、その中でも HOFEXTREME 限定版のパフォーマンスが最も優れており、前の 2 つのモデルと比較すると、HOFPRORGB はわずかに性能が劣りますが、パフォーマンスも非常に優れています。殿堂入りメモリ拡張の紹介: 1. メモリ粒子の王様であり、長寿命である Samsung B-die 粒子を使用します。

12 ページの線形代数ノートは GitHub のホット リストに掲載され、偉大なギルバート ストラングから碑文も受け取りました。 12 ページの線形代数ノートは GitHub のホット リストに掲載され、偉大なギルバート ストラングから碑文も受け取りました。 Jul 25, 2023 pm 08:13 PM

線形代数の要点はすでに誰かによって描かれています。全12ページで半分はイラストなので、初心者でもわからなくても大丈夫!現在、このノートは GitHub で 4,000 以上のスターを獲得し、ホット リストにも載っています。写真のメモは「The Art of Linear Algebra」と呼ばれ、MIT の専門家ギルバート・ストラング教授による「Everyone のための線形代数」に基づいています。写真 日本語学者の平鍋健二氏は、この 368 ページの傑作をイラストに凝縮し、このメモのセットを作成して無料でオープンソースにし、後に国内のネチズン kfliu によって中国語に翻訳されました。その結果は GitHub 上で好評を博しただけでなく、原作者にも認められ、原作本の紹介ページにも掲載されました。

iPhone 15 Pro および 15 Pro Max の新しい改善プレビュー iPhone 15 Pro および 15 Pro Max の新しい改善プレビュー Sep 12, 2023 pm 10:45 PM

Appleは9月13日午前1時に、iPhone 15、15 Plus、15 Pro、15 Pro Maxという4つの新しいiPhoneモデルを発売します。上位モデルのiPhone 15 ProとPro Maxでは新デザインが採用され、側面素材がステンレススチールからチタンに変更されます。 Pro シリーズのカラーには、グレー、ブラック、ダークブルー、ホワイトなどのオプションがあります。今年のiPhone 15 ProとPro Maxの画面は、昨年の14 Proと14 Pro Maxよりもわずかに大きくなります。この変更は、Apple が LIPO (低射出圧力オーバーモールディング) と呼ばれる新しいプロセス技術を採用したことによるもので、これによりスクリーン フレームの厚さが約 3 分の 1 に減少します。ハイエンドモデルはマットな質感のチタンに変更

中国の公教育コースを購入する方法 中国の公教育コースを購入する方法 Mar 13, 2024 pm 12:22 PM

Zhonggong Education は、職業教育の知識に焦点を当て、ユーザーに包括的で豊富な学習リソースを提供することを目的としたソフトウェアです。職業試験を受けようとしている場合でも、職業スキルを向上させたい場合でも、中国公教育はあなたのニーズを満たすことができます。知識内容はさまざまな種類と段階に分かれており、必要な知識を体系的に学び習得できるよう、主にコース形式で提供しています。では、中国公教育アプリで必要なオンライン コースを購入するにはどうすればよいでしょうか? まだ知らないユーザーは、以下を読み続けてください。 China Public Education からオンライン コースを購入するにはどうすればよいですか? 1. 携帯電話で「中国公教育」と入力し、キーワードを入力します。 2. オンラインコースのタイプを選択します。 3. 右下隅にある「今すぐ購入」をクリックします。 4. 最後に、支払い方法を選択し、クリックして支払いを確認します。

Java 同時コレクション用の推奨学習リソース: 書籍、コース、オンライン チュートリアル Java 同時コレクション用の推奨学習リソース: 書籍、コース、オンライン チュートリアル Feb 19, 2024 pm 05:00 PM

Java 同時コレクションは、共有データへの同時アクセスを管理するために使用される Java プログラミング言語のコレクション クラス ライブラリです。 Java 同時コレクションは、キュー、スタック、マップ、コレクションなどのさまざまなデータ構造を提供します。これらのデータ構造はスレッドセーフであり、マルチスレッド環境で使用できます。 Java 並行コレクションを学習するには、次の書籍、コース、およびオンライン チュートリアルを参照してください。 書籍: 『Java Concurrent Programming in Practice』 これは、Brian Goetz と Tim Peierls の共著で、Java 並行プログラミングの分野における古典的な書籍です。 。この本では、スレッド セーフ、ロック、アトミック操作、メモリの可視性などをカバーする、Java 同時コレクションの使用方法とテクニックを詳細に紹介します。 『The Art of Concurrent Programming in Java』という本は、Doug Le によって書かれています。

See all articles