Java?JDBC高封裝Util類的項目實踐
Java JDBC高封裝Util類
import java.sql.*; ? public class JdbcUtil { ? private static final String URL = "jdbc:mysql://localhost:3306/database?serverTimezone=UTC&useSSL=false"; private static final String USERNAME = "username"; private static final String PASSWORD = "password"; ? private static Connection connection = null; ? static { try { connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } } ? public static PreparedStatement getPreparedStatement(String sql, Object... args) throws SQLException { PreparedStatement preparedStatement = connection.prepareStatement(sql); for (int i = 0; i < args.length; i++) { preparedStatement.setObject(i + 1, args[i]); } return preparedStatement; } ? public static ResultSet executeQuery(String sql, Object... args) throws SQLException { PreparedStatement preparedStatement = getPreparedStatement(sql, args); return preparedStatement.executeQuery(); } ? public static int executeUpdate(String sql, Object... args) throws SQLException { PreparedStatement preparedStatement = getPreparedStatement(sql, args); return preparedStatement.executeUpdate(); } ? public static void close() { try { if (connection != null && !connection.isClosed()) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
使用方法:
- 在需要使用JDBC連接的類中導(dǎo)入該util類。
- getPreparedStatement方法用于獲取預(yù)編譯語句對象并填充參數(shù),返回PreparedStatement對象。
- executeQuery方法用于執(zhí)行SELECT語句并返回查詢結(jié)果集,使用時需要傳入SQL語句和占位符參數(shù)。
- executeUpdate方法用于執(zhí)行增刪改操作并返回影響的行數(shù),使用時需要傳入SQL語句和占位符參數(shù)。
- 使用完畢后,調(diào)用close方法關(guān)閉連接。
請注意修改URL、USERNAME和PASSWORD為正確的值。
舉例:
假設(shè)我們有一個名為users的表,包括id、name和age三個字段。現(xiàn)在要查詢出所有用戶的姓名,可以這樣做:
import java.sql.*; ? public class Main { public static void main(String[] args) { try { String sql = "SELECT name FROM users"; ResultSet resultSet = JdbcUtil.executeQuery(sql); while (resultSet.next()) { String name = resultSet.getString("name"); System.out.println(name); } } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtil.close(); } } }
上述代碼中我們調(diào)用了JdbcUtil工具類的executeQuery方法來執(zhí)行SQL查詢語句,并獲取了查詢結(jié)果集。然后,我們遍歷結(jié)果集并打印出各個用戶的姓名。
如果需要執(zhí)行連接關(guān)閉操作,則需要在finally塊中調(diào)用JdbcUtil工具類的close方法來釋放連接。
以上僅是一個簡單的例子,當(dāng)然在實際開發(fā)中需要更多的參數(shù)設(shè)置和邏輯控制。
補(bǔ)充:
使用Vector數(shù)據(jù)結(jié)構(gòu)將查詢結(jié)果放置到表格控件中。
以下是一個簡單的例子,代碼中使用了javax.swing包中的JTable和DefaultTableModel類:
import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JScrollPane; ? public class Main { ? public static void main(String[] args) { try { // 執(zhí)行查詢語句 String sql = "SELECT * FROM users"; ResultSet resultSet = JdbcUtil.executeQuery(sql); ? // 將查詢結(jié)果封裝為Vector數(shù)據(jù)結(jié)構(gòu) Vector<String> columnNames = new Vector<>(); columnNames.add("id"); columnNames.add("name"); columnNames.add("age"); ? Vector<Vector<Object>> data = new Vector<>(); while (resultSet.next()) { Vector<Object> row = new Vector<>(); row.add(resultSet.getInt("id")); row.add(resultSet.getString("name")); row.add(resultSet.getInt("age")); data.add(row); } ? // 創(chuàng)建表格,并設(shè)置數(shù)據(jù) DefaultTableModel model = new DefaultTableModel(data, columnNames); JTable table = new JTable(model); ? // 將表格放置到窗口中 JFrame frame = new JFrame(); frame.getContentPane().add(new JScrollPane(table)); frame.setPreferredSize(new Dimension(500, 300)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); ? } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtil.close(); } } }
在上述代碼中,我們將查詢結(jié)果封裝為了一個Vector<Vector<Object>>類型的二維向量,其中外層向量表示所有行,內(nèi)層向量則表示每一行上的數(shù)據(jù),每個內(nèi)層向量的第一個元素表示"id"列的值,第二個元素表示"name"列的值,第三個元素表示"age"列的值。然后,我們使用DefaultTableModel類將查詢結(jié)果設(shè)置到表格中,并最終將表格放到窗口中以便查看。
此外,需要注意的是,在實際開發(fā)中,可能需要對查詢結(jié)果進(jìn)行更多的處理和格式控制。這里只是一個簡單的使用例子,僅供參考。
到此這篇關(guān)于Java JDBC高封裝Util類的項目實踐的文章就介紹到這了,更多相關(guān)Java JDBC封裝Util類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring監(jiān)視器actuator配置應(yīng)用
這篇文章主要介紹了spring監(jiān)視器actuator配置應(yīng)用,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07Java實現(xiàn)時間片輪轉(zhuǎn)調(diào)度算法的示例代碼
時間片輪轉(zhuǎn)調(diào)度是一種最古老,最簡單,最公平且使用最廣的算法,這篇文章主要為大家介紹了如何利用Java實現(xiàn)這一算法,需要的可以參考一下2023-07-07java實現(xiàn)給圖片加鋪滿的網(wǎng)格式文字水印
這篇文章主要給大家介紹了關(guān)于java實現(xiàn)給圖片加鋪滿的網(wǎng)格式文字水印的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python機(jī)器學(xué)習(xí)三大件之二pandas
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)三大件之二pandas,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05淺談java.util.concurrent包中的線程池和消息隊列
這篇文章主要介紹了淺談java.util.concurrent包中的線程池和消息隊列,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08