// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

.NetBeans IDE Tutorials
************************************************
- link:install-and-configure-mysql-server_pt_BR.html[Configurando o Servidor de Banco de Dados MySQL no Sistema Operacional Windows]
- link:platform-screencast_pt_BR.html[Criando Aplicações na Plataforma 6.9 do NetBeans]
- link:oracle-db_pt_BR.html[Estabelecendo Conexão ao Oracle Database por meio do NetBeans IDE]
- link:mysql_pt_BR.html[Estabelecendo Conexão com um Banco de Dados MySQL]
- link:index_pt_BR.html[NetBeans IDE Tutorials]
- link:database-improvements-screencast_pt_BR.html[Screencast: Suporte a Banco de Dados no NetBeans IDE]
- link:section_pt_BR.html[]
- link:java-db_pt_BR.html[Trabalhando com o Banco de Dados Java DB (Derby)]
- link:team-servers_pt_BR.html[Trabalhando com um Servidor de Equipe no NetBeans IDE]
- link:clearcase_pt_BR.html[Usando o Suporte de ClearCase no NetBeans IDE]
- link:cvs_pt_BR.html[Usando Suporte ao CVS no NetBeans IDE]
- link:mercurial_pt_BR.html[Usando Suporte ao Mercurial no NetBeans IDE]
- link:subversion_pt_BR.html[Usando Suporte ao Subversion no NetBeans IDE]
- link:git_pt_BR.html[Usando Suporte Git no NetBeans IDE]
- link:mercurial-queues_pt_BR.html[Usando Suporte para Filas do Mercurial no NetBeans IDE]
- link:github_nb_screencast_pt_BR.html[Vídeo da Configuração de um Repositório GitHub Usando o NetBeans IDE]
- link:overview-screencast_pt_BR.html[Visão Geral do NetBeans IDE 8.0]
************************************************


