// 
//     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
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:toc: left
:toc-title:
:description: NetBeans IDE Tutorials

== Integration with External Tools and Services

To facilitate development of various types of applications, the NetBeans IDE provides integration with some external tools and services. The resources listed below will help you learn how to configure and use such tools and services, for example, connect to databases, manage your source code using version control software, and use the integrated support for issue trackers.

=== Databases

- link:oracle-db.html[Connecting to Oracle Database from NetBeans IDE]
- link:java-db.html[Working with the Java DB (Derby) Database]
- link:mysql.html[Connecting to a MySQL Database]
- link:install-and-configure-mysql-server.html[Setting Up the MySQL Database Server in the Windows Operating System]

=== Source Code Management

- link:git.html[Using Git in Apache NetBeans]
- link:mercurial.html[Using Mercurial in Apache NetBeans]
- link:mercurial-queues.html[Using Mercurial Queues in Apache NetBeans]
- link:subversion.html[Using Subversion in Apache NetBeans]
- link:cvs.html[Using CVS in Apache NetBeans]
- link:clearcase.html[Using ClearCase in Apache NetBeans]



