style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

¿como guardar una array en una base de datos?

¿Sabeis como puedo guardar una matriz en una base de datos y luego poder utilizarla en una clase?

como hago para que me aparezca el codigo java aqui en el blog ,esque lo toy poniendo y no me sale xD

int A[][] = new int[2][5];

for(int i=0;i<A.length;i++)
{ for(int j=0;j<A[0].length;j++)
{
A[i][j]=(int)(Math.random()*100);
}
}

System.out.println("\t ············· LOS ELEMENTOS DE LA MATRIZ SON ················ \n");
for(int i=0;i<A.length;i++)
{ for(int j=0;j<A[0].length;j++)
{
System.out.print("\t"+A[i][j]);
}
System.out.println("\n");
}

Yo tengo creada esta matriz aleatoria ,¿como la guardo en la base de datos en Mysql por ejemplo en un campo de una tabla?

Si tengo como resultado final A[i][j] ,como lo hago para serializarla e insertarla en la base de datos.

¿Seria esto correcto para serializarla?

matriz = A[i][j]
ByteArrayOutputStream baos = new Baos();
new ObjectOutputStream( baos ).writeObject( matriz );

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Leete esto:

Define Guardar

Bueno antes que nada me pregunto si te refieres a guardar el array como objeto o la información que contiene tu array... si es la primera el link del comentario anterior te sirve bastante de otra forma habrá que recorrerlo y hacer tus inserts

para escribir tu codigo usa

<code>
System.out.print("aqui tu codigo");
</code>

Puedes serializar el objeto (

Puedes serializar el objeto ( como viene seguramente en el link que puso LuisChavez ) guardar el contenido en un arreglo de bytes y luego escribir eso a la base de datos en un tipo de dato BLOB

Así de una forma super rápida es algo como :

matriz = [][]
ByteArrayOutputStream baos = new Baos();

new ObjectOutputStream( baos ).writeObject( matriz );

// ahora baos tiene la matriz serializada

Imagen de ezamudio

portable?

Necesitas escribir la matriz a base de datos de manera portable o no? Si no es de manera portable, todo lo que te dicen de serializarla y guardarla como BLOB está muy bien. Pero esos datos solamente podrán ser fácilmente leídos por tu misma aplicación o por otra app Java que implemente la lectura y escritura de esos datos igual que tú lo hagas.

Si existe la posibilidad de que vayan a usar herramientas externas para leer esos datos (por ejemplo scripts en perl/python/ruby/bash para sacar reportitos, o Crystal Reports o cosas de ese tipo para sacar reportes más sofisticados), necesitas guardar los datos de manera portable, es decir que se pueda leer de manera fácil por software no-Java.

Si necesitas hacer operaciones o consultas filtrando por esos datos de la matriz, pues la misma base de datos debe ser capaz de poder leerlos por lo tanto también necesitas guardarlos de otra forma.

La manera portable de guardar una matriz... pues depende de tu problema. Si son matrices que siempre tienen una dimensión del mismo tamaño y la otra varía (o es fija también), puedes hacer una tabla simple con llave compuesta (matriz+renglón o matriz+columna) y guardar cada celda del renglón (o columna) en una columna de la tabla.

Si ambas dimensiones de la matriz son variables, entonces necesitas guardar cada celda en un registro de la tabla y la llave será matriz+renglón+columna y tienes una columna para el dato.

Imagen de Payan

Si seran portable y las

Si seran portable y las matrices siempre tendran el mismo tamaño.He entendido bien lo que me has querido decir ,
pero se puede hacer por ejemplo en una base de datos con una tabla donde tengo los registros de usuarios ,donde tengo los campos de nombre,apellidos,edad,localidad,etc,..introducir otro campo donde insertar esa matriz y luego recuperarla en forma de matriz,¿Tendria que pasar esa matriz a un vector?

Imagen de ezamudio

Depende

Si la relación usuario-matriz es 1-1 y no va a cambiar, medio da igual si metes un montón de columnas a la tabla usuario (una por celda) o si mejor haces eso en una tabla aparte para no tener tanta cosa en usuario. De qué depende eso? pues si siempre o casi siempre que lees un usuario necesitas algo de esa matriz, de plano puedes tenerlo en la misma tabla. Si solamente necesitas la matriz de vez en cuando, puedes usar dos tablas separadas, para que leas solamente al usuario y solamente hagas join con la matriz cuando la necesites.

Lo más portable es que cada celda de la matriz la mapees con una columna.

Que información tienes en esa

Que información tienes en esa matriz? Es una matriz numérica? A mi se me hace que estas queriendo almacenar datos que podrían ir en su propia tabla.

Imagen de Payan

Si cada vez que conecto

Si cada vez que conecto usuario necesito un dato de esa matriz que quiero guardar dentro de la tabla usuarios,
he de recordar que en esa tabla hay cientos de usuarios y que a cada uno se le he generado una matriz aleatoria
cada vez que se ha registrado ,por eso habia comentado lo de guardar cada matriz en un campo y luego utilizarla
atraves de una clase dentro de la misma aplicacion.

Imagen de Payan

Si son datos numericos,claro

Si son datos numericos,claro estos datos iran dentro de un campo de cada registro.
Por ejemplo;

BASE DE DATOS (EMPRESA)
TABLA (USUARIOS)

(CAMPOS TABLA)-- Id --------- Nombre-------- Apellido----Edad -----Matriz
------------------------------------------------------------------------------
REGISTRO-------1 -------Luis-----------garcia-------- 24 -------( aqui guardo la matriz y luego utilizarla)
REGISTRO-------2 -------Marta---------Perez -------- 19--------( aqui guardo la matriz y luego utilizarla)

Dato Compuesto

Usando el principio de dato compuesto (un dato que se integra de mas datos) podrias guardar mas bien un CSV y asi no importa quien accese a la informacion. Como dice @ezamudio, no es recomendable si usas esa informacion muy frecuentemente y mucho menos si haces busquedas porque tendrias que usar el lentisimo LIKE SELECT t.dato_compuesto as dt FROM tabla t where dt LIKE '%algo%' con todo y que el query esta escrito para solo traer la columna del dato compuesto tendras una consultamucho mas lenta

Imagen de ezamudio

CSV buena idea

Ah es que ya salió el peine... esa matriz de datos es la misma de la autenticación que salió en otro post (donde le muestran a un usuario esa matriz y le piden que meta un número de ahí). Pues sí, podrías simplemente formatearla como texto CSV y guardarla en una columna CLOB (o varchar muy grande si tu DBMS te lo permite). No vas a hacer búsquedas sobre esa columna, así que no hay bronca.

:-O ... hay ideas que se

:-O ... hay ideas que se resisten a morir +1 por eso.

Pero si , es muy fácil., Si tu matriz es:

int [][] a = {{0,1,2},{3,4,5},{6,7,8}};

La conviertes en un string y la salvas como varchar. Luego la lees de tu base de datos y la conviertes en un arreglo de nuevo.

¬¬

Ahí va el proof of concept.

import java.util.Arrays;
import static java.lang.System.out;
class M {
  public static void main( String ... args ) {
    // La matriz
    int [][] m = {{0,1,2}, {3,4,5}, {6,7,8}};

    // Convertirla a String
    String matrizComoString = toString( m );
    out.println( matrizComoString );

    // Convertirla desde un string;
    int [][] restored = new int[3][3];
    fromString( matrizComoString, restored );

    // Comprobar la conversion
    out.println(  toString( restored ) );
  }

  public static String toString( int [][] m ) {
    StringBuilder sb = new StringBuilder();
    // recorre la matriz y ponerles ","
    for( int i = 0 ; i < m.length ; i++ ) {
      for( int j = 0 ; j < m[i].length ; j++ ) {
        sb.append( m[i][j] );
        sb.append( "," );
      }
    }
    // ni siquiera hace falta quitarle la ultima ","
    return sb.toString();
  }

  // Separar por "," y ponerlos en la matriz.
  public static void fromString( String matrizComoString, int [][] restored ) {
    int i = 0;
    int j = 0;
    for( String numero : matrizComoString.split(",")) {
      out.printf( "(%d,%d) = %s%n",i,j,numero );
      restored[i][j++] = Integer.parseInt( numero );
      if( j > 2 ) {
        i++;
        j = 0;
      }
    }
  }
}

Imagen de Payan

si la opcion CSV me atrae

si la opcion CSV me atrae para hacerlo de esa forma tb OscarRyz lo ha puesto tb mu claro.Gracias xD

Imagen de Payan

Gracias!

Muy buen aporte OscarRyz. xD

Imagen de Payan

Hola que tal todos ,tengo un

Hola que tal todos ,tengo un conflicto con mi codigo ¿Sabeis por que motivo al guardar el array con diez numeros y lo guardo en un campo de una tabla en la base de datos tambien se me genera 10 registros iguales pero con distinto id?

Se me guardan los diez numero en el campo pero tambien se me realizan 10 registros y al cambiar la cantidad de los numeros del array a 5 tambien se me guardan 5

Imagen de neko069

Sería conveniente que

Sería conveniente que pusieras ésta pregunta en otro post, y mostrando código, pero podría asegurar que estas ciclando tu inserción el número de veces equivalente al largo de tu arreglo ( en éste caso 10 ) en lugar de insertarlos en un ciclo, pues simplemente podrías insertarlos...pero sí mejor haz otro post...

Imagen de Payan

aqui puse el post

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">