¿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
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?
ByteArrayOutputStream baos = new Baos();
new ObjectOutputStream( baos ).writeObject( matriz );
- Payan's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Leete esto:
Leete esto: http://www.javahispano.org/contenidos/es/serializacrion_en_java/
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 :
ByteArrayOutputStream baos = new Baos();
new ObjectOutputStream( baos ).writeObject( matriz );
// ahora baos tiene la matriz serializada
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.
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?
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.
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.
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 lentaCSV 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 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;
}
}
}
}
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
Gracias!
Muy buen aporte OscarRyz. xD
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
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...
aqui puse el post
aqui puse el post amigo
http://www.javamexico.org/blogs/payan/donde_tengo_el_fallo