簡體   English   中英

為類中的每個方法打開數據庫連接

[英]Opening DB connection for each method in class

我編寫了一個控制器類,其中包含許多執行某些數據庫事務的方法。 為每個方法對象創建DBConnect類。 我想知道以下哪種方法更有效。

(1)每種方法的打開連接(如所附代碼中所示)

(2)為該類打開一個連接,並在該類的所有方法中使用它,我的代碼是:

public class HotelController
{
    Connection conn;
    ResultSet rs;
    PreparedStatement preparedstatement;

    public void addNewHotel( Hotel hotel ) throws Exception
    {
        try
        {
            conn = DBConnect.getInstance().getConnect();
            String sql = "insert into hotel" + " (hotelName,city) values (?,?)";
            preparedstatement = conn.prepareStatement( sql );
            preparedstatement.setString( 1, hotel.getName() );
            preparedstatement.setString( 2, hotel.getCity() );

            boolean flag = preparedstatement.execute();
            if ( flag )
            {
                JOptionPane.showMessageDialog( null, "Hotel Details Added Successfully." );
            }
        }
        catch ( SQLException ex )
        {
            ex.printStackTrace();
        }
    }

    public int getHotelID( String name ) throws Exception
    {
        int id = 1;
        try
        {
            conn = DBConnect.getInstance().getConnect();
            String sql = "select hotelID from hotel where hotelName = ?";
            preparedstatement = conn.prepareStatement( sql );
            preparedstatement.setString( 1, name );
            rs = preparedstatement.executeQuery();

            while ( rs.next() )
            {
                id = rs.getInt( 1 );
            }
        }
        catch ( SQLException ex )
        {
            ex.printStackTrace();
        }
        return id;
    }

    public void loadHotels( JComboBox cbox ) throws Exception
    {
        try
        {
            conn = DBConnect.getInstance().getConnect();
            String sql = "select hotelName from hotel";
            preparedstatement = conn.prepareStatement( sql );
            rs = preparedstatement.executeQuery();

            while ( rs.next() )
            {
                cbox.addItem( rs.getString( "hotelName" ) );
            }
        }
        catch ( SQLException ex )
        {
            ex.printStackTrace();
        }
        finally {

        }
    }

}

嘗試使用連接池 ,因為打開/關閉數據庫連接是一個昂貴的過程,因此連接池提高了我們在池中維護連接對象的數據庫上命令執行的性能。 它有助於重用同一連接對象來滿足許多客戶端請求。 每次收到客戶端請求時,都會在池中搜索可用的連接對象,並且很有可能獲得一個空閑的連接對象。 否則,要么將傳入的請求放入隊列中,要么創建一個新的連接對象並將其添加到池中。由於大多數請求僅使用現有的連接對象進行服務,因此連接池方法降低了用戶等待的平均時間建立與數據庫的連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM