Last modified by christoph_lechleitner@iteg_at on 2013-01-31 07.32:56
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Objects (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -47,7 +47,7 @@ 47 47 <bp:property name="schemaEngine" ref="schemaEngine"></bp:property> 48 48 <bp:property name="baseVersion" value="0.1.00" /> 49 49 <bp:property name="baseTables"> 50 -<!-- Add List of TableDefinitions here (see below)-->50 +<!-- Add List of TableDefinitions here --> 51 51 </bp:property> 52 52 <bp:property name="upateSnippets"> 53 53 <!-- Add Update-Snippets here --> ... ... @@ -75,7 +75,8 @@ 75 75 76 76 public class TableDefinitions { 77 77 78 - // It is adviseable to provide the Strings used as names for tables and columns as constants, so they can be reused outside this object to build sql-statements 78 + /* It is adviseable to provide the Strings used as names for tables and columns as 79 + constants, so they can be reused to build sql-statements */ 79 79 public static final String TB_EXAMPLE_TABLE_NAME = "ADDRESSBOOK"; 80 80 public static final String COL_EXAMPLE_ID = "ID"; 81 81 public static final String COL_EXAMPLE_NAME = "NAME"; ... ... @@ -82,12 +82,12 @@ 82 82 public static final String COL_EXAMPLE_ADDRESS_REF = "ADDRESS"; 83 83 public static final String COL_EXAMPLE_BIRTHDAY = "BIRTHDAY"; 84 84 85 - / /...86 + /* ... */ 86 86 87 87 private List<TableInfo> setup; 88 88 89 89 public TableDefinitions() { 90 -/ /Create a table91 +/* Create a table */ 91 91 TableInfo exampleTable = new TableInfo(TB_EXAMPLE_TABLE_NAME); 92 92 exampleTable.setColumns( 93 93 Arrays.asList(new ColumnInfo[] { ... ... @@ -97,21 +97,21 @@ 97 97 new ColumnInfo(COL_EXAMPLE_BIRTHDAY, Types.DATE, 12, null, false, null) 98 98 })); 99 99 100 -/ /Example for creating a foreign key reference101 +/* Example for creating a foreign key reference */ 101 101 exampleTable.setForeignKeys(Arrays.asList(new ForeignKeyInfo[] { 102 102 new ForeignKeyInfo("FK_EXAMPLE_ADDRESS", COL_EXAMPLE_ADDRESS_REF, TB_ADDRESS, COL_ADDRESS_ID) 103 103 })); 104 104 105 -/ /Example for creating a primary key106 +/* Example for creating a primary key */ 106 106 exampleTable.setPrimaryKey( 107 107 new PrimaryKeyInfo("PK_EXAMPLE", COL_EXAMPLE_ID) 108 108 ); 109 109 110 -/ /...111 +/* ... */ 111 111 112 112 this.setup = Arrays.asList( 113 113 exampleTable, 114 -/ /...115 +/* ... */ 115 115 ); 116 116 117 117 } ... ... @@ -125,111 +125,20 @@ 125 125 126 126 You must inject {{code language="none"}}TableDefinitions.getSetup(){{/code}} into {{code language="none"}}SchemaManager.setBaseTables(){{/code}} before calling {{code language="none"}}SchemaManager.start(){{/code}}. 127 127 128 -Using Blueprint/Spring, you can do this byinsertingthe following snippetin the bean definition for SchemaManager:129 +Using Blueprint/Spring, you can do this with the following snippet: 129 129 130 -{{code language="html/xml"}} 131 -<!-- SchemaManager bean definition starts here ... --> 132 -<bp:property name="baseTables"> 133 -<bp:bean factory-ref="tableDefinitions" factory-method="getSetup" /> 134 -</bp:property> 135 -<!-- ... and continues here --> 131 +{{code language="none"}} 132 + 136 136 {{/code}} 137 137 138 -= {{id name="HowTocreateandupdateDatabasesusingSchemaManagerandSchemaUpdateSnippets-Updatingadatabaseschemawith ISchemaUpdateSnippet"/}}Updating a database schema withISchemaUpdateSnippet =135 += {{id name="HowTocreateandupdateDatabasesusingSchemaManagerandSchemaUpdateSnippets-UpdatingadatabaseschemawithSchemaUpdateSnippets"/}}Updating a database schema with SchemaUpdateSnippets = 139 139 140 140 To update the database or it's content with schema updates, you must create a new implementation of ISchemaUpdateSnippet ({{code language="none"}}org.clazzes.jdbc2xml.schema.ISchemaUpdateSnippet{{/code}}) for each consecutive update. SchemaManager takes a {{code language="none"}}Map<String, Class<? extends ISchemaUpdateSnippet>>{{/code}} which contains the update classes keyed by the originating (e.g. previous) version. 141 141 142 - Anexample for an implementation of a schema update snippet could look like this:139 + 143 143 144 -{{code language="java"}} 145 -package org.clazzes.example.jdbc2xml.updates; 141 + 146 146 147 -import java.sql.SQLException; 148 -import java.sql.Types; 149 -import java.util.Arrays; 150 -import org.clazzes.jdbc2xml.schema.ColumnInfo; 151 -import org.clazzes.jdbc2xml.schema.ISchemaEngine; 152 -import org.clazzes.jdbc2xml.schema.ISchemaUpdateSnippet; 153 -import org.clazzes.jdbc2xml.schema.PrimaryKeyInfo; 154 -import org.clazzes.jdbc2xml.schema.TableInfo; 155 - 156 -public class SchemaUpdate0_1_01 implements ISchemaUpdateSnippet { 157 - 158 -// This is only accessed through the getter 159 -private static final String TARGET_VERSION = "0.1.01"; 160 - 161 -// Here it is also adviseable to define constants for reuse in statements. 162 -public static final String COL_EXAMPLE_GENDER = "GENDER"; 163 - 164 - 165 -@Override 166 -public String getTargetVersion() { 167 -return TARGET_VERSION; 168 -} 169 - 170 -@Override 171 -public String getUpdateComment() { 172 -return "Adding column "+COL_EXAMPLE_GENDER+" to table "+TableDefinitions.TB_EXAMPLE_TABLE_NAME+"."; 173 -} 174 - 175 -@Override 176 -public void performUpdate(ISchemaEngine schemaEngine) throws SQLException { 177 -TableInfo ti = schemaEngine.fetchTableInfo(TableDefinitions.TB_EXAMPLE_TABLE_NAME, null); 178 - schemaEngine.addColumn(ti, new ColumnInfo(COL_EXAMPLE_GENDER, Types.VARCHAR, 1, null, true, null)); 179 -} 180 -} 181 - 182 - 183 -{{/code}} 184 - 185 -The return values of {{code language="none"}}ISchemaUpdateSnippet.getTargetVersion(){{/code}} and {{code language="none"}}ISchemaUpdateSnippet.getUpdateComment(){{/code}} are written to the {{code language="none"}}SCHEMA_HISTORY{{/code}} table. The update itself is performed in {{code language="none"}}ISchemaUpdateSnippet.performUpdate(){{/code}}. In the above example, it adds a column called {{code language="none"}}GENDER{{/code}} to the example table created by the TableDefinitions class above. 186 - 187 -To add an entire table you would use the {{code language="none"}}ISchemaEngine.createTable(){{/code}} method, like this: 188 - 189 -{{code language="java"}} 190 -@Override 191 -public void performUpdate(ISchemaEngine schemaEngine) throws SQLException { 192 - TableInfo tiGroup = new TableInfo(TB_GROUP); 193 - tiGroup.setColumns(Arrays.asList(new ColumnInfo[] { 194 - new ColumnInfo(TableDefinitions.COL_ID, Types.VARCHAR, 36, null, false, null), 195 - new ColumnInfo(TableDefinitions.COL_NAME, Types.VARCHAR, 100, null, false, null), 196 - new ColumnInfo(TableDefinitions.COL_DESCRIPTION, Types.VARCHAR, 512, null, true, null) 197 - })); 198 - tiGroup.setPrimaryKey(new PrimaryKeyInfo(PK_GROUP, TableDefinitions.COL_ID)); 199 - tiGroup.setIndices(Arrays.asList(new IndexInfo(IDX_GROUP_01, TableDefinitions.COL_NAME, true, null))); 200 - 201 -schemaEngine.createTable(tiGroup, true); 202 -} 203 -{{/code}} 204 - 205 -Executing a PreparedStatement also works, using ISchemaEngine.getConnection() to retrieve the database connection: 206 - 207 -{{code language="java"}} 208 -@Override 209 -public void performUpdate(ISchemaEngine schemaEngine) throws SQLException { 210 - String sql = "UPDATE "+TableDefinitions.TB_EXAMPLE_TABLE_NAME+" SET "+TableDefinitions.COL_EXAMPLE_NAME+"=?"; 211 - 212 - PreparedStatement ps = schemaEngine.getConnection().prepareStatement(sql); 213 - 214 - ps.setNull(1, Types.VARCHAR); 215 - 216 - ps.execute(); 217 -} 218 -{{/code}} 219 - 220 -To create the map of updates in Blueprint/Spring and inject them into SchemaManager, use the following xml-Snippet: 221 - 222 -{{code language="html/xml"}} 223 -<!-- SchemaManager bean definition starts here ... --> 224 -<bp:property name="upateSnippets"> 225 -<bp:map> 226 -<bp:entry key="0.1.00" value="org.clazzes.example.jdbc2xml.updates.SchemaUpdate0_1_01"></bp:entry> 227 -<!-- more entries come here: "key" is the schema version to update, "value" the qualified classname of the schema update --> 228 -</bp:map> 229 -</bp:property> 230 -<!-- ... and continues here --> 231 -{{/code}} 232 - 233 233 234 234 235 235
- Confluence.Code.ConfluencePageClass[0]
-
- Id
-
... ... @@ -1,1 +1,1 @@ 1 -6568 211 +656809 - URL
-
... ... @@ -1,1 +1,1 @@ 1 -https://clazzes.atlassian.net/wiki/spaces/JDBC2XML/pages/6568 21/How To create and update Databases using SchemaManager and SchemaUpdateSnippets1 +https://clazzes.atlassian.net/wiki/spaces/JDBC2XML/pages/656809/How To create and update Databases using SchemaManager and SchemaUpdateSnippets