前言 java連接資料庫完整流程為: 1,獲得驅動(driver),資料庫連接(url),用戶名(username),密碼(password)基本信息的三種方式。 2,通過獲得的信息完成JDBC實現連接資料庫。 註:連接前請導入jar包,例:連接mysql資料庫需要導入mysql-connector ...
前言
java連接資料庫完整流程為:
1,獲得驅動(driver),資料庫連接(url),用戶名(username),密碼(password)基本信息的三種方式。
2,通過獲得的信息完成JDBC實現連接資料庫。
註:連接前請導入jar包,例:連接mysql資料庫需要導入mysql-connector-java-5.1.39-bin.jar包
連接資料庫的三種方式
三種方式中二,三最為常用
一,直接獲取資料庫信息,並jdbc驅動連接
這裡寫代碼片 public static Connection connection() { //獲得連接資料庫連接 Connection conn=null; try { //初始化Driver類,註冊驅動 Class.forName("com.mysql.jdbc.Driver"); //連接資料庫 conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/web", "root", "root"); } catch (Exception e) { e.printStackTrace(); } return conn; }
二,獲得db.properties文件中的配置信息獲得
註解:
ResourceBundle 類的作用就是讀取資源屬性文件(properties),根據.properties文件的名稱信息(本地化信息),匹配當前系統的國別語言信息(也可以程式指定),然後獲取相應的properties文件的內容。
public class Jdbc_Conn2 { private static String driver; private static String url; private static String username; private static String password; static { //通過ResourceBundle獲得db文件中的信息 ResourceBundle bundle = ResourceBundle.getBundle("db"); //通過key值獲得db文件中的配置信息 driver=bundle.getString(driver); url=bundle.getString(url); username=bundle.getString(username); password=bundle.getString(password); } public static Connection mysqlconn() { //連接資料庫 Connection conn=null; Class.forName(driver); conn= DriverManager.getConnection(url, username, password); return conn; }
三、通過IO流獲得db文件中配置信息
註解: *首先,調用對象的getClass()方法是獲得對象當前的類類型,這部分數據存在方法區中,而後在類類型上調用getClassLoader()方法是得到當前類型的類載入器,在Java中所有的類都是通過載入器載入到虛擬機中的,
而且類載入器之間存在父子關係,就是子知道父,父不知道子,這樣不同的子載入的類型之間是無法訪問的(雖然它們都被放在方法區中),所以在這裡通過當前類的載入器來載入資源也就是保證是和類類型同一個載入器載入的。 最後調用了類載入器的getResourceAsStream()方法來載入文件資源*
public class Jdbc_Conn3 { private static String dirver; private static String url; private static String username; private static String password; static { //IO流 InputStream is=Jdbc_Conn3.class.getClassLoader().getResourceAsStream("db.properties"); Properties props=new Properties(); try { props.load(is); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } dirver=props.getProperty("driver"); url=props.getProperty("url"); username=props.getProperty("username"); password=props.getProperty("password"); } public static Connection mysqlconn() { //1,獲得連接資料庫的驅動 Connection conn=null; Class.forName(dirver); conn= DriverManager.getConnection(url, username, password); return conn; }
連資料庫後,使用完畢需要關閉連接
關閉資料庫需要關閉以下資源:1,Connection(連接).2,PreparedStatement(預編譯).3,Result(結果集)
public static void mysqlcolse(Connection con,PreparedStatement pstem,ResultSet rs) { try { if(con!=null) { con.close(); } if(pstem!=null) { pstem.close(); } if(rs!=null) { rs.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
完成以上步驟便是一個連接資料庫的java模板了,以上連接方法與關閉方法存於一個java文件中即可完成。
增、刪、改、查
前言
1 以下代碼在完成連接資料庫的基礎之上完成,通過java實現對資料庫的增刪改查
一、查詢功能
註:
Connection中prepareStatement()方法,提供占位符(?),占位符設置參數setXXX(index,value)。優點:改動參數時,不需改動sql,通過占位符修改。
ResultSet類,作為查詢條件的返回集的作用
//先聲明對象,優點在於方便下方任意代碼塊調用對象信息。 Connection con=null; PreparedStatement pstm=null; ResultSet rs=null; @Test public void testJv3() { //1,通過JDBC的模板連接上資料庫 con=Jdbc_Conn3.mysqlcon(); //2,編寫sql語句 String sql="select * from user where uid=?"; try { //3.預編譯需要執行的sql pstm = con.prepareStatement(sql); //prepareStatement中占位符?,通過setXXX(index,values)來進行設置,index從1開始, pstm.setInt(1, 1); //執行sql並返回查詢結果 ResultSet rs = pstm.executeQuery(); if(rs.next()) { String password=rs.getString(3); String uname=rs.getString(2); System.out.println(uname+":"+password); }else { System.out.println("沒有結果"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { Jdbc_Conn3.mysqlcolse(con, pstm, rs); } }
額外知識點:查詢條件輸出方式
if():當只有一條結果時,可用if
while():當有多條結果時,可用while
二、增,刪,改
增刪改,只需要改對應sql即可,以下代碼為模板。
PreparedStatement pstm=null; Connection con=null; //1,實例化MyDataSource ComboPooledDataSource mdsc= new ComboPooledDataSource(); //2.從MyDataSource的池中獲得連接對象 try { con= mdsc.getConnection(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //3.寫sql String sql="insert into user values (null,?,?)"; //4,預編譯 try { pstm= con.prepareStatement(sql); pstm.setString(1, "zj"); pstm.setString(2, "zj"); int col=pstm.executeUpdate(); if(col>0) { System.out.println("添加成功:"+col+"條數"); }else { System.out.println("添加失敗"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { JDBCUtils_V3.release(con, pstm, null); } }