Java脚本-如何结束与数据库的连接?

时间:2018-10-10 17:35:33

标签: javascript node.js

我有一个下面的代码,它运行良好(从数据库中获取数据),但是当我从终端(例如node db.js)运行它时,它会返回数据但永远不会关闭(无法在其中键入next命令)终端。

var mysql = require('mysql');

var connection = mysql.createConnection({
    host: '...',
    user: '...',
    password: "...,
    port : ..., //port mysql
    database: '...'
});

connection.connect(function(err) {
  if (err) throw err;
  connection.query("SELECT * FROM table", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
});

应该在.js的末尾添加什么?

4 个答案:

答案 0 :(得分:1)

您可以使用connection.end();终止连接 您必须在查询后添加它,因为必须先完成查询。这是修改后的代码:

var mysql = require('mysql');

var connection = mysql.createConnection({
    host: '...',
    user: '...',
    password: "...,
    port : ..., //port mysql
    database: '...'
});

connection.connect(function(err) {
  if (err) throw err;
  connection.query("SELECT * FROM table", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
  connection.end();
});
  

使用end()结束连接,以确保所有   在将退出数据包发送到   mysql服务器。

https://github.com/mysqljs/mysql#introduction

答案 1 :(得分:0)

因为所有查询必须在结束连接之前完成,所以将以下行放在回调之外:

connection.end();

答案 2 :(得分:0)

您可以通过以下方式结束该过程: public class PlayState extends State { //Objects private final GameStateManager gameStateManager; private final State me; private EntityManager entityManager; private Player player; private Texture background; private Texture filter; private BitmapFont font; private Sound click, boost; private Drug drug; private Border border; private House house; //Constants public static final int FIELD_SIZE_HEIGHT = 1000; public static final int FIELD_SIZE_WIDTH = 500; //Variables private int collectedDrugs; private boolean pause, renderLost; private boolean boostSound; //Button pause private Stage stage; private ImageButton button; private Drawable drawable; private Texture textureBtn; public PlayState(GameStateManager gsm) { super(gsm); gameStateManager = gsm; me = this; entityManager = new EntityManager(); player = new Player(this, 100, 100); border = new Border(); background = new Texture("bggame.png"); filter = new Texture("filter.png"); cam.setToOrtho(false, MinniMafia.WIDTH, MinniMafia.HEIGHT); click = Gdx.audio.newSound(Gdx.files.internal("Click.mp3")); boost = Gdx.audio.newSound(Gdx.files.internal("boost.mp3")); drug = new Drug(); house = new House(); collectedDrugs = 0; font = new BitmapFont(); entityManager.addEntity(player); entityManager.addEntity(drug); entityManager.addEntity(border); entityManager.addEntity(house); pause = false; renderLost = false; boostSound = false; stage = new Stage(); textureBtn = new Texture("pausebtn.png"); drawable = new TextureRegionDrawable(new TextureRegion(textureBtn)); button = new ImageButton(drawable); button.setPosition(cam.position.x + cam.viewportWidth/2 - 50, cam.position.y + cam.viewportHeight/2 - 50); button.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { gameStateManager.set(new PauseState(gameStateManager, me)); } }); stage.addActor(button); Gdx.input.setInputProcessor(button.getStage()); } @Override protected void handleInput() { if (Gdx.input.justTouched()) { click.play(0.2f); } if (Gdx.input.isTouched()) { player.setStop(true); boostSound = false; } else { if (!boostSound) { boost.play(0.2f); boostSound = true; } player.setStop(false); } } @Override public void update(float dt) { Gdx.input.setInputProcessor(stage); if(Gdx.input.getInputProcessor() == stage){ System.out.println("All working"); }else{ System.out.println("Error"); } if (!pause) { handleInput(); entityManager.updateEntities(dt); setCam(); button.setPosition(cam.position.x + cam.viewportWidth/2 - 60, cam.position.y + cam.viewportHeight/2 - 60); if (drug.collides(player.getBounds())) { entityManager.disposeEntity(drug); player.setGotDrug(true); } if (border.collides(player.getBounds()) && !border.isOpen()) { pause = true; renderLost = true; } if (house.collides(player.getBounds()) && player.isGotDrug()) { player.setGotDrug(false); collectedDrugs++; drug = new Drug(); entityManager.addEntity(drug); } } else if (renderLost = true) { if (Gdx.input.isTouched()) { gsm.set(new MenuState(gsm)); dispose(); } } } @Override public void render(SpriteBatch sb) { sb.setProjectionMatrix(cam.combined); sb.begin(); sb.draw(background, 0, 0); entityManager.renderEntities(sb); button.draw(sb, 10f); font.draw(sb, "" + collectedDrugs, cam.position.x - cam.viewportWidth / 2 + 10, cam.position.y - cam.viewportHeight / 2 + 20); if (renderLost) { sb.draw(filter, cam.position.x - cam.viewportWidth / 2, cam.position.y - cam.viewportHeight / 2); font.draw(sb, "LOST! SCORE:" + collectedDrugs, cam.position.x - 50, cam.position.y); } sb.end(); } @Override public void dispose() { background.dispose(); entityManager.disposeAll(); click.dispose(); } private void setCam() { float camViewportHalfX = cam.viewportWidth * .5f; float camViewportHalfY = cam.viewportHeight * .5f; cam.position.x = player.getPosition().x; cam.position.y = player.getPosition().y; cam.position.x = MathUtils.clamp(cam.position.x, camViewportHalfX, FIELD_SIZE_WIDTH - camViewportHalfX); cam.position.y = MathUtils.clamp(cam.position.y, camViewportHalfY, FIELD_SIZE_HEIGHT - camViewportHalfY); cam.update(); } public Drug getDrug() { return drug; } public House getHouse() { return house; } } 方法。

答案 3 :(得分:0)

查询完成后,您需要告诉MySQL.js关闭连接。例如:

var mysql = require('mysql');

var connection = mysql.createConnection({
    host: '...',
    user: '...',
    password: "...,
    port : ..., //port mysql
    database: '...'
});

connection.connect(function(err) {
  if (err) throw err;
  connection.query("SELECT * FROM table", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
    connection.end(function (err) { if (err) throw err; } });
  });
});

有关更多信息,请参见MySQL.js文档:https://github.com/mysqljs/mysql#terminating-connections