| 1 19 package org.lucane.server.database.xml; 20 21 import org.lucane.common.Logging; 22 23 import org.w3c.dom.*; 24 import java.sql.*; 25 import java.util.ArrayList ; 26 import java.util.Iterator ; 27 28 public class DefaultTableCreator extends TableCreator 29 { 30 36 public void createTableFromXmlNode(Connection connection, Node node) 37 throws Exception  38 { 39 ArrayList indexes = new ArrayList (); 40 StringBuffer query =new StringBuffer ("CREATE TABLE "); 41 String tableName = node.getAttributes().getNamedItem("name").getNodeValue(); 42 query.append(tableName); 43 query.append("("); 44 45 node = node.getFirstChild(); 47 while(node != null) 48 { 49 if(node.getNodeName().equals("column")) 50 { 51 String columnName = node.getAttributes().getNamedItem("name").getNodeValue(); 52 String columnType = node.getAttributes().getNamedItem("type").getNodeValue(); 53 String columnNotNull = "false"; 54 if(node.getAttributes().getNamedItem("notnull") != null) 55 columnNotNull = node.getAttributes().getNamedItem("notnull").getNodeValue(); 56 57 query.append(columnName); 58 query.append(" "); 59 query.append(getDbLayer().resolveType(columnType)); 60 61 if(Boolean.valueOf(columnNotNull).booleanValue()) 62 query.append(" NOT NULL"); 63 64 query.append(", "); 65 } 66 else if(node.getNodeName().equals("primary-key")) 67 { 68 String columns = node.getAttributes().getNamedItem("columns").getNodeValue(); 69 query.append(" PRIMARY KEY("); 70 query.append(columns); 71 query.append("), "); 72 } 73 else if(node.getNodeName().equals("index")) 74 { 75 String name = node.getAttributes().getNamedItem("name").getNodeValue(); 76 String columns = node.getAttributes().getNamedItem("columns").getNodeValue(); 77 indexes.add(new TableIndex(name, tableName, columns)); 78 } 79 node = node.getNextSibling(); 80 } 81 query.delete(query.length()-2, query.length()); 82 query.append(")"); 83 84 Statement s = connection.createStatement(); 86 s.execute(query.toString()); 87 s.close(); 88 89 Logging.getLogger().finest(query.toString()); 90 91 createIndexes(connection, indexes.iterator()); 92 } 93 94 97 private void createIndexes(Connection connection, Iterator indexes) 98 throws SQLException 99 { 100 while(indexes.hasNext()) 101 { 102 TableIndex index = (TableIndex)indexes.next(); 103 StringBuffer query = new StringBuffer (); 104 query.append("CREATE INDEX "); 105 query.append("idx_"); 106 query.append(index.getTable()); 107 query.append('_'); 108 query.append(index.getName()); 109 query.append(" ON "); 110 query.append(index.getTable()); 111 query.append(" ("); 112 query.append(index.getColumns()); 113 query.append(')'); 114 115 Statement s = connection.createStatement(); 116 s.execute(query.toString()); 117 s.close(); 118 119 Logging.getLogger().finest(query.toString()); 120 } 121 } 122 } 123 | Popular Tags |