<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>Bitacoras.com: canal "sqlite"</title>
	<atom:link href="http://bitacoras.com/feed/canales/sqlite" rel="self" type="application/rss+xml" />
	<link>http://bitacoras.com/feed/canales/sqlite</link>
	<description>Se muestran las ultimas 20 anotaciones para el canal "sqlite"</description>
	<copyright>Copyright 2008</copyright>
	<pubDate>Tue, 29 Jul 2008 01:17:57 +0200</pubDate>
	<generator>Bitacoras.com/2.0</generator>
	<image>
		<url>http://bitacoras.com/public/images/logo.png</url>
		<title>Bitacoras.com: canal "sqlite"</title>
		<link>http://bitacoras.com/feed/canales/sqlite</link>
	</image>
	<item>
		<dc:creator>David Mart&#237;nez</dc:creator>
		<title>Consejos para portabilidad de bases de datos</title>
		<link>http://dmnet.bitacoras.com/archivos/programacion/consejos-para-portabilidad-de-bases-de-datos.php</link>
		<guid isPermaLink="true">http://dmnet.bitacoras.com/archivos/programacion/consejos-para-portabilidad-de-bases-de-datos.php</guid>
		<pubDate>Tue, 29 Jul 2008 01:17:57 +0200</pubDate>
		<category>programacion</category>
		<description><![CDATA[Por David Martínez en Delirios de un Informático el 29 de julio de 2008 a las 01:17:57

Hay proyectos en los que es necesario pensar en la portabilidad de la base de datos, permitiendo que funcione perfectamente en diferentes servidores. Por ejemplo, el famoso phpBB soporta 7 sistemas. Esto no es recomendable en proyectos en los que el rendimiento es algo vital como sitios web y só &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/dmnet">David Martínez</a> en <a href="http://bitacoras.com/bitacora/dmnet.bitacoras.com">Delirios de un Informático</a> el 29 de julio de 2008 a las 01:17:57</p>

<p>Hay proyectos en los que es necesario pensar en la portabilidad de la base de datos, permitiendo que funcione perfectamente en diferentes servidores. Por ejemplo, el famoso <a href="http://www.phpbb.com">phpBB</a> soporta <a href="http://www.phpbb.com/about/features/index.php#data-management">7 sistemas</a>. Esto no es recomendable en proyectos en los que el rendimiento es algo vital como sitios web y sólo debe aplicarse a proyectos donde prima la portabilidad.</p><br /><br /><br /><br /><p>A nivel de aplicación, esto requiere el uso de una capa de abstracción que hoy en día integran la mayoría de <em>frameworks</em> o que puede lograrse con con la <a href="http://es2.php.net/manual/es/pdo.drivers.php">extensión PDO</a> de PHP o clases como <a href="http://adodb.sourceforge.net/">ADOdb</a>. Y para <em>convertir</em> las bases de datos entre sí, ya he hablado de <a href="http://dmnet.bitacoras.com/archivos/software/sql-translator-conversor-de-bases-de-datos.php">SQL::Translator</a>, un potente <em>script</em> programado en Perl.</p><br /><br /><br /><br /><p><h3>Conoce el estándar SQL-92</h3></p><br /><br /><p>En la <a href="http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt">especificación de SQL-92</a> se definen los puntos comunes del lenguaje. Tenerlos claros los puntos es primordial como por ejemplo el uso de comillas simples para literales.</p><br /><br /><br /><br /><p><h3>Comprueba todos los datos antes de enviarlos a la base de datos</h3></p><br /><br /><p>Esto debe ser básico en cualquier desarrollo, pero nunca sobra recordarlo. Todos los datos que se almacenen deben estar comprobados, ya que un sistema puede aceptar un valor no válido para un tipo de dato y convertirlo mientras que otro sistema lo rechazará.</p><br /><br /><br /><br /><p><h3>Usa correctamente los valores NULL y asigna valores por defecto</h3></p><br /><br /><p>Todos los campos que sean <em>omitibles</em> en un INSERT o un UPDATE deben tener un valor por defecto o bien ser NULL. En bases de datos como SQLite, el no especificar un valor por defecto provoca un error, mientras que en MySQL no.</p><br /><br /><br /><br /><p><h3>Usa transacciones cuando se requiera</h3></p><br /><br /><p>Cuando se realizan varias consultas seguidas de inserción, actualización o borrado, es recomendable el uso de transacciones. Es mejor no realizar ningún cambio a que se realice a medias, perdiendo datos.</p><br /><br /><br /><br /><p><h3>Usa consultas INSERT y UPDATE completas</h3></p><br /><br /><p>Nunca deben omitirse partes de las sentencias de inserción y actualización. Por ejemplo: <em>INSERT INTO tabla (campo1, campo2) VALUES ('a', 'b')</em>. </p><br /><br /><br /><br /><p><h3>Usa siempre ORDER BY</h3></p><br /><br /><p>MySQL permite establecer el orden por defecto de una tabla y en otros sistemas el orden puede variar por cada consulta realizada, ya que se puede ordenar por fecha de actualización o inserción del registro. Por eso nunca debe omitirse ORDER BY.</p><br /><br /><br /><br /><p><h3>Evita el uso de la integridad referencial</h3></p><br /><br /><p>La integridad referencial no está soportada en todos los sistemas (MySQL con tablas InnoDB sí la soporta pero no con tablas MyISAM, SQLite permite asignar claves foráneas pero no hace nada con ellas), por lo que la lógica debe trasladarse a la programación, borrando o actualizando los datos relacionados de ser necesario.</p><br /><br /><br /><br /><p><h3>Evita el uso de funciones propias</h3></p><br /><br /><p>No deben usarse funciones propias de cada sistema, dificultan la portabilidad. Lo que se puede hacer con una función en una consulta puede hacerse con otra función en la programación. Eso sí, ciertas funciones de tratamiento de cadenas y fechas pueden ser comunes o muy similares, por lo que en caso de ser necesario, debe tenerse en cuenta a la hora de programar para usar la adecuada según el sistema. Algunas capas de abastracción como <a href="http://adodb.sourceforge.net/">ADOdb</a> integran ayudas para estos casos.</p><br /><br /><br /><br /><p><h3>Evita el uso <em>triggers</em> y <em>procedures</em></h3></p><br /><br /><p>Todo lo que puede incluirse en disparadores y procedimientos almacenables puede incluirse en la lógica de la aplicación. Se pierde comodidad pero evitan problemas, ya que la implementación de estas funciones varía y ciertos sistemas no las implementan.</p><br /><br /><br /><br /><p><h3>Evita el uso de vistas</h3></p><br /><br /><p>Las vistas funcionan de diferente forma entre los diferentes RDBMS existentes, sobre todo en la actualización de los datos que consulta, lo que puede provocar resultados inesperados. Hay que recordar que sólo algunos sistemas permiten la actualización de datos en vistas, por lo que es importante no hacer uso de esa funcionalidad.</p><br /><br /><br /><br /><p><h3>Evita el uso de subconsultas</h3></p><br /><br /><p>Del mismo modo que las vistas, las subconsultas funcionan de diferente forma entre los diferentes RDBMS existentes y no todos las implementan. Cada sistema tiene sus restricciones, por lo que una subconsulta que funciona perfectamente en </p><br /><br /><br /><br /><p><h3>Evita el uso tipos de datos y atributos <em>no estándar</em></h3></p><br /><br /><p>Los tipos de datos específicos de ciertos motores deben evitarse. Por ejemplo, una fecha <em>timestamp</em> puede almacenarse en un campo INT de 32 bits, pero en MySQL puede almacenarse en un campo tipo TIMESTAMP con el atributo <em>ON UPDATE CURRENT_TIMESTAMP</em> que no es extensible a otros sistemas. Otro ejemplo pueden ser los tipos BOOL, que pueden sustituirse por enteros (0 - 1).</p><div class="tags">Etiquetado con: <a href="http://bitacoras.com/canales/sql">sql</a>, <a href="http://bitacoras.com/canales/database">database</a>, <a href="http://bitacoras.com/canales/mysql">mysql</a>, <a href="http://bitacoras.com/canales/postgresql">postgresql</a>, <a href="http://bitacoras.com/canales/sqlite">sqlite</a></div>

<p>Etiquetas: <a href="http://bitacoras.com/canales/programacion">programacion</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Seraphinux</dc:creator>
		<title>SQLite con Java</title>
		<link>http://www.seraphinux.com/index.php/183/2008/06/01/sqlite-con-java</link>
		<guid isPermaLink="true">http://www.seraphinux.com/index.php/183/2008/06/01/sqlite-con-java</guid>
		<pubDate>Sun, 01 Jun 2008 12:51:50 +0200</pubDate>
		<category>java</category>
		<category>programacion</category>
		<category>sqlite</category>
		<category>base datos</category>
		<description><![CDATA[Por Seraphinux en Seraphinux el 01 de junio de 2008 a las 12:51:50

En este post mostraremos como conectar SQLite con java, usando para esto Netbeans; el resultado final es un JTextArea que mostrara el contenido de la base de datos creada en SQLite. El resultado es el siguiente:    Antes que nada vamos a la pagina de SQLiteJDBC y nos descargamos Driver para SQLite pero la version r &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/seraphinux">Seraphinux</a> en <a href="http://bitacoras.com/bitacora/seraphinux.com">Seraphinux</a> el 01 de junio de 2008 a las 12:51:50</p>

<p>En este post mostraremos como conectar SQLite con java, usando para esto Netbeans; el resultado final es un JTextArea que mostrara el contenido de la base de datos creada en SQLite. El resultado es el siguiente:</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen001.png" alt="" title="imagen001" width="400" height="328" /></p> <p><span id="more-183"></span></p> <p>Antes que nada vamos a la pagina de <a href="" target="_blank"><strong>SQLiteJDBC</strong></a> y nos descargamos Driver para SQLite pero la version realizada en java (<em>Pure Java</em>), como podran notar hay versiones para Windows, Linux y MacOS las cuales se basan en la libreria JNI, a grandes rasgos esta libreria utiliza llamadas al sistema anfitrion; por tanto si quieres que tu aplicacion se ejecute en cualquier sistema operativo sin ningun problema entonces la version realizada en java (<em>pure java</em>) es la mejor opcion.</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen002.png" alt="" title="imagen002" width="201" height="220" /></p> <p>Una vez que descargamos el archivo (<em>sqlitejdbc-v048-nested.tgz</em>) lo descomprimimos, esto nos generara dos archivos un JAR y un README de toda la vida, el archivo que nos interesa obviamente es el JAR, pero de momento no lo muevas, solo recuerda en donde se encuentra.</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen003.png" alt="" title="imagen003" width="435" height="63" /></p> <p>Lo siguiente que haremos es crear la base de datos que mostrara nuestra aplicaciion, para ello usaremos una extencion de firefox llamada <a href="https://addons.mozilla.org/en-US/firefox/addon/5817" target="_blank"><strong>SQLite Manager</strong></a>, utilizamos esta misma extencion en un tutorial anterior (<a href="http://www.seraphinux.com/index.php/25/2008/04/01/sqlite-con-c-usando-el-framework-20-de-net/" target="_blank"><strong>SQLite con C# para el Framework 2.0 de .NET</strong></a>), asi que el procedimiento es el mismo:</p> <p>Vamos a crear un DB simple, con la tipica estructura de la lista del salon de clases:</p> <ul> <li>id_alumno</li> <li>nombre</li> <li>ap_paterno</li> <li>ap_materno</li> </ul> <p>En nuestro SQLite Manager le damos en New Database y le damos por nombre alumnos (<em>automaticamente SQLite Manager le agrega la extencion .sqlite</em>), nos pregunta en donde queremos guardarla, de momento la guardamos en nuestro Escritorio. Una vez creada la DB, le damos al boton Create Table y en la ventana le damos un nombre a nuestra tabla (lista en nuestro caso), ademas de que definimos las columnas.</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen004.png" alt="" title="imagen004" width="450" height="401" /></p> <p>Una vez hecho esto ya debes de tener tu base de datos (alumnos.sqlite) creada con una tabla(lista). Vamos a agregarle tres valores para que estos sean los que se muestren en nuestro JTextArea, para eso vamos a la pestaña Browse > Search y le damos al boton Add New Record; recuerda agregar 3 registros (en mi caso, si quieres agrega mas).</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen005.gif" alt="" title="imagen005" width="450" height="409" /> </p> <p>Cerramos el SQLite Manager y hasta este momento contamos con una base de datos en SQLite y la libreria (Driver) que nos permitira conectarnos a ella. Es momento entonces de abrir nuestro Netbeans, en mi caso es la version 6.1</p> <p>Creamos un nuevo proyecto (File > New Project...) y seleccionamos una Java Aplication</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen006.png" alt="" title="imagen006" width="450" height="143" /> </p> <p>Le ponemos un nombre "interesante" y revisamos que la opcion "Create Main Class" no este seleccionada. Por ultimo le damos finalizar</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen007.png" alt="" title="imagen007" width="450" height="233" /> </p> <p>Con esto tendremos creado nuestro proyecto, el siguiente paso es agregar la libreria para SQLite, en nuestr caso es un .JAR, para esto en la carpeta <strong>Libraries</strong> que aparece en la seccion <strong>Projects</strong> damos un click-derecho y seleccionamos la opcion <strong>Add JAR/Folder</strong> nos aparecera una ventana que nos permitira seleccionar el archivo .JAR que previamente habiamos descargado.</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen008.png" alt="" title="imagen008" width="450" height="237" /> </p> <p>Una vez hecho lo anterior en nuestra carpeta <strong>Libraries</strong> aparecera nuestro archivo .JAR</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen009.png" alt="" title="imagen009" width="241" height="181" /> </p> <p>Lo siguiente es crear la interfaz grafica de nuestr aplicacion, para ello damos click-derecho sobre el arbol de nuestro proyecto y seleccionamos ( New > JFrame Form...)</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen010.png" alt="" title="imagen010" width="450" height="226" /> </p> <p>En la siguiente ventana le damos un nombre "interesante" y en el campo "Package" le ponemos "my.nombreinteresante" (obviamente es el nombre que le hayas puesto)</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen011.png" alt="" title="imagen011" width="450" height="158" /> </p> <p>Esto nos creara el Frame que contendra nuestra aplicacion, ahora rapidamente en el menu "Palette" que nos acaba de aparecer, seleccionamos un elemento "Panel" lo arrastramos sobre nuestro JFrame y lo acomodamos para que ocupe todo el espacio, posteriormente seleccionamos un elemento TextArea el cual mostrara los datos de nuestra base de datos y lo arrastramos dentro del elemento "Panel", finalmente debe de quedarte algo asi:</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen012.png" alt="" title="imagen012" width="450" height="194" /> </p> <p>Ahora pasaremos a lo interesante, pasaremos al codigo, para ellos le damos click al boton que dice <strong>Source</strong> y pasaremos al codigo de la aplicacion.</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen013.png" alt="" title="imagen013" width="450" height="71" /> </p> <p>Como puedes ver hay codigo que Netbeans crea automaticamente, este codigo es el necesario para mostrar la aplicacion que hasta este momento hemos venido creando, esa porcion de codigo como te repito la crea Netbeans y de momento no nos meteremos con ella. Pero si es necesario agregar codigo para que nuestra hermosa aplicacion se conecte con la base de datos, por tanto pasemos a eso. Importamos los paquetes necesarios para nuestra aplicación:</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen014.png" alt="" title="imagen014" width="258" height="79" /> </p> <p>Una vez hecho esto buscamos el comienzo de nuestro probrama, o mejor dicho en donde comienza la clase que define a nuestro programa, una vez encontrada definimos variables que hagan referencia al controlador de base de datos y a la base de datos que usaremos. Ademas de variables para la conexion y para las instrucciones SQL.</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen015.png" alt="" title="imagen015" width="450" height="155" /> </p> <p>Ahora pasemos al "contructor" de nuestra aplicacion, en donde pondremos toda la funcionalidad, como se puede apreciar comienza con una llamada a la funcion <strong>initComponents();</strong> la cual se encarga de crear y acomodar los elementos de nuestra interfaz grafica, la funcionalidad la agregaremos despues de esta llamada. El codigo es el siguiente:</p> <div class="igBar"><span id="ljava-2"><a href="#" onclick="javascript:showPlainTxt('java-2'); return false;">PLAIN TEXT</a></span></div> <div class="syntax_hilite"><span class="langName">JAVA:</span> <div id="java-2"> <div class="java"> <ol> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">try</span><span style="color: #66cc66;">&#123;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006600;">forName</span><span style="color: #66cc66;">&#40;</span>ControladorJDBC<span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> conexion = <a href="http://www.google.com/search?q=allinurl:DriverManager java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">DriverManager</span></a>.<span style="color: #006600;">getConnection</span><span style="color: #66cc66;">&#40;</span>baseDatos<span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> instruccion = conexion.<span style="color: #006600;">createStatement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:ResultSet java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">ResultSet</span></a> resultados = instruccion.<span style="color: #006600;">executeQuery</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"select * from lista"</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:StringBuffer java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">StringBuffer</span></a> res = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl:StringBuffer java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">StringBuffer</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:ResultSetMetaData java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">ResultSetMetaData</span></a> metaDatos = resultados.<span style="color: #006600;">getMetaData</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #993333;">int</span> numeroColumnas = metaDatos.<span style="color: #006600;">getColumnCount</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> i = <span style="color: #cc66cc;color:#800000;">1</span>; i &#60;= numeroColumnas; i <span style="color: #66cc66;">&#41;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> res.<span style="color: #006600;">append</span><span style="color: #66cc66;">&#40;</span>metaDatos.<span style="color: #006600;">getColumnName</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\t</span>"</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> res.<span style="color: #006600;">append</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>"</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span>resultados.<span style="color: #006600;">next</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> i = <span style="color: #cc66cc;color:#800000;">1</span>; i &#60;= numeroColumnas; i <span style="color: #66cc66;">&#41;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> res.<span style="color: #006600;">append</span><span style="color: #66cc66;">&#40;</span>resultados.<span style="color: #006600;">getObject</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\t</span>"</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> res.<span style="color: #006600;">append</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>"</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">&#125;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> jTextArea1.<span style="color: #006600;">append</span><span style="color: #66cc66;">&#40;</span>res.<span style="color: #006600;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl:SQLException java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">SQLException</span></a> excepcionSql<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:JOptionPane java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">JOptionPane</span></a>.<span style="color: #006600;">showMessageDialog</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span>, excepcionSql.<span style="color: #006600;">getMessage</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #ff0000;">"Error en la base de datos"</span>, <a href="http://www.google.com/search?q=allinurl:JOptionPane java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">JOptionPane</span></a>.<span style="color: #006600;">ERROR_MESSAGE</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:System java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">exit</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;color:#800000;">1</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl:ClassNotFoundException java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">ClassNotFoundException</span></a> claseNoEncontrada<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:JOptionPane java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">JOptionPane</span></a>.<span style="color: #006600;">showMessageDialog</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span>, claseNoEncontrada.<span style="color: #006600;">getMessage</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #ff0000;">"No se encontro el controlador"</span>, <a href="http://www.google.com/search?q=allinurl:JOptionPane java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">JOptionPane</span></a>.<span style="color: #006600;">ERROR_MESSAGE</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:System java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">exit</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;color:#800000;">1</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #000000; font-weight: bold;">finally</span><span style="color: #66cc66;">&#123;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #000000; font-weight: bold;">try</span><span style="color: #66cc66;">&#123;</span></div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> instruccion.<span style="color: #006600;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> conexion.<span style="color: #006600;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl:SQLException java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">SQLException</span></a> excepcionSQL<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:JOptionPane java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">JOptionPane</span></a>.<span style="color: #006600;">showMessageDialog</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span>, excepcionSQL.<span style="color: #006600;">getMessage</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #ff0000;">"Error en la base de datos"</span>, <a href="http://www.google.com/search?q=allinurl:JOptionPane java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">JOptionPane</span></a>.<span style="color: #006600;">ERROR_MESSAGE</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <a href="http://www.google.com/search?q=allinurl:System java.sun.com&#38;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">exit</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;color:#800000;">1</span><span style="color: #66cc66;">&#41;</span>;</div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">&#125;</span></div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div> </li> </ol> </div> </div> </div> <p></p> <p>Con esto, nuestra aplicación esta concluida, ahora solo nos queda agregar la base de datos creada a la carpeta del proyecto, debe de quedarte algo asi:</p> <p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/06/imagen016.png" alt="" title="imagen016" width="450" height="179" /> </p> <p>Finalmente presionamos F6 y veemos como corre radiante. Oviamente este ejemplo puede mejorarse y mucho, seria deseable que en lugar de usar un JTextArea se usara una JTable, pero esto sera en otro post. Recuerden dudas, comentarios, errores, sugerencias, etc. en los comentarios <img src='http://www.seraphinux.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p> <p class="link"> <strong>Link</strong>: SQLiteJDBC | <a href="http://www.zentus.com/sqlitejdbc/dist/sqlitejdbc-v048-nested.tgz" target="_blank"><strong>Pure Java</strong></a></p> <p><a href="http://feeds.feedburner.com/~a/Seraphinux?a=tYrH6O"><img src="http://feeds.feedburner.com/~a/Seraphinux?i=tYrH6O" border="0"></img></a></p><img src="http://feeds.feedburner.com/~r/Seraphinux/~4/302288483" height="1" width="1"/>

<p>Etiquetas: <a href="http://bitacoras.com/canales/java">java</a>, <a href="http://bitacoras.com/canales/programacion">programacion</a>, <a href="http://bitacoras.com/canales/sqlite">sqlite</a>, <a href="http://bitacoras.com/canales/base+datos">base datos</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Administrator</dc:creator>
		<title>SQLite con UITableView (Parte III)</title>
		<link>http://www.iphonesoftware.es/sqlite-con-uitableview-parte-iii</link>
		<guid isPermaLink="true">http://www.iphonesoftware.es/sqlite-con-uitableview-parte-iii</guid>
		<pubDate>Mon, 02 Jun 2008 21:10:51 +0200</pubDate>
		<category>ejemplos</category>
		<category>sqlite</category>
		<description><![CDATA[Por Administrator en iPhoneSoftware el 02 de junio de 2008 a las 21:10:51

(Los fuentes del ejemplo están disponibles en el pie del artículo). En el ejemplo de hoy, la tercera entrega de nuestro ejemplo con SQLite y UITableView, vamos a tratar los siguientes puntos: 1. Implementar los métodos de insertar y eliminar registros. 2. Permitir la eliminación mediante el efecto de desplaz &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/iphonesoftware">Administrator</a> en <a href="http://bitacoras.com/bitacora/www.iphonesoftware.es">iPhoneSoftware</a> el 02 de junio de 2008 a las 21:10:51</p>

<p><strong>(Los fuentes del ejemplo están disponibles en el pie del artículo).</strong></p> <p>En el ejemplo de hoy, la tercera entrega de nuestro ejemplo con SQLite y UITableView, vamos a tratar los siguientes puntos:</p> <p>1. Implementar los métodos de insertar y eliminar registros.</p> <p>2. Permitir la eliminación mediante el efecto de desplazar el dedo hacia la izquierda.</p> <p>3. Pintar un pequeño icono en la parte derecha de nuestro TableView.</p> <p>4. Implementar un método que guarde todos los cambios en memoria en nuestra base de datos.</p> <p>5. Nueva vista para la inserción de datos.</p> <p><strong>IMPLEMENTAR LOS MÉTODOS DE INSERTAR Y ELIMINAR</strong></p> <p>Hemos implementado en nuestra clase delegada dos métodos encargados de insertar y eliminar registros en nuestra base de datos. En concreto se llaman addRegister y removeRegister. Ambos métodos recogen la información necesaria que les llega y la envía a nuestra clase Inmueble, a la cual también hemos dotado de ambos métodos para insertar y para eliminar basados en <strong>SQLite</strong>.</p> <p><strong>ELIMINACIÓN MEDIANTE EL EFECTO DE DESPLAZAMIENTO HACIA LA IZQUIERDA</strong></p> <p><strong></strong>Como ya vimos con otra clase de métodos, gracias a nuestra clase <strong>UITableViewDataSource</strong>, podemos recibir eventos como el encargado de detectar la eliminación de un registro de un <strong>TableView</strong> al desplazar el dedo hacia la izquierda. En concreto es <strong>commitEditingStyle</strong>, el cual hemos implementado en nuestra clase controladora <strong>DataViewController</strong>, junto al resto. </p> <p><strong>PINTAR EL ICONO DE LA ZONA DERECHA DE NUESTRO TABLEVIEW</strong></p> <p>Mediante la clase <strong>UITableViewCellAccessoryType</strong>, de la cual no existe mucha documentación, podemos indicar a nuestro TableView, que en la zona derecha de cada registro se pinte un pequeño icono en forma de flecha, muy util para indicar algún tipo de desplazamiento a otra vista.</p> <p><strong>MÉTODOS ENCARGADOS DE GUARDAR LOS CAMBIOS EN MEMORIA</strong></p> <p>Mediante un nuevo método llamado <strong>dehydrate</strong> en nuestra clase Inmuble, controlamos que todos los cambios realizados sean guardados a nuestra base de datos, y simulamos una especie de <em>flush. </em>Este método es llamado justo antes de que salgamos de nuestra aplicación.</p> <p><strong>NUEVA VISTA PARA LA INSERCIÓN DE DATOS</strong></p> <p>Mediante un nuevo fichero XIB, y una nueva clase, permitiremos insertar nuevos registros. El fichero de recursos tendrá un control de tipo <strong>UITextField, </strong>y una barra de navegación con los botones de guardar y cancelar. Para ello igualmente hemos creado una nueva clase, encargada de controlar dichos botones y realizar las llamadas oportunas para guardar los cambios introducidos.</p> <p> </p> <p>Aplicación de ejemplo: <a href="http://www.iphonesoftware.es/wp-content/uploads/2008/06/buscapisos.zip">buscapisos.zip</a></p>

<p>Etiquetas: <a href="http://bitacoras.com/canales/ejemplos">ejemplos</a>, <a href="http://bitacoras.com/canales/sqlite">sqlite</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Antonio</dc:creator>
		<title>SQLite con UITableView (Parte I)</title>
		<link>http://www.iphonesoftware.es/sqlite-con-uitableview-parte-i</link>
		<guid isPermaLink="true">http://www.iphonesoftware.es/sqlite-con-uitableview-parte-i</guid>
		<pubDate>Tue, 13 May 2008 07:23:25 +0200</pubDate>
		<category>pequenos ejemplos</category>
		<category>dylib</category>
		<category>iphone</category>
		<category>sqlite</category>
		<description><![CDATA[Por Antonio en iPhoneSoftware el 13 de mayo de 2008 a las 07:23:25

Para el ejemplo de hoy, vamos a poner en práctica el uso de SQLite en una aplicación que vamos a ir desarrollando poco a poco, hasta convertirla en una agenda buscador de pisos, que nos permita la aplicación de insertar inmuebles que veamos y nos interesen, y por qué no más adelante igual le damos la posibilidad de &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/iphonesoftware">Antonio</a> en <a href="http://bitacoras.com/bitacora/www.iphonesoftware.es">iPhoneSoftware</a> el 13 de mayo de 2008 a las 07:23:25</p>

<p>Para el ejemplo de hoy, vamos a poner en práctica el uso de SQLite en una aplicación que vamos a ir desarrollando poco a poco, hasta convertirla en una agenda buscador de pisos, que nos permita la aplicación de insertar inmuebles que veamos y nos interesen, y por qué no más adelante igual le damos la posibilidad de asociar el inmueble con un mapa de Google Maps e incluso la posibilidad de adjuntar fotografías a cada registro que insertemos, pero eso más adelante.</p> <p>Para comenzar con nuestra aplicación, recordemos que primero debemos de insertar como framework de nuestro proyecto, la librería dinámica de <strong>libsqlite3.0.dylib. </strong></p> <p><img class="alignnone size-full wp-image-57" title="buscapisos1" src="http://www.iphonesoftware.es/wp-content/uploads/2008/05/buscapisos1.png" alt="" width="208" height="199" /></p> <p>Por otra parte no olvidemos crearnos nuestra base de datos, y que cada uno la cree con la aplicación que mejor considere, yo ya dejé un pequeño ejemplo en anteriores artículos. La insertamos bajo la carpeta de <em>Resources</em> en nuestro árbol de proyectos. En nuestro caso se llamará inmueblesdb.sql.</p> <p><img class="alignnone size-full wp-image-58" title="buscapisos2" src="http://www.iphonesoftware.es/wp-content/uploads/2008/05/buscapisos2.png" alt="" width="215" height="132" /></p> <p>Ahora editamos nuestro fichero de recursos XIB para incluir un controlador de navegación (Navigation Controller) para gestionar varias vistas que tendremos. Para nuestro controlador de vista (View Controller) creado por defecto bajo el árbol de Navigation Controller, vamos a generar los ficheros de declaración e implementación (h, m), ya que trabajaremos sobre ellos. Antes de hacerlo desde el menú <em>File / Write Class Files </em>le vamos a cambiar el nombre a la clase de UIViewController por DataViewController, para localizarlo mejor en nuestro proyecto, ya que va a ser la vista encargada de mostrar los datos principales de nuestra base de datos. Para cambiarle el nombre lo hacemos desde la última opción de la ventana de atributos, llamada <em>Identity.</em></p> <p><img class="alignnone size-full wp-image-59" title="buscapisos3" src="http://www.iphonesoftware.es/wp-content/uploads/2008/05/buscapisos3.png" alt="" width="301" height="272" /></p> <p>Una vez cambiado el nombre de nuestra clase y tras generar los ficheros de dicha clase, si probamos a compilar veremos que nos da un error, ya que la definición de nuestra clase la realiza incompleta, a falta de que nosotros terminemos de definirla. En concreto espera a que definamos la clase padre de donde queremos que herede y en nuestro caso es de <strong>UITableViewController</strong>, así que reemplazamos el comentario que nos genera por dicha clase.</p> <p>A continuación, vamos a incluir nuestra clase recién creada en nuestra clase delegada de la aplicación, para que cuando la ejecutemos, en lugar de aparecer la ventana blanca vacía, aparezca ya nuestro Navigation Controller. Esta es una de las operaciones que espero que en próximas versiones del SDK mejoren, pues lo que vamos a realizar en tres pasos, sería más lógico hacerlo en uno solo, os cuento:</p> <p>1. Definimos nuestro objeto Navigation Controller en la clase delegate:</p> <p><span>IBOutlet</span> <span>UINavigationController</span> *navigationController;</p> <p><span>@property</span> (<span>nonatomic</span>, <span>retain</span>) <span>UINavigationController</span> *navigationController;</p> <p> 2. Implementamos el mismo objeto en la parte de implementación de la misma clase delegate:</p> <p> </p> <p><span>@synthesize</span> navigationController;</p> <p>3. En nuestro fichero de recursos, indicamos que nuestro objeto Navigation Controller forma parte de nuestra clase delegate mediante las conexiones.</p> <p><img class="alignnone size-full wp-image-60" title="buscapisos4" src="http://www.iphonesoftware.es/wp-content/uploads/2008/05/buscapisos4.png" alt="" width="301" height="197" /></p> <p>Como os comentaba, me resulta más lógico que el paso 1 y 2 se generen automáticamente cuando realicemos el paso 3, con la opción de que me permita asignar un nombre al objeto que voy a generar.</p> <p>Bueno, en este punto ya tenemos nuestro fichero de recursos preparado, nuestra base de datos creada y nuestra clase que va a gestionar dichos datos (DataViewController) ya generada. Antes de empezar, nos falta una última clase ( de momento ) que va a ser la responsable de mostrar la estructura de nuestros datos.</p> <p>En un próximo artículo la crearemos y realizaremos la conexión con la base de datos para comenzar a completar nuestra tabla (UITableView).</p> <p> </p> <p> </p> <p> </p> <p> </p>

<p>Etiquetas: <a href="http://bitacoras.com/canales/pequeños+ejemplos">pequeños ejemplos</a>, <a href="http://bitacoras.com/canales/dylib">dylib</a>, <a href="http://bitacoras.com/canales/iphone">iphone</a>, <a href="http://bitacoras.com/canales/sqlite">sqlite</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Seraphinux</dc:creator>
		<title>Por que usar SQLite&#8230;</title>
		<link>http://www.seraphinux.com/index.php/100/2008/04/30/por-que-usar-sqlite</link>
		<guid isPermaLink="true">http://www.seraphinux.com/index.php/100/2008/04/30/por-que-usar-sqlite</guid>
		<pubDate>Wed, 30 Apr 2008 14:55:40 +0200</pubDate>
		<category>sqlite</category>
		<category>base datos</category>
		<category>database</category>
		<description><![CDATA[Por Seraphinux en Seraphinux el 30 de abril de 2008 a las 14:55:40

   &#8230; o lo que es lo mismo &#8220;no le dejes el trabajo de un hombre a un niño&#8221;. Algo que he podido apreciar en las presentaciones de algunos (muchos) proyectos de titulacion es que en materia de base de datos terminan usando MySQL, Oracle o en el peor de los casos Access, y ok voy de acuerdo en usar My &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/seraphinux">Seraphinux</a> en <a href="http://bitacoras.com/bitacora/seraphinux.com">Seraphinux</a> el 30 de abril de 2008 a las 14:55:40</p>

<p align="center"> <img src="http://www.seraphinux.com/wp-content/uploads/2008/04/sqlite.gif" alt="" title="sqlite" width="327" height="97" /> </p> <p>&#8230; o lo que es lo mismo &#8220;no le dejes el trabajo de un hombre a un niño&#8221;.</p> <p>Algo que he podido apreciar en las presentaciones de algunos (muchos) proyectos de titulacion es que en materia de base de datos terminan usando MySQL, Oracle o en el peor de los casos Access, y ok voy de acuerdo en usar MySQL u Oracle cuando se trata de algo en red y cuando vas a trabajar con muchos pero muuuchos datos y no para hacer una aplicacion del tipo &#8220;Agendita Mi Alegria&#8221;.</p> <p>Cuando la cantidad de datos es poca y no es atraves de una red terminan usando Access, lo cual es todavia peor, entonces la pregunta es: ¿<strong>Por que poner aun niño a hacer el trabajo de un hombre</strong>? o mejor dicho ¿<strong>por que usar Access en lugar de SQLite</strong>? (en el caso de que usen Oracle o MySQL les diria: &#8220;¿Por que matar una mosca a cañonazos?&#8221; <img src='http://www.seraphinux.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).</p> <p>Uno de los motivos que yo veo es el desconocimiento, la verdad es que no hay mucha información que digamos sobre SQLite y la que hay esta en ingles. Asi que os parece si revertimos esto <img src='http://www.seraphinux.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p> <p>Hagamos un pequeño intro a SQLite {mas que otra cosa es un prefacio}</p> <p>SQLite es una base de datos relacional de fuente abierta. Que originalmente vio la luz en el año 2000. SQLite cuenta con una reputación de ser muy portable, fácil de usar, compacta, eficiente y fiable. Muy similar al conocido Access del mundo Windows pero a diferencia de este posee una serie de ventajas. </p> <p>Para comenzar es multiplataforma y cumple con la mayoria de los estándares SQL92 por lo que su sintaxis y forma de uso casi no posee curva de aprendizaje si es que conoces SQL y/o has trabajado con MySQL. Es ideal para trabajar con volúmenes medianos o pequeños de información, de manera ágil y eficiente. Aunque sus diseñadores aseguran que es posible manejar bases de datos de hasta 2 TeraBytes sin mayores inconvenientes. Cuando un MySQL queda grande la solución ideal de código abierto, libre y gratuito es SQLite.</p> <p>Como puedes ver vale la pena usar SQLite y creeme que por documentacion no vamos a parar, de eso me encargo yo. Por cierto tengo un pequeño tutorial para usar <strong>SQLite con C#</strong> en ambientes Windows (de momento). Asi que espera pronto mas documentacion y si tu tienes algun ejemplo o tutorial y quisieras compartirlo no dudes en comunicarte conmigo.</p> <p><a href="http://feeds.feedburner.com/~a/Seraphinux?a=Dj2WOI"><img src="http://feeds.feedburner.com/~a/Seraphinux?i=Dj2WOI" border="0"></img></a></p><img src="http://feeds.feedburner.com/~r/Seraphinux/~4/280846385" height="1" width="1"/>

<p>Etiquetas: <a href="http://bitacoras.com/canales/sqlite">sqlite</a>, <a href="http://bitacoras.com/canales/base+datos">base datos</a>, <a href="http://bitacoras.com/canales/database">database</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Diego</dc:creator>
		<title>Configurar Django sobre Windows</title>
		<link>http://www.diegocerdan.es/programacion/configurar-django-windows</link>
		<guid isPermaLink="true">http://www.diegocerdan.es/programacion/configurar-django-windows</guid>
		<pubDate>Tue, 08 Jul 2008 02:58:54 +0200</pubDate>
		<category>internet</category>
		<category>programacion</category>
		<category>software libre</category>
		<category>windows</category>
		<category>apache</category>
		<description><![CDATA[Por Diego en DiegoCerdán el 08 de julio de 2008 a las 02:58:54

Hoy me ví en la necesidad de montar un servidor de producción para Django sobre Windows. Los que me conocen ya saben que no me gusta demasiado trabajar sobre este sistema operativo y que prefiero Linux como escritorio o servidor, pero las circustancias lo requerían, así que me puse manos a la obra.AdvertenciaAntes de n &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/diegocerdan">Diego</a> en <a href="http://bitacoras.com/bitacora/www.diegocerdan.es">DiegoCerdán</a> el 08 de julio de 2008 a las 02:58:54</p>

<p>Hoy me ví en la necesidad de montar un servidor de producción para <a href="http://es.wikipedia.org/wiki/Django_web_framework" onclick="javascript:pageTracker._trackPageview ('/outbound/es.wikipedia.org');">Django</a> sobre Windows. Los que me conocen ya saben que no me gusta demasiado trabajar sobre este sistema operativo y que prefiero Linux como escritorio o servidor, pero las circustancias lo requerían, así que me puse manos a la obra.</p><br /><br /><p><span id="more-46"></span></p><br /><br /><h4>Advertencia</h4><br /><br /><p>Antes de nada quiero advertiros que esta configuración usa SQLite como base de datos. Esto nos viene muy bien porque es muy fácil de configurar y de gestionar mediante un único fichero, pero no es la base de datos adecuada si la aplicación debe soportar mucha carga.</p><br /><br /><p>Para simplificar la la configuración, los ficheros estáticos como las imágenes o los CSS son servidos directamente por Django. Esto simplifica las cosas pero nunca debe de configurarse así en un servidor con carga. Si vuestra aplicación tiene muchos usuarios tendréis problemas.</p><br /><br /><h4>Instalación de Software</h4><br /><br /><ol><br /><br /><li><a href="http://www.python.org/download/" onclick="javascript:pageTracker._trackPageview ('/outbound/www.python.org');">Python</a> - <a href="http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi" onclick="javascript:pageTracker._trackPageview ('/outbound/www.python.org');">Versión 2.5.2</a></li><br /><br /><li><a href="http://httpd.apache.org/download.cgi" onclick="javascript:pageTracker._trackPageview ('/outbound/httpd.apache.org');">Apache</a> - <a href="http://ftp.udc.es/apache-dist/httpd/binaries/win32/apache_2.2.9-win32-x86-no_ssl-r2.msi" onclick="javascript:pageTracker._trackPageview ('/outbound/ftp.udc.es');">Versión 2.2.9 sin SSL</a></li><br /><br /><li><a href="http://ftp.udc.es/apache-dist/httpd/modpython/win/" onclick="javascript:pageTracker._trackPageview ('/outbound/ftp.udc.es');">Mod_Python</a> - <a href="http://ftp.udc.es/apache-dist/httpd/modpython/win/3.3.1/mod_python-3.3.1.win32-py2.5-Apache2.2.exe" onclick="javascript:pageTracker._trackPageview ('/outbound/ftp.udc.es');">Versión 3.3.1</a></li><br /><br /><li><a href="http://subversion.tigris.org/getting.html" onclick="javascript:pageTracker._trackPageview ('/outbound/subversion.tigris.org');">Subversion</a> - <a href="http://subversion.tigris.org/files/documents/15/41687/svn-1.4.6-setup.exe" onclick="javascript:pageTracker._trackPageview ('/outbound/subversion.tigris.org');">Versión 1.4.6</a></li><br /><br /></ol><br /><br /><h4>Modificar la variable Path</h4><br /><br /><p>Debemos modificar la variable Path de Windows. Para ello hacemos click derecho sobre Mi PC, Propiedades, Opciones Avanzadas, Variables de Entorno y editar la variable Path añadiendo <em>C:\Python25;C:\Python25\Scripts\</em></p><br /><br /><h4>Configurar Apache</h4><br /><br /><p>Editamos el archivo \Apache2.2\conf\httpd.conf:</p><br /><br /><div class="codesnip-container" ><br /><br /><div class="codesnip"><span class="co1">#Añadimos el soporte para python</span></p><br /><br /><p><span class="kw1">LoadModule</span> python_module modules/mod_python.so en la sección de <span class="kw1">LoadModule</span></div><br /><br /></div><br /><br /><div class="codesnip-container" ><br /><br /><div class="codesnip"><span class="co1">#Copiamos este fragmento al final de httpd.conf</span></p><br /><br /><p><Location ~ <span class="st0">“/(admin|media)/”</span>><br /><br /><br />        <span class="kw1">SetHandler</span> python-program<br /><br /><br />        PythonPath <span class="st0">“['C:<span class="es0">\d</span>j-sites'] + sys.path”</span><br /><br /><br />        PythonHandler django.core.handlers.modpython<br /><br /><br />        <span class="kw1">SetEnv</span> DJANGO_SETTINGS_MODULE testproject.settings<br /><br /><br />        PythonDebug <span class="kw2">Off</span><br /><br /><br /></Location></div><br /><br /></div><br /><br /><p>Reiniciamos el servidor mediante el icono de Apache en la barra del sistema.</p><br /><br /><h4>Instalar Django</h4><br /><br /><div class="codesnip-container" ><br /><br /><div class="codesnip"><span class="co1">#Descargamos la rama de desarrollo NewForms-Admin mediante el comando:</span></p><br /><br /><p>C:\svn co http://code.djangoproject.com/svn/django/branches/newforms-admin/  django_nfa</p></div><br /><br /></div><br /><br /><div class="codesnip-container" ><br /><br /><div class="codesnip"><span class="co1">#Instalamos Django mediante el comando:</span></p><br /><br /><p>C:\django_nfa>python setup.py install</p></div><br /><br /></div><br /><br /><p>Ahora solo tenemos que copiar la aplicación deseada a C:\dj-sites\ y configurar el archivo settings.py para que utilice la base de datos SQLite.</p><br /><br /><div class="codesnip-container" ><br /><br /><div class="codesnip"><span class="kw1">import</span> <span class="kw3">os</span>.<span class="me1">path</span></p><br /><br /><p>DATABASE_ENGINE = <span class="st0">’sqlite3′</span><br /><br /><br />DATABASE_NAME = <span class="kw3">os</span>.<span class="me1">path</span>.<span class="me1">join</span><span class="br0">(</span><span class="kw3">os</span>.<span class="me1">path</span>.<span class="me1">dirname</span><span class="br0">(</span>__file__<span class="br0">)</span>, <span class="st0">‘data.db’</span><span class="br0">)</span>.<span class="me1">replace</span><span class="br0">(</span><span class="st0">‘<span class="es0">\’</span>,’</span>/<span class="st0">‘) </span></div><br /><br /></div><br /><br /><p>Configurar urls.py:</p><br /><br /><div class="codesnip-container" ><br /><br /><div class="codesnip"><span class="co1">#Servir los ficheros estaticos mediantes Django</span></p><br /><br /><p><span class="kw1">from</span> django.<span class="me1">conf</span>.<span class="me1">urls</span>.<span class="me1">defaults</span> <span class="kw1">import</span> *<br /><br /><br /><span class="kw1">from</span> django.<span class="me1">contrib</span> <span class="kw1">import</span> admin</p><br /><br /><p>urlpatterns = patterns<span class="br0">(</span><span class="st0">”</span>,</p><br /><br /><p>     <span class="br0">(</span>r<span class="st0">‘^media/(?P<path>.*)$’</span>, <span class="st0">‘django.views.static.serve’</span>, <span class="br0">{</span><span class="st0">‘document_root’</span>: <span class="st0">‘C:/dj-sites/media/’</span><span class="br0">}</span><span class="br0">)</span>,<br /><br /><br />     <span class="br0">(</span>r<span class="st0">‘^admin/(.*)’</span>, admin.<span class="kw3">site</span>.<span class="me1">root</span><span class="br0">)</span>,<br /><br /><br /><span class="br0">)</span></div><br /><br /></div>

<p>Etiquetas: <a href="http://bitacoras.com/canales/internet">internet</a>, <a href="http://bitacoras.com/canales/programacion">programacion</a>, <a href="http://bitacoras.com/canales/software+libre">software libre</a>, <a href="http://bitacoras.com/canales/windows">windows</a>, <a href="http://bitacoras.com/canales/apache">apache</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>David Mart&#237;nez</dc:creator>
		<title>C&#243;mo instalar PDO en Debian</title>
		<link>http://dmnet.bitacoras.com/archivos/debian/como-instalar-pdo-en-debian.php</link>
		<guid isPermaLink="true">http://dmnet.bitacoras.com/archivos/debian/como-instalar-pdo-en-debian.php</guid>
		<pubDate>Wed, 12 Mar 2008 03:47:58 +0100</pubDate>
		<category>debian</category>
		<description><![CDATA[Por David Martínez en Delirios de un Informático el 12 de marzo de 2008 a las 03:47:58

Mientras en distribuciones como Fedora o Mandriva PDO está disponible como un paquete mas, en Debian no es así y no es posible instalarlo con un simple apt-get. Será necesario compilando partiendo del repositorio de extensiones PECL. Esto es necesario para poder trabajar con Zend Framework y SQL &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/dmnet">David Martínez</a> en <a href="http://bitacoras.com/bitacora/dmnet.bitacoras.com">Delirios de un Informático</a> el 12 de marzo de 2008 a las 03:47:58</p>

Mientras en distribuciones como Fedora o Mandriva PDO está disponible como un paquete mas, en Debian no es así y no es posible instalarlo con un simple apt-get. Será necesario compilando partiendo del repositorio de extensiones PECL. Esto es necesario para poder trabajar con Zend Framework y SQLite, ya que Zend_Db_Adapter únicamente permite el uso de las extensiones tradicionales para MySQL, Oracle, IBM DB2, Firebird e Interbase. Los pasos son sencillos: sudo apt-get install PHP-pear php5-dev build-essential sudo pecl install pdo sudo pecl install pdo_sqlite En caso de querer instalar PDO con soporte MySQL es necesario instalar el paquete libmysqlclient15-dev ( o los correspondientes paquetes de desarrollo para la base de datos que queramos ). Las extensiones compiladas se guardan en /usr/lib/php5/ ( por si se desean hacer copias de seguridad para no tener que recompilar ), y por defecto, se crean en /etc/php5/conf.d los archivos de configuración necesarios para que se carguen automáticamente, así que sólo quedaría reiniciar el servidor web para empezar a trabajar... Etiquetas:linux, debian, php, pdo, mysql, sqlite

<p>Etiquetas: <a href="http://bitacoras.com/canales/debian">debian</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>David Mart?nez</dc:creator>
		<title>SQL::Translator: conversor de bases de datos</title>
		<link>http://dmnet.bitacoras.com/archivos/software/sql-translator-conversor-de-bases-de-datos.php</link>
		<guid isPermaLink="true">http://dmnet.bitacoras.com/archivos/software/sql-translator-conversor-de-bases-de-datos.php</guid>
		<pubDate>Wed, 26 Mar 2008 19:58:26 +0100</pubDate>
		<category>software</category>
		<description><![CDATA[Por David Mart?nez en Delirios de un Informático el 26 de marzo de 2008 a las 19:58:26

Me he encontrado con el problema de convertir una base de datos MySQL a SQLite. Tras curiosear un poco top? con SQLFairy, un grupo de m?dulos de Perl que adem?s de permitir convertir bases de datos, permite convertir formatos de datos ( XML, YAML, Excel o CSV ) a esquemas SQL o generar diagramas &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/dmnet">David Mart?nez</a> en <a href="http://bitacoras.com/bitacora/dmnet.bitacoras.com">Delirios de un Informático</a> el 26 de marzo de 2008 a las 19:58:26</p>

Me he encontrado con el problema de convertir una base de datos MySQL a SQLite. Tras curiosear un poco top? con SQLFairy, un grupo de m?dulos de Perl que adem?s de permitir convertir bases de datos, permite convertir formatos de datos ( XML, YAML, Excel o CSV ) a esquemas SQL o generar diagramas pseudo-entidad-relaci?n o UML. SQL::Translator ( comando sqlt ) es el m?dulo permite traducir lenguaje SQL entre la multitud de dialectos existentes: MySQL, PostgreSQL, SQLite, Oracle o Sybase. Por ejemplo, para convertir el esquema de una base de datos en MySQL a SQLite: sqlt -f DBI --dsn dbi:mysql:database --db-user root -t SQLite > database.sql En Debian basta con instalar el paquete sqlfairy y sus dependencias Etiquetas: perl, database, mysql, sqlite

<p>Etiquetas: <a href="http://bitacoras.com/canales/software">software</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Seraphinux</dc:creator>
		<title>SQLite con C# usando el Framework 2.0 de .NET</title>
		<link>http://feeds.feedburner.com/~r/Seraphinux/~3/262362092</link>
		<guid isPermaLink="true">http://feeds.feedburner.com/~r/Seraphinux/~3/262362092</guid>
		<pubDate>Wed, 02 Apr 2008 05:53:01 +0200</pubDate>
		<category>sqlite</category>
		<category>csharp</category>
		<category>programacion</category>
		<description><![CDATA[Por Seraphinux en Seraphinux el 02 de abril de 2008 a las 05:53:01

En este post mostrare como hacerlo paso a paso, ademas de que mostraremos como crear una aplicacion que muestre la DB en un dataGrid. [Primero] Vamos a la pagina del proyecto System.Data.SQLite y nos descargamos un ejecutable que nos instalara las DLL's necesarias. Una vez que nos descargamos el ejecutable procedem &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/seraphinux">Seraphinux</a> en <a href="http://bitacoras.com/bitacora/seraphinux.com">Seraphinux</a> el 02 de abril de 2008 a las 05:53:01</p>

En este post mostrare como hacerlo paso a paso, ademas de que mostraremos como crear una aplicacion que muestre la DB en un dataGrid. [Primero] Vamos a la pagina del proyecto System.Data.SQLite y nos descargamos un ejecutable que nos instalara las DLL's necesarias. Una vez que nos descargamos el ejecutable procedemos a instalarlo (dejamos los valores por default) y marcamos la casilla en la ventana que nos mostrara al final de la instalacion: Hasta este momento ya tenemos instaladas las DLL's para usar SQLite en nuestra aplicacion [Segundo] Ahora que tenemos instalado lo necesario para usar SQLite vamos a crear un proyecto del tipo "Aplicacion para Windows" Una vez creada nuestra aplicacion vamos a agregar la referencia necesaria para usar SQLite, vamos al menu Proyecto > Agregar referencia... y en la pestaña de .NET buscamos en el Nombre de componente uno que diga System.Data.SQLite y procedemos a agregarla En el Explorador de soluciones vemos que a sido agregada la referencia a System.Data.SQLite Hasta ahorita todo bien, en nuestra Form vamos a agregar un control de datos llamado DataGridViewer, ya sabes seleccionamos y arrastramos a nuestra Form (cuando te pida el origen de datos dale Esc, despues se lo daremos), mas o menos debe quedarte algo asi: Un poquito fea verdad, pero no te preocupes vamos a darle vida; antes de continuar vamos a crear nuestra DB, para esto usare la extension de Firefox llamada SQLite Manager. Vamos a crear un DB simple, que les parece la de la tipica lista de salon: id_alumno nombre ap_paterno ap_materno En nuestro SQLite Manager le damos en New Database y le damos por nombre Escuela (automaticamente SQLite Manager le agrega la extencion .sqlite), nos pregunta en donde queremos guardarla, de momento la guardamos en nuestro Escritorio. Una vez creada la DB, le damos al boton Create Table y en la ventana le damos un nombre a nuestra tabla (lista en nuestro caso), ademas de que definimos las columnas. Una vez hecho esto ya debes de tener tu base de datos (Escuela.sqlite) creada con una tabla(lista). Vamos a agregarle tres valores para que estos sean los que se muestren en nuestro DataGrid, para eso vamos a la pestaña Browse > Search y le damos al boton Add New Record; recuerda agregar 3 registros (en mi caso, si quieres agrega mas). Cerramos nuestro SQLite Manager y continuamos con nuestro proyecto en el VS. Obviamente vamos por la base de datos que en mi caso guarde en el Escritorio la cortamos y la pegamos en la carpeta Debug de nuestro proyecto. Hasta aqui todo listo para empezar a programar. [Tercero] Como queremos que los datos de nuestra DB se carguen en nuestro DataGrid al momento de iniciar la aplicacion, le damos doble click a nuestro Form para que nos genere automaticamente una funcion para el evento Load, antes de agregarle codigo vamos a agregar una directiva using para usar nuestro SQLite. Debe quedarte algo mas o menos asi: Ahora agregamos las variables necesaria para trabajar con la DB ademas de objeto DataSet y DataTable como parte para mostrar los datos en el Data Grid. El codigo finalmente este este (no lo explico mucho ya que es casi identico al del post anterior): PLAIN TEXT C#: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SQLite; namespace SQLiteDemo_II &#123; public partial class Form1 : Form &#123; private SQLiteConnection sql_con; private SQLiteCommand sql_cmd; private SQLiteDataAdapter DB; private DataSet DS = new DataSet&#40;&#41;; private DataTable DT = new DataTable&#40;&#41;; public Form1&#40;&#41; &#123; InitializeComponent&#40;&#41;; &#125; private void Form1_Load&#40;object sender, EventArgs e&#41; &#123; sql_con = new SQLiteConnection&#40;"Data Source=Escuela.sqlite;Version=3;New=False;Compress=True;"&#41;; sql_con.Open&#40;&#41;; sql_cmd = sql_con.CreateCommand&#40;&#41;; string CommandText = "select * from lista"; DB = new SQLiteDataAdapter&#40;CommandText, sql_con&#41;; DS.Reset&#40;&#41;; DB.Fill&#40;DS&#41;; DT = DS.Tables&#91;0&#93;; dataGridView1.DataSource = DT; sql_con.Close&#40;&#41;; &#125; &#125; &#125; Una vez hecho esto ejecutamos nuestra aplicacion (ya sabes F5) y asi es como se muestra: Algo que quiero que notes y tomes en cuenta es que en ningun momento agregamos a nuestra carpeta debug ningun tipo de DLL, solo el agregamos la DB, pero si en este momento te dirijes a tu carpeta Debug, te daras cuenta que se han agregado los siguientes archivos, los cuales son un DLL que es en si mismo nuestro conectar para SQLite y un archivo XML con su definicion. Por cierto para agregar datos y todo ese tipo de acciones sobre la DB pueden usar la referencia de Finisar, como dije es casi lo mismo. Link: PHXSoftware | System.Data.SQLite Link: Finisar.SQLite

<p>Etiquetas: <a href="http://bitacoras.com/canales/sqlite">sqlite</a>, <a href="http://bitacoras.com/canales/csharp">csharp</a>, <a href="http://bitacoras.com/canales/programacion">programacion</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Seraphinux</dc:creator>
		<title>SQLite con C# para el Framework 2.0 de .NET</title>
		<link>http://www.seraphinux.com/?p=25</link>
		<guid isPermaLink="true">http://www.seraphinux.com/?p=25</guid>
		<pubDate>Wed, 02 Apr 2008 04:33:17 +0200</pubDate>
		<category>csharp</category>
		<category>programacion</category>
		<category>sqlite</category>
		<description><![CDATA[Por Seraphinux en Seraphinux el 02 de abril de 2008 a las 04:33:17

En este post mostrare como hacerlo paso a paso, ademas de que mostraremos como crear una aplicacion que muestre la DB en un dataGrid. [Primero] Vamos a la pagina del proyecto System.Data.SQLite y nos descargamos un ejecutable que nos instalara las DLL's necesarias. Una vez que nos descargamos el ejecutable procedem &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/seraphinux">Seraphinux</a> en <a href="http://bitacoras.com/bitacora/seraphinux.com">Seraphinux</a> el 02 de abril de 2008 a las 04:33:17</p>

En este post mostrare como hacerlo paso a paso, ademas de que mostraremos como crear una aplicacion que muestre la DB en un dataGrid. [Primero] Vamos a la pagina del proyecto System.Data.SQLite y nos descargamos un ejecutable que nos instalara las DLL's necesarias. Una vez que nos descargamos el ejecutable procedemos a instalarlo (dejamos los valores por default) y marcamos la casilla en la ventana que nos mostrara al final de la instalacion: Hasta este momento ya tenemos instaladas las DLL's para usar SQLite en nuestra aplicacion [Segundo] Ahora que tenemos instalado lo necesario para usar SQLite vamos a crear un proyecto del tipo "Aplicacion para Windows" Una vez creada nuestra aplicacion vamos a agregar la referencia necesaria para usar SQLite, vamos al menu Proyecto > Agregar referencia... y en la pesta??a de .NET buscamos en el Nombre de componente uno que diga System.Data.SQLite y procedemos a agregarla En el Explorador de soluciones vemos que a sido agregada la referencia a System.Data.SQLite Hasta ahorita todo bien, en nuestra Form vamos a agregar un control de datos llamado DataGridViewer, ya sabes seleccionamos y arrastramos a nuestra Form (cuando te pida el origen de datos dale Esc, despues se lo daremos), mas o menos debe quedarte algo asi: Un poquito fea verdad, pero no te preocupes vamos a darle vida; antes de continuar vamos a crear nuestra DB, para esto usare la extension de Firefox llamada SQLite Manager. Vamos a crear un DB simple, que les parece la de la tipica lista de salon: id_alumno nombre ap_paterno ap_materno En nuestro SQLite Manager le damos en New Database y le damos por nombre Escuela (automaticamente SQLite Manager le agrega la extencion .sqlite), nos pregunta en donde queremos guardarla, de momento la guardamos en nuestro Escritorio. Una vez creada la DB, le damos al boton Create Table y en la ventana le damos un nombre a nuestra tabla (lista en nuestro caso), ademas de que definimos las columnas. Una vez hecho esto ya debes de tener tu base de datos (Escuela.sqlite) creada con una tabla(lista). Vamos a agregarle tres valores para que estos sean los que se muestren en nuestro DataGrid, para eso vamos a la pesta??a Browse > Search y le damos al boton Add New Record; recuerda agregar 3 registros (en mi caso, si quieres agrega mas). Cerramos nuestro SQLite Manager y continuamos con nuestro proyecto en el VS. Obviamente vamos por la base de datos que en mi caso guarde en el Escritorio la cortamos y la pegamos en la carpeta Debug de nuestro proyecto. Hasta aqui todo listo para empezar a programar. [Tercero] Como queremos que los datos de nuestra DB se carguen en nuestro DataGrid al momento de iniciar la aplicacion, le damos doble click a nuestro Form para que nos genere automaticamente una funcion para el evento Load, antes de agregarle codigo vamos a agregar una directiva using para usar nuestro SQLite. Debe quedarte algo mas o menos asi: Ahora agregamos las variables necesaria para trabajar con la DB ademas de objeto DataSet y DataTable como parte para mostrar los datos en el Data Grid. El codigo finalmente este este (no lo explico mucho ya que es casi identico al del post anterior): PLAIN TEXT C#: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SQLite; namespace SQLiteDemo_II { public partial class Form1 : Form { private SQLiteConnection sql_con; private SQLiteCommand sql_cmd; private SQLiteDataAdapter DB; private DataSet DS = new DataSet(); private DataTable DT = new DataTable(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { sql_con = new SQLiteConnection("Data Source=Escuela.sqlite;Version=3;New=False;Compress=True;"); sql_con.Open(); sql_cmd = sql_con.CreateCommand(); string CommandText = "select * from lista"; DB = new SQLiteDataAdapter(CommandText, sql_con); DS.Reset(); DB.Fill(DS); DT = DS.Tables[0]; dataGridView1.DataSource = DT; sql_con.Close(); } } } Una vez hecho esto ejecutamos nuestra aplicacion (ya sabes F5) y asi es como se muestra: Algo que quiero que notes y tomes en cuenta es que en ningun momento agregamos a nuestra carpeta debug ningun tipo de DLL, solo el agregamos la DB, pero si en este momento te dirijes a tu carpeta Debug, te daras cuenta que se han agregado los siguientes archivos, los cuales son un DLL que es en si mismo nuestro conectar para SQLite y un archivo XML con su definicion. Por cierto para agregar datos y todo ese tipo de acciones sobre la DB pueden usar la referencia de Finisar, como dije es casi lo mismo. Link: PHXSoftware | System.Data.SQLite Link: Finisar.SQLite

<p>Etiquetas: <a href="http://bitacoras.com/canales/csharp">csharp</a>, <a href="http://bitacoras.com/canales/programacion">programacion</a>, <a href="http://bitacoras.com/canales/sqlite">sqlite</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Seraphinux</dc:creator>
		<title>SQLite - Una Base de Datos embebida.</title>
		<link>http://www.seraphinux.com/index.php/102/2008/04/30/sqlite-una-base-de-datos-embebida</link>
		<guid isPermaLink="true">http://www.seraphinux.com/index.php/102/2008/04/30/sqlite-una-base-de-datos-embebida</guid>
		<pubDate>Wed, 30 Apr 2008 15:41:18 +0200</pubDate>
		<category>sqlite</category>
		<description><![CDATA[Por Seraphinux en Seraphinux el 30 de abril de 2008 a las 15:41:18

SQLite es una base de datos embebida, por lo cual en lugar de funcionar como un proceso independiente, este opera de manera simbiótica dentro de la aplicación. Lo que quiere decir que su código está entrelazado, o incrustado como parte del programa que lo alberga. Una de las ventajas de tener un servidor de bases d &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/seraphinux">Seraphinux</a> en <a href="http://bitacoras.com/bitacora/seraphinux.com">Seraphinux</a> el 30 de abril de 2008 a las 15:41:18</p>

<p><img title="sqlite_small" src="http://www.seraphinux.com/wp-content/uploads/2008/04/sqlite_small.gif" alt="" width="105" height="105" align="left" />SQLite es una base de datos embebida, por lo cual en lugar de funcionar como un proceso independiente, este opera de manera simbiótica dentro de la aplicación. Lo que quiere decir que su código está entrelazado, o incrustado como parte del programa que lo alberga.<br /> Una de las ventajas de tener un servidor de bases de datos embebido es que no es obligatorio configurar la red o su administración. Ambos cliente y servidor correr juntos en el mismo proceso. Esto reduce los gastos relacionados con la red en cuestion de llamadas, simplifica la administración de la bases de datos, y hace que sea más fácil desplegar la aplicación.</p> <p>Observa los procesos mostrados en la siguiente figura. Uno de ellos es un script en Perl, otro es un programa en C/C++, y el otro es un proceso de Apache con PHP, todos utilizando SQLite.</p> <p align="center"><img title="figura-1" src="http://www.seraphinux.com/wp-content/uploads/2008/04/figura-1.png" alt="" width="450" height="320" /></p> <p>El script en Perl importa el modulo DBI::SQLite, que a su vez está relacionado con la API en C de SQLite, incluida en la librería de SQLite. La libreria en PHP funciona de manera similar, de igual forma la aplicacion en C++.</p> <p>En última instancia, los tres procesos estan interactuando con la API en C de SQLite. Por otra parte, aunque cada proceso representa un servidor independiente, aún pueden operar sobre el/los archivo(s) de una misma base de datos, ya que SQLite utiliza el sistema operativo para llevar a cabo las operaciones de sincronización y el bloqueo.</p> <p>Hoy en día existen en el mercado una gran variedad de bases de datos relacionales diseñadas específicamente para su uso de manera embebida, como por ejemplo:</p> <ul> <li>Sybase SQL Anywhere</li> <li>InterSystems caché</li> <li>PervasiveSQL</li> <li>Microsoft Jet Engine</li> </ul> <p>Otros lo que han hecho es modificar bases de datos existentes para crear variantes que funcionen de manera embebida. Algunos ejemplos de estos incluyen:</p> <ul> <li>IBM DB2 Everyplace</li> <li>Oracle 10g</li> <li>Microsoft SQL Server Desktop Engine</li> </ul> <p>Las bases de datos MySQL y Firebird ofrecen tambien versiones de este tipo. Pero de todos estos productos, sólo dos son de código abierto y libre: <strong>Firebird</strong> y <strong>SQLite</strong>. Y de estos dos restantes, sólo uno ha sido diseñado exclusivamente para su uso como una base de datos embebida: <strong>SQLite</strong>.</p> <p><strong>Nota</strong>: Hasta este momento mi labor ha sido, sola mente la de traductor. La imagen fue tomada del libro indicado como Bibliografia y fue modificada por Seraphinux.</p> <p class="link"><strong>Bibliografia</strong>: The Definitive Guide to SQLite de Michael Owens</p> <p><a href="http://feeds.feedburner.com/~a/Seraphinux?a=UNiSRY"><img src="http://feeds.feedburner.com/~a/Seraphinux?i=UNiSRY" border="0"></img></a></p><img src="http://feeds.feedburner.com/~r/Seraphinux/~4/280872691" height="1" width="1"/>

<p>Etiquetas: <a href="http://bitacoras.com/canales/sqlite">sqlite</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Seraphinux</dc:creator>
		<title>SQLite - Una base de datos para programadores.</title>
		<link>http://www.seraphinux.com/index.php/117/2008/05/05/sqlite-una-base-de-datos-para-programadores</link>
		<guid isPermaLink="true">http://www.seraphinux.com/index.php/117/2008/05/05/sqlite-una-base-de-datos-para-programadores</guid>
		<pubDate>Mon, 05 May 2008 22:55:54 +0200</pubDate>
		<category>sqlite</category>
		<description><![CDATA[Por Seraphinux en Seraphinux el 05 de mayo de 2008 a las 22:55:54

 SQLite es realmente versátil. Se trata de una base de datos, una biblioteca de programación, una herramienta de línea de comandos, así como tambien de una excelente herramienta de aprendizaje que ofrece una buena introducción a las bases de datos relacionales. De hecho, existen muchas maneras de utilizarlo: en ento &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/seraphinux">Seraphinux</a> en <a href="http://bitacoras.com/bitacora/seraphinux.com">Seraphinux</a> el 05 de mayo de 2008 a las 22:55:54</p>

<p><img title="sqlite_small" src="http://www.seraphinux.com/wp-content/uploads/2008/04/sqlite_small.gif" alt="" width="105" height="105" align="left" /> SQLite es realmente versátil. Se trata de una base de datos, una biblioteca de programación, una herramienta de línea de comandos, así como tambien de una excelente herramienta de aprendizaje que ofrece una buena introducción a las bases de datos relacionales. De hecho, existen muchas maneras de utilizarlo: en entornos embebidos, sitios web, como apoyo a servicios del sistema operativo, en scripts, y en diversas aplicaciones.</p> <p>Para los programadores, SQLite es como la cinta adhesiva pero digital, ya que proporciona una manera fácil de unir aplicaciones con datos. Y al igual que la cinta adhesiva, sus usos no tienen fin. En un entorno web, SQLite puede ayudar en la administración de la información generada por las sesiones. En lugar de serializar (unir) todos los datos de la sesión en un gran "blob", cada uno de estos elementos pueden ser seleccionado de una manera mas especifica y puestos por escrito al inicio de cada sesion en una base de datos.</p> <p>SQLite también sirve como herramienta en el desarrollo y pruebas en bases de datos relacionales ya que: no es necesario un Gestor de Base de Datos externo, o la creación o configuracion de alguna red, o molestos nombres de usuario y contraseñas. SQLite también podría servir como una especie de cache, que mantenga los datos de la configuración, o incluso debido a su compatibilidad binaria entre plataformas podria trabajar como un formato de archivo para alguna aplicacion.</p> <p>Además de funcionar como un recipiente de almacenamiento, SQLite puede funcionar como una herramienta para el procesamiento de datos en general. Dependiendo del tamaño y complejidad, puede ser más fácil para algunas aplicaciónes representar sus estructuras de datos como si fueran una tabla o tablas en un base de datos en memoria. De esta manera, es posible operar en los datos de manera relacional, usando SQLite para hacer todo el trabajo en lugar de tener que escribir algoritmos propios para manipular y ordenar las estructuras de datos. Si se es programador, es facil imaginar cuánto código llevaria implementar la siguiente sentencia SQL en un programa:</p> <div class="igBar"><span id="lsql-4"><a href="#" onclick="javascript:showPlainTxt('sql-4'); return false;">PLAIN TEXT</a></span></div> <div class="syntax_hilite"><span class="langName">SQL:</span> <div id="sql-4"> <div class="sql"> <ol> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> AVG<span style="color:#006600; font-weight:bold;">&#40;</span>z-y<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> x</div> </li> <li style="font-weight: bold;color:#26536A;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">HAVING</span> x&#62; MIN<span style="color:#006600; font-weight:bold;">&#40;</span>z<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color: #993333; font-weight: bold;">OR</span> x &#60;MAX<span style="color:#006600; font-weight:bold;">&#40;</span>y<span style="color:#006600; font-weight:bold;">&#41;</span></div> </li> <li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;"> <div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> y <span style="color: #993333; font-weight: bold;">DESC</span> <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;color:#800000;">10</span> OFFSET <span style="color: #cc66cc;color:#800000;">3</span>; </div> </li> </ol> </div> </div> </div> <p></p> <p>Si se esta familiarizado con SQL, imagina codificar el equivalente de una subquery, una query compuesta, una clausula GROUP BY o uno de los multiples JOIN's. SQLite puede incluir toda esta funcionalidad en los programas y con un costo mínimo. Con un motor de base de datos integrado directamente en el código, es posible empezar a pensar en SQL como un lenguaje para la resolucion de complejos algoritmos de clasificación. Este enfoque se hace más atractivo conforme el tamaño del conjunto de datos crece o conforme los algoritmos se hacen más complejos. Lo que es más, SQLite puede ser configurado para utilizar una cantidad fija de memoria RAM y si se supera el limite especificado descargar los datos en disco duro.</p> <p>Esto es difícil de hacer si es que se escriben algoritmos propios. Con SQLite, este límite se reduce a simples comandos SQL. SQLite es también una gran herramienta de aprendizaje para los programadores que estudian ciencias de la computación. Aplicado en generadores de Parsers (Analizadores), tokenizadores, máquinas virtuales, Algoritmos Arbol-B, cacheo, programas de arquitectura, y muchos más, es un fantastico vehículo para la exploración de muchos conceptos bien establecidos en las ciencias de la computación. Su modularidad, su pequeño tamaño, y su simplicidad hacen que sea más fácil de estudiar cada tema como si fuera un caso aislado que cualquier persona puede seguir fácilmente.</p> <p><a href="http://feeds.feedburner.com/~a/Seraphinux?a=9DwoLA"><img src="http://feeds.feedburner.com/~a/Seraphinux?i=9DwoLA" border="0"></img></a></p><img src="http://feeds.feedburner.com/~r/Seraphinux/~4/284251391" height="1" width="1"/>

<p>Etiquetas: <a href="http://bitacoras.com/canales/sqlite">sqlite</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Antonio</dc:creator>
		<title>SQLite en tu iPhone</title>
		<link>http://www.iphonesoftware.es/sqlite-en-tu-iphone</link>
		<guid isPermaLink="true">http://www.iphonesoftware.es/sqlite-en-tu-iphone</guid>
		<pubDate>Sun, 11 May 2008 12:06:39 +0200</pubDate>
		<category>pequenos ejemplos</category>
		<category>iphone</category>
		<category>sqlite</category>
		<description><![CDATA[Por Antonio en iPhoneSoftware el 11 de mayo de 2008 a las 12:06:39

Con la llegada del kit de desarrollo para iPhone (SDK), vimos uno de los componentes, que bajo mi opinión, es de los más importantes de la librería, SQLite. SQLite es un sistema de bases de datos empotrado, que nos ofrece gran flexibilidad a la hora de realizar aplicaciones que se apoyen en una base de datos. SQLit &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/iphonesoftware">Antonio</a> en <a href="http://bitacoras.com/bitacora/www.iphonesoftware.es">iPhoneSoftware</a> el 11 de mayo de 2008 a las 12:06:39</p>

<p>Con la llegada del kit de desarrollo para <strong>iPhone</strong> (<strong>SDK</strong>), vimos uno de los componentes, que bajo mi opinión, es de los más importantes de la librería, <strong>SQLite</strong>.</p> <p><strong>SQLite</strong> es un sistema de bases de datos empotrado, que nos ofrece gran flexibilidad a la hora de realizar aplicaciones que se apoyen en una base de datos. <strong>SQLite</strong> es de dominio público y multi-plataforma. De hecho, existen muchas maneras de utilizarlo: en entornos embebidos, sitios web, como apoyo a servicios del sistema operativo, en scripts, y en diversas aplicaciones.</p> <p><strong>SQLite</strong> también podría servir como una especie de cache, que mantenga los datos de la configuración, o incluso debido a su compatibilidad binaria entre plataformas podria trabajar como un formato de archivo para alguna aplicacion.</p> <p>En definitiva, es una muy buena opción para unir datos con aplicaciones y vamos a ver un pequeño ejemplo de como utilizarlo con sencillas sentencias de SQL.</p> <p>En mi ejemplo, he comenzado creando una sencilla base de datos, para la cual he utilizado la aplicación <a href="http://sourceforge.net/projects/sqlitebrowser/">SQLite Database Browser 1.3</a> ya que aunque es muy antigua y existen multitud de aplicaciones para tal uso, a mi me gusta porque es muy ligera y muy sencilla de utilizar.</p> <p><img class="alignnone size-medium wp-image-54" title="sql1" src="http://www.iphonesoftware.es/wp-content/uploads/2008/05/sql1-300x111.png" alt="" width="300" height="111" /></p> <p>Para poder compilar nuestro proyecto, una vez insertada la base de datos recién creada, es necesario añadir la librería dinámica <strong>libsqlite3.0.dylib, </strong>que como ya recordarán en anteriores artículos expliqué la forma recomendada de insertarla para no marearnos.</p> <p>Gracias a dicha librería y a la inclusión del fichero de cabecera <span><strong>#import </strong></span><strong><sqlite3.h> </strong>ya podemos comenzar a trabajar con nuestra base de datos para nuestra aplicación.</p> <p>La forma de acceder a nuestro fichero de base de datos y abrirlo es de la siguiente manera:</p> <pre><span class="sy0">-</span><span class="br0">(</span><span class="kw4">BOOL</span><span class="br0">)</span>openDatabaseAtPath<span class="sy0">:</span><span class="br0">(</span><span class="kw5">NSString</span><span class="sy0">*</span><span class="br0">)</span>path { <span class="kw5"> NSFileManager</span> <span class="sy0">*</span>fileManager <span class="sy0">=</span> <span class="br0">[</span><span class="kw5">NSFileManager</span> defaultManager<span class="br0">]</span>; <span class="co1">//comprobamos si el fichero existe</span> <span class="kw1">if</span><span class="br0">(</span><span class="br0">[</span>fileManager fileExistsAtPath<span class="sy0">:</span>path<span class="br0">]</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">if</span><span class="br0">(</span>sqlite3_open<span class="br0">(</span><span class="br0">[</span>path UTF8String<span class="br0">]</span>, <span class="sy0">&</span>amp;db<span class="br0">)</span> <span class="sy0">==</span> SQLITE_OK<span class="br0">)</span> <span class="br0">{</span> NSLog<span class="br0">(</span>@<span class="st0">“Base de datos abierta en %@”</span>, path<span class="br0">)</span>; dbOpened <span class="sy0">=</span> YES; <span class="kw1">return</span> YES; <span class="br0">}</span> <span class="br0">}</span> NSLog<span class="br0">(</span>@<span class="st0">“Base de datos no localizada en %@”</span>, path<span class="br0">)</span>; <span class="kw1"> return</span> NO; }</pre> <p>Al igual que hemos usado sqlite3_open para la apertura de nuestra base de datos, existen infinidad de funciones, objetos, constantes, etc, que podemos consultar en su página oficial de <strong>SQLite3</strong> <a href="http://www.sqlite.org/capi3ref.html">http://www.sqlite.org/capi3ref.html</a>.</p> <p>Una vez abierta, operaciones como la consulta de registros dentro de una tabla son tan sencillas como se muestra a continuación:</p> <pre>-(int)volumeIsIndexed:(NSString*)volumnName { <span class="kw1"> if</span><span class="br0">(</span><span class="sy0">!</span>dbOpened<span class="br0">)</span> <span class="kw1">return</span> NO; <span class="kw4"> const</span> <span class="kw4">char</span> <span class="sy0">*</span>sql <span class="sy0">=</span> <span class="br0">[</span><span class="br0">[</span><span class="kw5">NSString</span> stringWithFormat<span class="sy0">:</span>@<span class="st0">“SELECT volumeID FROM volumes WHERE volumeName =’%@’”</span>, volumnName<span class="br0">]</span> cStringUsingEncoding<span class="sy0">:</span>NSUTF8StringEncoding<span class="br0">]</span>; sqlite3_stmt <span class="sy0">*</span>statement; <span class="kw4">BOOL</span> ret; <span class="kw1"> if</span> <span class="br0">(</span>sqlite3_prepare_v2<span class="br0">(</span>db, sql, <span class="nu0">-1</span>, <span class="sy0">&</span>amp;statement, <span class="kw2">NULL</span><span class="br0">)</span> <span class="sy0">==</span> SQLITE_OK<span class="br0">)</span> <span class="br0">{</span> <span class="kw4">int</span> result <span class="sy0">=</span> sqlite3_step<span class="br0">(</span>statement<span class="br0">)</span>; <span class="kw1">if</span><span class="br0">(</span>result <span class="sy0">==</span> SQLITE_ROW<span class="br0">)</span> ret <span class="sy0">=</span> sqlite3_column_int<span class="br0">(</span>statement, <span class="nu0">0</span><span class="br0">)</span>; <span class="kw1">else</span> ret <span class="sy0">=</span> NO; } sqlite3_finalize<span class="br0">(</span>statement<span class="br0">)</span>; <span class="kw1">return</span> ret; }</pre> <p><strong>sqlite3_stmt </strong>almacena una consulta previamente ejecutada, la cual contiene la información solicitada para trabajar con los registros devueltos. Dicha información la prepara la función <strong>sqlite3_prepare_v2.</strong> Cualquier consulta debe ser finalizada y eliminada mediante <strong>sqlite3_finalize.</strong></p> <p>Espero que aprovechéis la flexibilidad y el sencillo manejo de SQLite3 al igual que lo aproveché yo.</p>

<p>Etiquetas: <a href="http://bitacoras.com/canales/pequeños+ejemplos">pequeños ejemplos</a>, <a href="http://bitacoras.com/canales/iphone">iphone</a>, <a href="http://bitacoras.com/canales/sqlite">sqlite</a></p>]]></content:encoded>
	</item>
	<item>
		<dc:creator>Antonio</dc:creator>
		<title>SQLite con UITableView (Parte II)</title>
		<link>http://www.iphonesoftware.es/sqlite-con-uitableview-parte-ii</link>
		<guid isPermaLink="true">http://www.iphonesoftware.es/sqlite-con-uitableview-parte-ii</guid>
		<pubDate>Fri, 16 May 2008 07:56:49 +0200</pubDate>
		<category>pequenos ejemplos</category>
		<category>iphone</category>
		<category>sqlite</category>
		<description><![CDATA[Por Antonio en iPhoneSoftware el 16 de mayo de 2008 a las 07:56:49

(Los fuentes del ejemplo están disponibles en el pie del artículo). En el artículo anterior ya dejamos preparado el fichero de recursos con nuestro Navigation Controller que se encargará de mostrarnos el navegador de vistas (en principio solo tenemos una), también creamos nuestro fichero de base de datos, y nuestra &#91;&#8230;&#93;]]></description>
		<content:encoded><![CDATA[<p>Por <a href="http://bitacoras.com/usuario/iphonesoftware">Antonio</a> en <a href="http://bitacoras.com/bitacora/www.iphonesoftware.es">iPhoneSoftware</a> el 16 de mayo de 2008 a las 07:56:49</p>

<p><strong>(Los fuentes del ejemplo están disponibles en el pie del artículo).</strong></p> <div>En el artículo anterior ya dejamos preparado el fichero de recursos con nuestro <em>Navigation Controller</em><em> </em>que se encargará de mostrarnos el navegador de vistas (en principio solo tenemos una), también creamos nuestro fichero de base de datos, y nuestra clase <em>DataViewController</em><em> </em>que será la encargada de gestionar y mostrar dichos datos. La conexión con la base de datos se realizará en nuestra clase delegada de la aplicación.</div> <p><strong>CLASE INMUEBLE</strong></p> <p>Ahora vamos a crearnos una nueva clase (<strong>Inmueble</strong>), que nos servirá de estructura para el tratamiento de nuestros registros de la base de datos. Será una clase sencilla (<strong>NSObject</strong>) donde incluiremos como miembros de la misma los distintos campos de nuestra tabla. Estos miembros serán del mismo tipo que hayamos definido en la creación de nuestra tabla y para nuestro caso hemos creado 3 campos (dirección, teléfono y comentarios).</p> <p><span>@interface</span> Inmueble : NSObject</p> <p>{</p> <p><span> <span>sqlite3</span><span> *</span>database<span>;</span></span></p> <p><span> <span>NSInteger</span><span> </span>primaryKey<span>;</span></span></p> <p><span> <span>NSString</span> *<span>address</span>; </span></p> <p><span> </span>NSString<span> *</span><span>phone</span><span>;</span></p> <p>NSString<span> *</span><span>comment</span><span>; </span></p> <p>}</p> <p>El miembro <strong>database</strong> veremos que será utilizado para recibir la base de datos que en nuestra clase<em> </em>delegada de la aplicación crearemos y abriremos. Implementaremos los métodos set y get de dichos miembros para consultar y asignar valores a nuestros campos. (Lógicamente el campo primaryKey no tiene método set, ya que es el campo autonumerico identificador).</p> <p>- (<span>NSInteger</span>)primaryKey</p> <p>- (<span>NSString</span> *)address</p> <p>- (<span>void</span>)setAddress:(<span>NSString</span> *)aString</p> <p>- (<span>NSString</span> *)phone</p> <p>- (<span>void</span>)setPhone:(<span>NSString</span> *)aString</p> <p>- (<span>NSString</span> *)comment</p> <p>- (<span>void</span>)setComment:(<span>NSString</span> *)aString</p> <p>Para terminar con nuestra clase Inmueble, necesitamos un método que reciba la base de datos de la que antes hemos hablado, y realice una consulta SQL a nuestra tabla. En este método solo obtendremos el campo dirección (address) de nuestra tabla, que será el que mostremos en nuestro <strong>TableView.</strong></p> <p><strong>- (<span>id</span>)initWithPrimaryKey:(<span>NSInteger</span>)pk database:(<span>sqlite3</span> *)db</strong></p> <p><strong><span style="font-weight: normal;">Recordemos la guía de referencia de SQLite que os dejé, pues en ella veremos el cometido de los métodos sqlite3_prepare_v2, sqlite3_bind_int y sqlite3_step que usaremos en el método initWithPrimaryKey para ir recogiendo el valor de nuestro campo address.</span></strong></p> <p><strong> </strong></p> <p><strong>CLASE DATAVIEWCONTROLLER</strong></p> <p><span style="font-weight: normal;">Finalizamos la implementación de las clases de nuestro proyecto con la clase </span><em>DataViewController, </em><span style="font-weight: normal;">que será la encargada de mostrar los datos en el </span>TableView. <span style="font-weight: normal;">Lo único destacable en esta clase, además del método </span><em>loadView </em><span style="font-weight: normal;">son los método de UITableViewDataSource llamados <strong>numberOfSectionsInTableView, numberOfRowsInSection y cellForRowAtIndexPath </strong>los cuales ya explicábamos en anteriores artículos (UITableView con índices).</span></p> <p><strong>CLASE DELEGADA DE NUESTRA APLICACIÓN</strong></p> <p><span style="font-weight: normal;">Como punto de entrada de nuestra aplicación, nuestra clase delegada será la encargada de preparar la base de datos, rellenar los datos apoyándonos en nuestra clase Inmueble y que nuestra </span><span style="font-weight: normal;">clase </span><em>DataViewController</em><span style="font-weight: normal;"> se encargue de rellenar en la vista. Aquí volvemos a encontrarnos con las funciones de SQLite para abrir nuestra base de datos, ejecutar consultas, etc.</span></p> <p>Aplicación de ejemplo: <a href="http://www.iphonesoftware.es/wp-content/uploads/2008/05/buscapisos.zip">buscapisos.zip</a></p>

<p>Etiquetas: <a href="http://bitacoras.com/canales/pequeños+ejemplos">pequeños ejemplos</a>, <a href="http://bitacoras.com/canales/iphone">iphone</a>, <a href="http://bitacoras.com/canales/sqlite">sqlite</a></p>]]></content:encoded>
	</item>
	</channel>
</rss>

