# JDBC properties for Interbase 2007

# 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.

# Note: Properties starting with "datasource." will be fed into the datasource instance of the
# class configured via the datasource.class property

# Use this property if ddlutils does not recognize the platform from the settings
#ddlutils.platform=Interbase

#
# Using the plain DBCP datasource
#

datasource.class=org.apache.commons.dbcp.BasicDataSource
datasource.driverClassName=interbase.interclient.Driver
datasource.url=jdbc:interbase://localhost/C:/Borland/InterBase/ddlutils.ib
datasource.username=SYSDBA
datasource.password=masterkey

