Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nolasco281 en 2 Agosto 2014, 11:46 am



Título: Leer Metadatos
Publicado por: nolasco281 en 2 Agosto 2014, 11:46 am
Hola como estan

Quisiera saber si es posible crear una BD por xml es decir

tengo lo siquiente.

Escribo esto en mi aplicacion.

Código
  1. <NewDB>Crear BD</NewDB>
Código
  1. <TablaDB>Crea nueva tabla BD</TablaDB>

Por medio de lo de arriba me deberia de crear una base de datos una tabla etc.. ya sea en SQL o mySQL.

Bueno el punto es que debo de leer, investigar. se la estructura basica de xml pero debo de ver la metadata de la BD para poder crearla por xml estoy algo perdido ahi.

(http://1.bp.blogspot.com/-j1oeZnSx6lA/U9yzBYWD6yI/AAAAAAAAAw8/kasahv5sUhM/s1600/BD.png)

Espero puedan orientarme un poco.

Muchas gracias.


Título: Re: Leer Metadatos
Publicado por: eferion en 2 Agosto 2014, 12:05 pm
Crear una tabla es algo bastante más complejo. Hay que indicar también qué campos hay, que nombre tienen, de qué tipo es cada campo y ajustar algúnas configuraciones adicionales (longitud de los caracteres, si es clave primaria, campos que se autoincrementan ). Luego aparte también se suelen configurar reglas de acceso o disparadores ( para trabajar con tablas relacionales )....

Vamos, que por poder, sí prodrías conseguirlo, pero vas a tener que añadir más profundidad a esa etiqueta :)


Título: Re: Leer Metadatos
Publicado por: nolasco281 en 2 Agosto 2014, 12:30 pm
No claro la etiqueta que esta ahi es solo un ejemplo.

si no ando mal debo de crear una clase que me maneje el codigo de creacion de la BD tablas entre otros y que al momento de crear el xml me tome el formato de la BD es decir.

(http://2.bp.blogspot.com/-PA-VqAItxoY/U9y9aIAVItI/AAAAAAAAAxM/0d3u6ADQB1Y/s1600/BD2.png)

por medio del xml se creara la BD o Tables etc..

esa es la parte que no entiendo, alguna idea.



Título: Re: Leer Metadatos
Publicado por: eferion en 3 Agosto 2014, 11:57 am
Suponiendo que tuvieses algo del tipo

Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <NewTable name="nueva_tabla">
  3.  <cols>
  4.    <col>
  5.      <name>columna1</name>
  6.      <dataType>int</dataType>
  7.     </col>
  8.  </cols>
  9. </NewTable>

Tendrías que leer el XML y, simplificando, seguir el siguiente esquema. Nota que el código es una especie de pseudocódigo... el código final dependerá de la clase que uses para leer el XML.

Código
  1. XmlReader reader( fichero );
  2.  
  3. while ( reader.NextNode( ) )
  4. {
  5.  if ( reader.CurrentNode( ).Name( ) == "NewTable" )
  6.    NewTable( reader );
  7. }
  8.  
  9. void NewTable( XmlReader& reader )
  10. {
  11.  std::string tableName = reader.CurrentNode( ).Attribute( "name" ); // Recuperamos 'nueva_tabla'
  12.  std::vector< DBCol > columns;
  13.  
  14.  while ( reader.NextNode( ) )
  15.  {
  16.    if ( reader.CurrentNode( ).Name( ) == "cols" )
  17.      columns = ReadColumns( reader );
  18.  }
  19.  
  20.  std::string sql = "CREATE TABLE " + tableName + " (";
  21.  
  22.  for ( const auto& col : columns )
  23.  {
  24.    sql += col.Name( ) + ...
  25.  }
  26.  sql += ")";
  27.  
  28.  // Solo falta ejecutar la sentencia SQL
  29. }
  30.  
  31. void ReadColumns( XmlReader& reader )
  32. {
  33.  std::vector< DBCol > columns;
  34.  
  35.  while ( reader.NextNode( ) )
  36.  {
  37.    if ( reader.CurrentNode( ).Name( ) == "col" )
  38.      columns.push_back( ReadColumn( reader );
  39.  }
  40.  
  41.  return columns;
  42. }
  43.  
  44. void ReadColumn( XmlReader& reader )
  45. {
  46.  DBCol column;
  47.  
  48.  while ( reader.NextNode( ) )
  49.  {
  50.    if ( reader.CurrentNode( ).Name( ) == "name" )
  51.      column.SetName( reader.CurrentNode( ).ReadText( ) ); // Nombre de la columna
  52.    else if ( reader.CurrentNode( ).Name( ) == "dataType" )
  53.      column.SetType( reader.CurrentNode( ).ReadText( ) );
  54.  }
  55.  
  56.  return column;
  57. }


Título: Re: Leer Metadatos
Publicado por: nolasco281 en 3 Agosto 2014, 21:39 pm
Hola primeramente

Mil gracias me acabas de aclarar muchas de las dudas que tenia.

estare molestando en el transcurso de estos dias. y en el desarrollo de mi codigo.

Saludos y muchas gracias de nuevo se te agradece mucho el tiempo que se tomo.  ;-)