2008-11-18 8 views
6

Quiero acceder a una base de datos MySQL directamente desde el código JavaScript en una página HTML en Firefox.¿Hay enlaces de JavaScript para MySQL?

¿Existe una biblioteca de este tipo?

ser muy claro, CGI + Ajax no funcionará

Algunos antecedentes: Quiero crear algo así como una interfaz GUI fin para una base de datos MySQL (que no es lo que es, pero es lo suficientemente cerca) . Estoy pensando en hacer esto como una página HTML local usando JavaScript, pero para que funcione necesitaría enlaces MySQL para JavaScript bajo Firefox. Ya tengo un prototipo funcional en menos de 100 LOC, pero requiere un servidor web, y por razones que van más allá de esta cuestión, eso no funcionará.

NOTA: tanto la base de datos como el código de JavaScript se ejecutarán localmente y no están destinados a ser una página pública. De hecho, el archivo HTML se cargará como archivo: ////. La única razón por la que estoy usando JavaScript es porque es el único sistema disponible para hacer cosas de GUI donde lo necesito.

Estoy dispuesto a instalar complementos, DLL, cosas dependientes de Windows o qué no para que esto funcione.


Editar: Parece que la respuesta es: "Se puede hacer, pero va a ser doloroso". Como una de mis opciones es simplemente arrojar todos los datos como archivos (feo, y no demasiado flexible, pero funcionaría), creo que no voy a seguir con esto.

+0

pregunta extraña ... sí. Mala pregunta ... no. Subida de votaciones para contrarrestar el voto negativo –

+0

¿Ha considerado la posibilidad de escribir una HTA para usar en Internet Explorer? Puede usar JavaScript + todos los objetos COM inseguros que existen, hacer llamadas ODBC, escribir en el disco duro, lo que sea. Ya no puedes usar Firefox, pero FWIW ya te estás atando bastante. – Tomalak

+0

Causa aumentada porque me obligaste a "zumbar" – UnkwnTech

Respuesta

4

código de JavaScript vive dentro del navegador. Puede realizar solicitudes HTTP al exterior, pero realmente no mucho más. Entonces, por diseño, no podrá enlazar a un programa que se ejecute localmente. Si MySQL realmente expone un servicio HTTP, podría ser posible, pero ese no es el caso.

Es posible que pueda encontrar un complemento para Firefox que exponga una API de MySQL a JavaScript, pero no conozco ningún plugin.

Si no necesita específicamente MySQL, pero solo una base de datos accesible desde código JavaScript, eche un vistazo a Google Gears. Es un complemento de Firefox/Internet Explorer que expone una base de datos SQLite y algunas otras cosas.

Si usted le da más información sobre lo que está tratando de construir, podríamos ser capaces de darle un mejor asesoramiento ...

+0

Tengo una pila de datos en MySQL, así que sea lo que sea que use, tendré que poder cargarlos desde allí. – BCS

1

Lo que se necesita es un servicio HTTP que expone los datos que se desea obtener con JavaScript .

Un pequeño script del lado del servidor orientado a AJAX (PHP, Perl, Ruby, lo que sea) que toma unos pocos parámetros y hace la consulta MySQL, enviando los datos al cliente de una manera amigable HTTP y JavaScript (por ejemplo, imagen/jpeg o JSON).

No podrá configurar nada útil (una solución que funcione entre navegadores) que haga que MySQL esté disponible para JavaScript. JavaScript puede hacer HTTP, y eso es todo. Adaptarse en el lado del servidor.

+0

en realidad, lo que describes es exactamente de lo que trato de deshacerme. También en mi caso, será útil si solo se ejecuta en mi computadora. – BCS

+0

Bien, ya veo. Tal vez su elección de tecnología (HTML + JavaScript) esté más en su camino de lo que desea. Si está dispuesto a instalar dlls, complementos y cosas dependientes de Windows para que esto funcione, también puede seguir adelante y escribir una aplicación .NET o una HTA. – Tomalak

+0

Estoy trabajando en una aplicación .NET. Será la 3ª vez que HAGO ALGUNA GUI en algo que no sea HTML (y solo por quinta vez, incluso contando HTML) – BCS

2

Desafortunadamente necesita un servidor. O si sabe cómo hacerlo y está listo para ser bloqueado por la plataforma o el navegador, podría escribir un complemento para su navegador de elección (hasta donde sé, no hay una DLL para Internet Explorer, por lo que tendrá que escribir uno)

Es posible que desee buscar en un pequeño servidor que no requiere configuración.Modifiqué el servidor Xavante de Lua, por una razón muy similar a la suya, por lo que se ejecuta sin dependencias externas, así puedo instalar/desinstalar la aplicación con un solo copiar/pegar.

+0

Eso parece viable. – BCS

0

No puedo dar respuesta completa, pero aquí son la idea general de cómo puede hacerlo con sólo MySQL + Internet Explorer + JavaScript (no probado):

En JavaScript se puede llamar a una aplicación de Windows mediante el uso de

var myshell = new ActiveXObject("WScript.shell"); 
myshell.run(program names); 

Así que la idea es llamar mysql.exe con las sentencias SQL almacenadas en un archivo SQL, a continuación, capturar y analizar la salida:

mysql.exe -h localhost -u root dbo <script.sql> output.txt 

Esta idea no está exento de retos:

  • resulta necesario modificar el archivo de SQL antes de llamar mysql.exe
  • es necesario abrir y analizar el archivo de salida

Como he mencionado anteriormente no he 't probado nada, por lo que toda esta idea puede que ni siquiera funcione ...

0

Interesante pregunta. Pero seguro que levanta muchas barreras, seleccionando un idioma/entorno con muchas limitaciones voluntarias para limitar el acceso al sistema subyacente ...

Me gusta la sugerencia de Robert, Xavante es realmente liviano.

De lo contrario, creo que una solución viable podría ser utilizar un applet de Java con acceso JDBC. Creo que tendrías que firmar el applet, lo cual no debería ser un problema.

He buscado Java applet jdbc en Google y vi muchos títulos prometedores, IBM proporciona el código fuente de dicho applet (para el acceso de DB2 pero debe ser fácilmente adaptable).

[EDITAR] Hay otra forma de envolver mysqllib.dll con una DLL XPCOM, como se explica en Native code in javascript. No tengo idea de cómo hacerlo realmente, pero tal vez pueda comenzar.

+0

Las barreras son el resultado de no querer cambiar a otra cosa. Si cambio, todos estos problemas desaparecen, al igual que JS, HTML y todo menos el DB. – BCS

2

Javascript puede acceder a MySQL ... pero generalmente solo en el servidor. Lo hice con Rhino, un intérprete de JavaScript basado en Java. Acaba de incluirse el controlador MySQL, y está disponible. Me imagino que probablemente también puedas hacer esto con un applet.

usando Rhino, sería algo como esto:

var DATABASE = { 

    database: 'blog_development', 
    host: 'localhost', 
    username: 'dbuser', 
    password: 'dbpass' 

}; 

function ArticleModel(properties) { 
    for (var p in properties) { 
    this[p] = properties[p]; 
    } 
} 

ArticleModel.findAll = function() { 
    var results = []; 

    var jsConnectionObj = new Packages.MysqlConnection(); 
    c = jsConnectionObj.open(DATABASE.host, 
          DATABASE.database, 
          DATABASE.username, 
          DATABASE.password); 

    if (c) { 
     var s = c.createStatement(); 
     s.executeQuery("SELECT * FROM articles;"); 
     var rs = s.getResultSet(); 
     while (rs.next()) { 
      results.push(new ArticleModel({ 
      id: rs.getInt("id"), 
      title: rs.getString("title"), 
      body: rs.getString("body") 
      })); 
     } 
     rs.close(); 
     c.close(); 
     return results; 
    } 

    throw new Error('could not connect to database');  
}; 
0

Seguramente si JavaScript puede hacer una llamada a un servidor que puede hacer una llamada a la dirección IP local (192.168.xx) y puede ser manejado usando un programa que escucha en un puerto específico? Todo lo que el programa debería hacer entonces es interactuar con la base de datos, encontrar la información y pasarla al javascript.

+1

La esperanza es (¿era?) Evitar la necesidad de esa pieza de código de pegamento en el proceso adicional que conlleva y más bien tener la charla JS directamente con el servidor MySQL. – BCS

0

Si utiliza node.js, creo que es posible que desee echarle un vistazo a esto. http://nodejsdb.org/

+0

Eso funcionaría del lado del servidor (creo) pero requeriría un poco más de trabajo del lado del cliente. – BCS

0

Sé que este es un hilo antiguo, pero creo que sigue siendo relevante.

He usado backbone.js como lib cliente en el navegador.Esto simplifica (casi trivializa) el acceso a datos desde el navegador.

Depende de los servicios RESTful en el servidor, y estos se pueden proporcionar fácilmente. A modo de ejemplo, podría utilizar Node.js phpwebsockets o Socket.IO

HTH

Cuestiones relacionadas