ios sqlite libgdx robovm

Usa la base de datos sqlite para iOS(robovm) con libgdx



(2)

Sé que este es un hilo viejo, pero esto funcionó para mí

No tienes que hacerlo EXACTAMENTE así, por supuesto, pero así es como lo hice

Primero hice una clase de ayuda para SQLite llamada .. SQLiteHelper Esto inicializaría las cosas

package com.hamzahrmalik.mitto.sqlite; import java.io.File; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import SQLite.JDBCDriver; import com.hamzahrmalik.mitto.utils.Util; public class SQLiteHelper { private String DATABASE_NAME; private JDBCDriver driv; private Connection connection; final String DB_PATH = new File(System.getenv("HOME"), "Library/") .getAbsolutePath(); public SQLiteHelper(String DATABASE_NAME) { this.DATABASE_NAME = DATABASE_NAME; driv = new JDBCDriver(); try { connection = driv.connect("sqlite:/" + DB_PATH + this.DATABASE_NAME, null); } catch (SQLException e) { } } public void execUpdate(String sql) { Util.log("Running SQL " + sql); try { Statement statement = connection.createStatement(); statement.executeUpdate(sql); //connection.close(); } catch (SQLException e) { e.printStackTrace(); } } public ResultSet execQuery(String query) { Util.log("Running SQL query " + query); try { Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(query); return rs; } catch (SQLException e) { return null; } } }

Entonces cada base de datos extiende esta clase Por ejemplo, tengo una base de datos de Mensajes

Hago una clase SQLiteMessages que amplía mi clase Helper i made

Luego en el constructor hago la tabla

final String CREATE_MESSAGES_TABLE = "CREATE TABLE IF NOT EXISTS " + this.phonenum + "(" + KEY_ID + " INTEGER PRIMARY KEY NOT NULL," + KEY_MESSAGE + " TEXT," + KEY_FROM + " TEXT," + KEY_TO + " TEXT," + KEY_DATE + " TEXT," + KEY_STATUS + " INTEGER)"; execUpdate(CREATE_MESSAGES_TABLE);

Entonces cuando puedo agregar y eliminar y actualizar como es normal en SQL

public void addMessage(Message m) { final String ADD_MESSAGES = "INSERT into " + phonenum + " VALUES(''" + m.getId() + "'',''" + m.getMessage() + "'', ''" + m.getSender() + "'', ''" + m.getRecipient() + "'', ''" + Util.formatDate(m.getTime()) + "'', ''" + m.getStatus() + "'')"; execUpdate(ADD_MESSAGES); }

Obviamente, necesitas tener un objeto Message pero eso no está realmente relacionado con la pregunta

Para recuperar datos simplemente:

public Message getMessage(int id) { ResultSet rs = execQuery("SELECT * FROM " + phonenum + " WHERE " + KEY_ID + " = " + String.valueOf(id)); try { if (rs.next()) { Message m = messageFromResult(rs); return m; } } catch (SQLException e) { e.printStackTrace(); } return null; } public Message messageFromResult(ResultSet rs) { try { return new Message(rs.getInt(KEY_ID), rs.getString(KEY_MESSAGE), rs.getString(KEY_FROM), rs.getString(KEY_TO), Util.parseDate(rs.getString(KEY_DATE)), rs.getInt(KEY_STATUS)); } catch (SQLException e) { e.printStackTrace(); return null; } }

No se necesitan bibliotecas externas para esto. Recuerde agregar esto a su robovm.xml

<forceLinkClasses> <pattern>SQLite.**</pattern> </forceLinkClasses>

Tengo un proyecto libgdx (Android) donde uso una base de datos sqlite . Estoy desarrollando el mismo proyecto en la versión de iOS (robovm) y no puedo encontrar nada sobre sqlite o base de datos para la versión de iOS.

¿Es posible usar la misma base de datos sqlite?

Gracias.