0

我是一个菜鸟 java 和 MySQL 用户。这是我第一次编写一个用 MySQL 数据库实现的 java 程序。我有疑问,为什么当我在位于另一台计算机但在同一个本地网络中的客户端中执行查询时它有这么多延迟。

我的程序结构:

这是一个餐厅POS应用程序。我的数据库和我的 POS 程序位于不同的计算机上。我的查询命令都内置在我的程序中。我的数据库只有一个模式和几个表。这些表中存储的行数据很少。

问题:

当我在我的程序中按下一个按钮并运行一个查询并从我的数据库中选择一行时,tt 至少需要 1 秒才能执行它并返回一些东西。所以我尝试将我的程序移动到与数据库服务器相同的计算机上。它的运行速度是以前的 10 倍。我的天啊。到底是怎么回事。我不知道为什么查询通过本地网络运行时需要这么长时间。有人可以解释一下为什么,如果可能的话,还有什么替代方法可以使它成为实时的,哈哈。

我的示例查询代码:

  Connection co = null;
  PreparedStatement ps= null; 
  try{
        co = myconnection.getConnection();

        String insert = "INSERT INTO `R`.`order` (name, firstCourse, secondCourse,           thirdCourse, seafood, other, dessert, drink, price, quantity, note, type, position , time_in ,subtable, tid , aid ) ";
               insert += "VALUE ( '"+itemName+"','"+itemFirst+"','"+itemSecond+"','"+itemThird+"','"+itemSeafood+"','"+itemOther+"','"+itemDessert+"','"+itemDrink+"','"+itemPrice+"','"+num+"','"+notes+"','"+type+"','"+position+"','"+dateTime+"','"+subcheck+"','"+tableID+"','"+userID+"')";


        ps = co.prepareStatement(insert);
        ps.executeUpdate();
        this.updateJTable();

    }catch(Exception e){
        System.out.println("error occur when insert item:"+e);
    }finally{
            try {
                 ps.close();
                 co.close();
            } catch (SQLException e) { /* ignored */}
    }

这是我的连接类:

import java.sql.*;

public class myConnection {
public static Connection getConnection() throws Exception {
    String url = "jdbc:mysql://192.168.1.2:3306/r";
    String user = "root"; 
    String pass = "";
    Connection connection = null;
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    try{
        connection = DriverManager.getConnection(url, user, pass);
    }catch (SQLException ex) {
        ex.printStackTrace();
    }
    return connection;
}

public static void closeConnection(Connection connection) throws SQLException {
    //if (connection != null && !connection.isClosed()) {         
        connection.close();
    //}
}
public  void closeRs(ResultSet resultSet) throws SQLException{
    //if (resultSet != null) {         
        resultSet.close();
    //}
}
public  void closePs(PreparedStatement preparedStatement) throws SQLException{
    //if (preparedStatement != null) {         
        preparedStatement.close();
    //}
}
}
4

1 回答 1

6

通过网络建立连接非常昂贵,连接越远,成本越高。

相反,我建议保持连接或使用连接池。这意味着与创建新连接相比,您花费更多时间执行查询、插入或更新。

于 2013-06-01T21:23:46.930 回答