2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.database
.types
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
15 import eu
.etaxonomy
.cdm
.database
.CdmDataSource
;
16 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
23 public class SqlServer2005DatabaseType
extends DatabaseTypeBase
{
26 protected String typeName
= "SQL Server";
29 protected String classString
= "com.microsoft.sqlserver.jdbc.SQLServerDriver";
32 protected String urlString
= "jdbc:sqlserver://";
34 //[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
37 protected int defaultPort
= 1433;
40 protected String hibernateDialect
= "SQLServer2005Dialect";
42 public String
getConnectionString(ICdmDataSource ds
, int port
){
43 return getConnectionString(ds
, port
, null);
46 public String
getConnectionString(ICdmDataSource ds
, int port
, String instanceName
){
48 if (instanceName
!= null && ! instanceName
.equals("")){
49 instance
= "\\" + instanceName
;
51 return urlString
+ ds
.getServer() + instance
+ ":" + port
+ ";databaseName=" + ds
.getDatabase() +";SelectMethod=cursor";
56 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getServerNameByConnectionString(java.lang.String)
59 public String
getServerNameByConnectionString(String connectionString
) {
60 String dbSeparator
= ";";
61 return super.getServerNameByConnectionString(connectionString
, urlString
, dbSeparator
);
66 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getPortByConnectionString(java.lang.String)
69 public int getPortByConnectionString(String connectionString
) {
70 String dbSeparator
= ";";
71 return getPortByConnectionString(connectionString
, urlString
, dbSeparator
);
75 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getServerNameByConnectionString(java.lang.String)
78 public String
getDatabaseNameByConnectionString(String connectionString
){
80 String dbStart
= ";databaseName=";
81 int posDbStart
= connectionString
.indexOf(dbStart
);
82 result
= connectionString
.substring(posDbStart
+ dbStart
.length());
83 int posNextAttr
= result
.indexOf(";");
84 if (posNextAttr
!= 0){
85 result
= result
.substring(0, posNextAttr
);
91 public SqlServer2005DatabaseType() {
92 init (typeName
, classString
, urlString
, defaultPort
, hibernateDialect
);
97 * Deletes all foreign keys between tables in a sql server database.
98 * This makes deleting tables easier.
99 * @param sqlServerDataSource
101 * @throws SQLException
103 public boolean deleteForeignKeys(CdmDataSource sqlServerDataSource
) throws SQLException
{
104 String sql
= "SELECT name, id FROM sys.sysobjects WHERE (xtype = 'U')"; //all tables
105 ResultSet rs
= sqlServerDataSource
.executeQuery(sql
);
107 String tableName
= rs
.getString("name");
108 long tableId
= rs
.getLong("id");
109 sql
= "SELECT name FROM sys.sysobjects WHERE xtype='F' and parent_obj = " + tableId
;//get foreignkeys
110 ResultSet rsFk
= sqlServerDataSource
.executeQuery(sql
);
112 String fk
= rsFk
.getString("name");
113 sql
= " ALTER TABLE "+tableName
+" DROP CONSTRAINT "+fk
+ "";
114 sqlServerDataSource
.executeUpdate(sql
);