将大型sql查询转换为json

时间:2015-05-18 23:23:39

标签: java javascript mysql json jdbc

这个问题涉及将SQL查询结果转换为JSON的最佳方法的设计。现在,我循环遍历一个查询(用户)的结果,并对每个用户的教育和使用进行单独查询,以作为可变长度的JSON数组附加(下面的选项2)。我不确定我正在做的方式是否是适当的解决方案,或者是否首选解析连接表。这是我的问题:

选项1:我可以使用连接并获得类似的内容:

user  |  employment  | position       | education   | degree  
john  |  BCG         | consultant     | harvard     | MBA  
john  |  BCG         | consultant     | ut Austin   | bs  
john  | White house  | speechwriter   | harvard     | MBA  
john  | White house  | speechwriter   | ut Austin   | bs  
john  | Papa Johns   | delivery boy   | harvard     | MBA  
john  | Papa Johns   | delivery boy   | ut Austin   | bs  
rob   | google       | engineer       | ut Austin   | bs  
rob   | dropbox      | engineer       | ut Austin   | bs  

选项2:我可以选择对用户进行查询,例如:

user  
john  
rob   

然后可以在Java中循环遍历这些用户,然后对每个用户进行查询,即对于john我会得到:

employment     | postion  
BCG            | consultant  
whitehouse     | speechwriter  
papa johns     | delivery boy  
.... and a similar one for education.

第二个选项似乎可以更容易地将其转换为json,但我还必须为每个用户进行多次SQL查询,每次都打开一个连接。对于第一个选项,我不太确定如何将其转换为json,但它应该是可行的。

如果有人能告诉我哪种方法是最佳做法,我真的很感激。谢谢!

1 个答案:

答案 0 :(得分:0)

是否可以使用Node.js?

您可以通过Node脚本查询Mysql。查询的结果将是一个JavaScript对象,您可以在JSON文件中轻松转换并保存到磁盘。

<强>必需

  • 的NodeJS
  • npm install mysql

节点脚本(未经测试!)

var mysql = require('mysql'), //mysql connector
    fs = require('fs'), //file system
    data = [];

//connect to MySQL 
var connection = mysql.createConnection(
    {
      host     : 'localhost',
      user     : 'your-username',
      password : 'your-password',
      database : 'db-name',
    }
);

connection.connect();

var queryString = 'SELECT * FROM myTable';

//query MySQL 
connection.query(queryString, function(err, rows, fields) {
    if (err) throw err;

    //save result to local variable
    data = rows;
});

connection.end();

var outputFilename = '/tmp/my.json',
    jsonString = JSON.stringify(data, null, 2); //extra params for pretty printing

//save json to file
fs.writeFile(outputFilename, jsonString, function(err)         {
    if(err) {
      console.log(err);
    } else {
      console.log("JSON saved to " + outputFilename);
    }
}); 

如果查询太大,可以修改代码以将行追加到文件(而不是writeFile),并首先查询查询总数,然后读取行的行并重复直到查询中的总od行< / p>