1.JDBC瞭解 JDBC(Java Data Base Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。 2.開發步驟 1.創建一個java項目 2.導入mysql的數據庫驅動jar包 驅動包 3.註冊驅動 Class.forName(“”) 4.獲取與數據庫的鏈接 5.得到代表發送和執行SQL語句的對象 Statement 6.執行語句 7.如果執行的是查詢語句,就會有結果集,處理 8.釋放佔用的資源 3.代碼
// 註冊數據庫驅動 DriverManager.deregisterDriver(new Driver()); // 獲取數據庫連接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456"); // 獲取執行sql語句的statem0ent Statement st = conn.createStatement(); String sql = "select * from user "; // 執行sql語句增刪改查 //st.executeUpdate("insert into user values(12,'楊過','123456')"); //st.executeUpdate("update user set namer='楊康' where id='12'"); //st.executeUpdate("delete from user where id='12'"); ResultSet set = st.executeQuery(sql); while (set.next()) { // 獲取指定位置的數據,角標從1 開始 String com1 = set.getString(1); String com2 = set.getString(2); String com3 = set.getString(3); String com4 = set.getString(4); System.out.println(com2 + ":" + com3 + ":" + com4 + ":" + com1); } // 釋放數據庫資源 set.close(); st.close(); conn.close();
4.PreparedStatement PreparedStatement實現Statement PreparedStatement需要預編譯以及需要參數 由於PreparedStatement有緩存區,所以效率更高 由於PreparedStatement有緩存區,所以更安全,防止了注入(1=1) 語句中的參數可以使用佔位符(?) ?
// 準備sql預編譯語句 // ?佔用一個參數位 String sql = "INSERT INTO user (NAME,sex,age) VALUES (?,?,?);"; // 3:執行sql預編譯語句(檢查語法) stsm=conn.prepareStatement(sql); // 4:設置傳遞的參數 stsm.setString(1,"張三"); stsm.setString(2,"男"); stsm.setInt(3,20); // 5:發送參數,執行sql // 注意:這裏的方法後面沒有參數 int result = stsm.executeUpdate();
5.封裝工具類的使用 1)db.properties
className=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localhost:3306/reba name=root password=12345
2)JdbcUtil.class
public static String DRIVER ; public static String URL ; public static String USERNAME ; public static String PASSWORD ; static{ //讀取配置文件的方式 InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"); Properties p = new Properties(); try { p.load(is); DRIVER = p.getProperty("driverClass"); URL = p.getProperty("jdbcUrl"); USERNAME = p.getProperty("username"); PASSWORD = p.getProperty("password"); Class.forName(DRIVER);//加載驅動 } catch (Exception e) { e.printStackTrace(); } } /** * 獲取數據庫連接 * @return * @throws Exception */ public static Connection getConnection() throws Exception{ return DriverManager.getConnection(URL, USERNAME, PASSWORD); } /** * 關閉資源的方法 * @param rs * @param st * @param con */ public static void release(ResultSet rs ,Statement st,Connection con){ //6.關閉資源 (有順序) if(rs!=null){ try { rs.close(); rs = null; //垃圾回收器立即回收 } catch (SQLException e) { e.printStackTrace(); } } if(st!=null){ try { st.close(); st = null; } catch (SQLException e) { e.printStackTrace(); } } if(con!=null){ try { con.close(); con = null; } catch (SQLException e) { e.printStackTrace(); } } }
3)Test.class
Connection con = null; Statement st = null; ResultSet rs = null; try { con = JdbcUtil.getConnection(); st = con.createStatement(); rs = st.executeQuery(""); while(rs.next()){ //封裝數據 } } catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtil.release(null, st, con); }