單獨(dú)使用jdbc編程問題
Public static void main(String[] args) { Connection connection = null; PReparedStatement preparedStatement = null; ResultSet resultSet = null; try { //加載數(shù)據(jù)庫驅(qū)動(dòng) Class.forName("com.MySQL.jdbc.Driver"); //通過驅(qū)動(dòng)管理類獲取數(shù)據(jù)庫鏈接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "111111"); //定義sql語句 ?表示占位符 String sql = "select * from user where username = ?"; //獲取預(yù)處理statement preparedStatement = connection.prepareStatement(sql); //設(shè)置參數(shù),第一個(gè)參數(shù)為sql語句中參數(shù)的序號(從1開始),第二個(gè)參數(shù)為設(shè)置的參數(shù)值 preparedStatement.setString(1, "王五"); //向數(shù)據(jù)庫發(fā)出sql執(zhí)行查詢,查詢出結(jié)果集 resultSet = preparedStatement.executeQuery(); //遍歷查詢結(jié)果集 while(resultSet.next()){ System.out.println(resultSet.getString("id")+" "+resultSet.getString("username")); } } catch (Exception e) { e.printStackTrace(); }finally{ //釋放資源 if(resultSet!=null){ try { resultSet.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(preparedStatement!=null){ try { preparedStatement.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(connection!=null){ try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }jdbc編程步驟
加載數(shù)據(jù)庫驅(qū)動(dòng)創(chuàng)建并獲取數(shù)據(jù)庫鏈接創(chuàng)建jdbc statement對象設(shè)置sql語句設(shè)置sql語句中的參數(shù)(使用preparedStatement)通過statement執(zhí)行sql并獲取結(jié)果對sql執(zhí)行結(jié)果進(jìn)行解析處理釋放資源(resultSet、preparedstatement、connection)jdbc編程總結(jié)
數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫鏈接池可解決此問題。Sql語句在代碼中硬編碼,造成代碼不易維護(hù),實(shí)際應(yīng)用sql變化的可能較大,sql變動(dòng)需要改變java代碼使用preparedStatement向占有位符號傳參數(shù)存在硬編碼,因?yàn)閟ql語句的where條件不一定,可能多也可能少,修改sql還要修改代碼,系統(tǒng)不易維護(hù)。對結(jié)果集解析存在硬編碼(查詢列名),sql變化導(dǎo)致解析代碼變化,系統(tǒng)不易維護(hù),如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便新聞熱點(diǎn)
疑難解答