JDBC資料庫常用操作(mysql)

來源:互聯網
上載者:User

標籤:

JDBC
英文名稱:JavaDataBaseConnectivity
中文名稱:java資料庫連接
簡稱:JDBC
JDBC是一種用於執行SQL語句的JavaAPI,
可以為多種關聯式資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更進階的工具和介面,使資料庫開發人員能夠編寫資料庫應用
程式。

一、建立資料庫連接

1、引用jar檔案(http://dev.mysql.com/downloads/connector/j/ 下載jar檔案)

2、註冊驅動Class.forName(“com.mysql.jdbc.Driver”)(只需註冊一次)

3、定義資料庫連接字串URL="jdbc:mysql://127.0.0.1:3306/資料庫名稱?user=使用者名稱&password=密碼&useUnicode=true&characterEncoding=utf-8";

  JDBC:子協議:子名稱//主機名稱:連接埠/資料庫名?屬性名稱=屬性值&…
  user:使用者名稱
  password:密碼
  useUnicode:是否使用Unicode字元集,如果參數characterEncoding設定為gb2312或gbk,本參數值必須設定為true
  characterEncoding:當useUnicode設定為true時,指定字元編碼。比如可設定為gb2312或gbk
  autoReconnect:當資料庫連接異常中斷時,是否自動重新串連。(預設:false)
  autoReconnectForPools:是否使用針對資料庫連接池的重連策略。(預設:false)
  failOverReadOnly:自動重連成功後,串連是否設定為唯讀。(預設:true)
  maxReconnects:autoReconnect設定為true時,重試串連的次數(預設3:)
  initialTimeout:autoReconnect設定為true時,兩次重連之間的時間間隔,單位:秒 2
  connectTimeout:和資料庫伺服器建立socket串連時的逾時,單位:毫秒。 0表示永不逾時,適用於JDK 1.4及更高版本0
  socketTimeout:socket操作(讀寫)逾時,單位:毫秒。 0表示永不逾時

二、常用資料庫操作

  //資料庫連接字串    publicstaticfinalStringDRIVER="com.mysql.jdbc.Driver";    publicstaticfinalStringURL="jdbc:mysql://127.0.0.1:3306/MyLibrary?user=root&password=123456&useUnicode=true&characterEncoding=utf-8";

1、添加資料

    publicstaticvoidinsert()throwsSQLException{        Connectioncon=null;        Statementst=null;        try{            Class.forName(DRIVER);            con=DriverManager.getConnection(URL);            st=con.createStatement();            st.execute("insertintoarticle(title)values(‘標題‘);");        }catch(ClassNotFoundExceptione){            e.printStackTrace();        }finally{            con.close();            st.close();        }    }

2、刪除資料

    publicstaticvoiddelete(intid)throwsSQLException{        Connectioncon=null;        Statementst=null;        try{            Class.forName(DRIVER);            con=DriverManager.getConnection(URL);            st=con.createStatement();            st.executeUpdate("deletefromarticlewhereid="+id+";");        }catch(ClassNotFoundExceptione){            e.printStackTrace();        }finally{            con.close();            st.close();        }    }

3、修改資料

    publicstaticvoidupdate()throwsSQLException{        Connectioncon=DriverManager.getConnection(URL);        Statementst=con.createStatement();        st.executeUpdate("updatearticlesettitle=‘新標題‘whereid=1;");        con.close();        st.close();    }

4、查詢資料

    publicstaticvoidselect()throwsSQLException{        Connectioncon=null;        Statementst=null;        try{            Class.forName(DRIVER);            con=DriverManager.getConnection(URL);            st=con.createStatement();            ResultSetrs=st.executeQuery("select*fromarticle;");            while(rs.next()){                System.out.print(rs.getInt("id"));                System.out.println(rs.getString("title"));            }            //按表結構自動輸出//            ResultSetMetaDatarsmd=rs.getMetaData();//            for(inti=1;i<rsmd.getColumnCount();i++){//                System.out.print(rsmd.getColumnName(i));//                System.out.println(rsmd.getColumnTypeName(i));//            }        }catch(ClassNotFoundExceptione){            e.printStackTrace();        }finally{            st.close();            con.close();        }    }

5、參數預先處理

    publicstaticvoidinsert(Stringtitle)throwsSQLException{        Connectioncon=DriverManager.getConnection(URL);        PreparedStatementpst=con.prepareStatement("insertintoarticle(title)values(?);");        pst.setString(1,title);        pst.executeUpdate();        con.close();        pst.close();    }

6、批處理

    publicstaticvoidinsertBatch(String[]title)throwsSQLException{//        Connectioncon=DriverManager.getConnection(URL);//        Statementst=con.createStatement();//        for(inti=0;i<title.length;i++){//            st.addBatch("insertintoarticle(title)values(‘"+title[i]+"‘);");//        }//        st.executeBatch();        //        con.close();//        st.close();                //參數預先處理+批處理        Connectioncon=DriverManager.getConnection(URL);        PreparedStatementpst=con.prepareStatement("insertintoarticle(title)values(?);");        for(inti=0;i<title.length;i++){            pst.setString(1,title[i]);            pst.addBatch();        }        pst.executeBatch();        con.close();        pst.close();    }

7、事務操作

  7.1、資料庫事務的特性:
    原子性(atomicity):一個事務是一個不可分割的工作單位,事務中包括的操作要麼都做,要麼都不做。
    一致性(consistency):事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
    隔離性(isolation):一個事務的執行不能被其他事務幹擾。即一個事務內部的操作及使用的資料對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
    持久性(durability):持久性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中資料的改變就應該是永久性的。接下來的其他動作或故障不應該對其有任何影響。
  7.2、JDBC事務操作
  (1)setAutoCommit(Booleanauto Commit):設定是否自動認可事務;
  (2)commit():提交事務;
  (3)rollback():撤消事務;
    預設的情況為自動認可事務,也就是說,每一條對資料庫的更新的sql語句代表一項事務,操作成功後,系統自動調用commit()來提交,否則將調用rollback()來撤消事務。在jdbc中,可以通過調用setAutoCommit(false)來禁止自動認可事務。然後就可以把多條更新資料庫的sql語句做為一個事務,在所有操作完成之後,調用commit()來進行整體提交。倘若其中一項sql操作失敗,就不會執行commit()方法,而是產生相應的sqlexception,此時就可以捕獲異常代碼塊中調用rollback()方法撤消事務。

    publicstaticvoidtransaction()throwsSQLException{        Connectioncon=DriverManager.getConnection(URL);        Statementst=con.createStatement();        try{            con.setAutoCommit(false);//更改JDBC事務的預設提交方式            st.executeUpdate("deletefromarticlewhereid=1;");            st.executeUpdate("deletefromarticlewhereid=2;");            con.commit();//提交JDBC事務            con.setAutoCommit(true);//恢複JDBC事務的預設提交方式        }catch(Exceptionexc){            con.rollback();//復原JDBC事務        }finally{            st.close();            con.close();        }    }

8、調用mysql預存程序

    publicstaticvoidcallProcedure()throwsSQLException{        Connectioncon=DriverManager.getConnection(URL);        CallableStatementcst=con.prepareCall("{callproc_select(?)}");
     //傳入參數值 cst.setInt(1,3); //如果第一個結果是ResultSet對象,則返回true;如果第一個結果是更新、添加、修改或者沒有結果,則返回false booleanissuccess=cst.execute(); //成功返回true,失敗返回false System.out.println(issuccess); }

三、JDBC執行sql語句方法

  1、executeQuery(String sql): 執行SQL查詢,並返回ResultSet 對象。

  2、executeUpdate(String sql): 可執行增,刪,改,返回執行受到影響的行數。

  3、execute(String sql);:可執行任何SQL語句,返回一個布爾值,表示是否返回ResultSet 。

四、JDBC Statement類型

  1、Statement:介面提供了執行語句和擷取結果的基本方法,用於執行不帶參數的簡單SQL語句,每次執行sql語句,資料庫都要執行sql語句的編譯,最好用於僅執行一次查詢並返回結果的情形,效率高於PreparedStatement。

  2、PrepareStatement:可變參數的SQL,編譯一次,執行多次,效率高;安全性好,有效防止Sql注入等問題;支援批次更新,大量刪除;執行的SQL語句中是可以帶參數的,並支援批量執行SQL。由於採用Cache機制,則預先編譯的語句,就會放在Cache中,下次執行相同SQL語句時,則可以直接從Cache中取出來。

  3、CallableStatement:用於執行對資料庫已預存程序的調用,繼承自PreparedStatement,支援帶參SQL操作;支援調用預存程序,提供了對輸出和輸入/輸出參數的支援;
在JDBC中調用預存程序的文法如下所示:
  {call過程名[(?,?)]}
  返回結果參數的過程的文法為:
  {?=call過程名[(?,?,...)]}
  不帶參數的預存程序的文法類似:
  {call過程名}
  CallableStatement中定義的所有方法都用於處理OUT參數或INOUT參數的輸出部分:註冊OUT參數的JDBC類型(一般SQL類型)、從這些參數中檢索結果,或者檢查所返回的值是否為JDBCNULL。

JDBC資料庫常用操作(mysql)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.