《Mysql必讀JDBC數據庫的使用操作總結》要點:
本文介紹了Mysql必讀JDBC數據庫的使用操作總結,希望對您有用。如果有疑問,可以聯系我們。
JDBC是一組能夠執行SQL語句的APIMYSQL應用
由于傳統的數據庫操作方式必要程序員掌握各個不同的數據庫的API,極其不便MYSQL應用
因此java定義了JDBC這一尺度的接口和類,為程序員操作數據庫提供了統一的方式MYSQL應用
JDBC的操作方式比擬單一,由五個流程組成:
1.通過數據庫廠商提供的JDBC類庫向DriverManager注冊數據庫驅動MYSQL應用
2.使用DriverManager提供的getConnection()辦法連接到數據庫MYSQL應用
3.通過數據庫的連接對象的createStatement辦法建立SQL語句對象MYSQL應用
4.執行SQL語句,并將成果集合返回到ResultSet中MYSQL應用
5.使用while循環讀取成果MYSQL應用
6.關閉數據庫資源MYSQL應用
下面來看看具體操作Mysql數據庫的辦法MYSQL應用
準備工作MYSQL應用
首先我們必要建立一個數據庫和一張簡單的表
MYSQL應用
mysql> use person;
Database changed
mysql> create table student(
??? -> id int,
??? -> name varchar(20),
??? -> birth year
??? -> ) default charset=utf8;
Query OK, 0 rows affected (0.10 sec)
MYSQL應用
其中這個包里面含有一份文檔,里面列舉了基本的使用辦法,可以參考MYSQL應用
我們的操作也是依照這份文檔中的內容進行,然后最主要的地方就是導入這個jar包MYSQL應用
MYSQL應用
為了操作便利,這里使用eclipse來導入MYSQL應用
右鍵項目-->構件路徑-->添加外部歸檔,添加好了之后如下所示MYSQL應用
MYSQL應用
現在我們正式開始使用java來操作mysql數據庫MYSQL應用
JDBC操作實例1:最簡單的查詢操作
MYSQL應用
public class Demo {
??? //為了代碼緊湊性,暫時拋出所有異常
??? public static void main(String[] args) throws Exception {
??????? //注冊數據庫驅動
??????? Class.forName("com.mysql.jdbc.Driver");
??????? //建立數據庫連接
??????? //參數一:jdbc:mysql//地址:端口/數據庫,參數二:用戶名,參數三:暗碼
??????? Connection conn = DriverManager.getConnection
??????????????? ("jdbc:mysql://localhost:3306/person","root","admin");
??????? //創建SQL語句
??????? Statement st = conn.createStatement();
??????? //執行語句,返回結果
??????? ResultSet rt = st.executeQuery("show tables");
??????? //循環取出結果
??????? while(rt.next()) {
??????????? //獲取字段
??????????? System.out.println(rt.getString("Tables_in_person"));
??????? }
??????? //關閉資源,最先打開的最后關
??????? rt.close();
??????? st.close();
??????? conn.close();
??? }
}
MYSQL應用
如此便可執行show tables語句查詢出當前數據庫含有多少張表MYSQL應用
其中rt.getString()辦法是獲取字段,這點需要注意MYSQL應用
關閉資源的方式也與以往相反MYSQL應用
不過,上面的操作方式靈活性不大,而且不嚴謹MYSQL應用
實例2:優化的查詢操作
MYSQL應用
public class Demo {
??? public static void main(String[] args) {
??????? String url = "jdbc:mysql://localhost:3306/person";
??????? String user = "root";
??????? String pwd = "admin";
??????? String sql = "select * from student";
??????? Connection conn = null;
??????? Statement st = null;
??????? ResultSet rs = null;
??????? try {
??????????? Class.forName("com.mysql.jdbc.Driver");
??????????? conn = DriverManager.getConnection(url,user,pwd);
??????????? st = conn.createStatement();
??????????? //執行查詢語句,另外也可以用execute(),代表執行任何SQL語句
??????????? rs = st.executeQuery(sql);
??????????? while(rs.next()) {
??????????????? System.out.println(rs.getObject(1) + "? " +
??????????????????????? rs.getObject(2) + "? " + rs.getInt("birth"));
??????????? }
??????? //分別捕捉異常
??????? } catch (ClassNotFoundException e) {
??????????? e.printStackTrace();
??????? } catch (SQLException e) {
??????????? e.printStackTrace();
??????? } finally {
??????????? try {
??????????????? //判斷資源是否存在
??????????????? if(rs != null) {
??????????????????? rs.close();
??????????????????? //顯示的設置為空,提示gc回收
??????????????????? rs = null;
??????????????? }
??????????????? if(st != null) {
??????????????????? st.close();
??????????????????? st = null;
??????????????? }
??????????????? if(conn != null) {
??????????????????? conn.close();
??????????????????? conn = null;
??????????????? }
??????????? } catch (SQLException e) {
??????????????? e.printStackTrace();
??????????? }???
??????? }
??? }
}
MYSQL應用
MYSQL應用
這里把異常給分別捕獲了,而且相關的字符串全部用變量定義MYSQL應用
需要注意下循環取出數據里面的getInt()辦法,此處必須知道類型和字段才能取出MYSQL應用
如果不知道可以使用getObject(1)取出第一列,getObject(2)取出第二列,以此類推MYSQL應用
實例3:自定義變量插入到數據庫
MYSQL應用
public class Demo {
??? public static void main(String[] args) {
??????? //參數檢查
??????? if (args.length != 3) {
??????????? System.out.println("參數形式不對");
??????????? System.exit(0);
??????? }
??????? String id = args[0];
??????? String name = args[1];
??????? String birth = args[2];
??????? String sql = "insert into student values(" + id + ",'" + name +
??????????????? "'," + "'" + birth + "')";
??????? System.out.println(sql);
??????? String url = "jdbc:mysql://localhost:3306/person";
??????? String user = "root";
??????? String pwd = "admin";
??????? Connection conn = null;
??????? Statement st = null;
??????? try {
??????????? Class.forName("com.mysql.jdbc.Driver");
??????????? conn = DriverManager.getConnection(url,user,pwd);
??????????? st = conn.createStatement();
??????????? //注意,此處是excuteUpdate()辦法執行
??????????? st.executeUpdate(sql);???????
??????? //分別捕獲異常
??????? } catch (ClassNotFoundException e) {
??????????? e.printStackTrace();
??????? } catch (SQLException e) {
??????????? e.printStackTrace();
??????? } finally {
??????????? try {
??????????????? if(st != null) {
??????????????????? st.close();
??????????????????? st = null;
??????????????? }
??????????????? if(conn != null) {
??????????????????? conn.close();
??????????????????? conn = null;
??????????????? }
??????????? } catch (SQLException e) {
??????????????? e.printStackTrace();
??????????? }???
??????? }
??? }
}
MYSQL應用
MYSQL應用
這里運行必要設置自變量,窗口中右鍵-->運行方式-->運行配置MYSQL應用
然后在自變量里面寫4 susan 1993,我沒有寫中文,因為發生亂碼,目前還不清楚原因MYSQL應用
需要注意的是,執行插入的SQL語句比擬難寫,最好是打印出SQL語句用以檢查MYSQL應用
實例4:PreparedStatement應用 MYSQL應用
從上面的Demo可以看到,插入數據的時候,SQL操作相當未便MYSQL應用
這里可以使用PreparedStatement對象來簡化SQL語句的建立
MYSQL應用
public class Demo {MYSQL應用
??? public static void main(String[] args) {
??????? if (args.length != 3) {
??????????? System.out.println("參數形式紕謬");
??????????? System.exit(0);
??????? }
??????? String id = args[0];
??????? String name = args[1];
??????? String birth = args[2];
??????? String url = "jdbc:mysql://localhost:3306/person";
??????? String user = "root";
??????? String pwd = "admin";MYSQL應用
??????? Connection conn = null;
??????? //聲明PreparedStatement對象的引用
??????? PreparedStatement pst = null;
??????? try {
??????????? Class.forName("com.mysql.jdbc.Driver");
??????????? conn = DriverManager.getConnection(url,user,pwd);
??????????? //使用?代替變量
??????????? pst = conn.prepareStatement("insert into student values (?,?,?)");
??????????? //給指定參數的位置設定變量
??????????? pst.setString(1, id);
??????????? pst.setString(2, name);
??????????? pst.setString(3, birth);
??????????? pst.executeUpdate();
??????? } catch (ClassNotFoundException e) {
??????????? e.printStackTrace();
??????? } catch (SQLException e) {
??????????? e.printStackTrace();
??????? } finally {
??????????? try {
??????????????? if(pst != null) {
??????????????????? pst.close();
??????????????????? pst = null;
??????????????? }
??????????????? if(conn != null) {
??????????????????? conn.close();
??????????????????? conn = null;
??????????????? }
??????????? } catch (SQLException e) {
??????????????? e.printStackTrace();
??????????? }???
??????? }
??? }
}
MYSQL應用
MYSQL應用
實例5:Batch批處理
MYSQL應用
public class Demo {MYSQL應用
??? public static void main(String[] args) {MYSQL應用
??????? String url = "jdbc:mysql://localhost:3306/person";
??????? String user = "root";
??????? String pwd = "admin";MYSQL應用
??????? Connection conn = null;
??????? Statement st = null;
??????? try {
??????????? Class.forName("com.mysql.jdbc.Driver");
??????????? conn = DriverManager.getConnection(url,user,pwd);
??????????? st = conn.createStatement();
??????????? //添加批處理
??????????? st.addBatch("insert into student values(6,'Jerry','1995')");
??????????? st.addBatch("insert into student values(7,'Greg','1996')");
??????????? st.addBatch("insert into student values(8,'Ryan','1997')");
??????????? //執行批處理
??????????? st.executeBatch();
??????? } catch (ClassNotFoundException e) {
??????????? e.printStackTrace();
??????? } catch (SQLException e) {
??????????? e.printStackTrace();
??????? } finally {
??????????? try {
??????????????? if(st != null) {
??????????????????? st.close();
??????????????????? st = null;
??????????????? }
??????????????? if(conn != null) {
??????????????????? conn.close();
??????????????????? conn = null;
??????????????? }
??????????? } catch (SQLException e) {
??????????????? e.printStackTrace();
??????????? }???
??????? }
??? }
}
MYSQL應用
MYSQL應用
批處理比擬簡單,只需先建立Statement對象,然后逐個添加批處理即可MYSQL應用
最后使用executeBatch()辦法執行批處理MYSQL應用
此外,PreparedStatement對象也可以使用批處理
MYSQL應用
事務處理是要求sql以單元的形式更新數據庫,要求其確保一致性MYSQL應用
如銀行的轉賬業務,一方轉出后,另一方則增加MYSQL應用
如果出現異常,那么所有的操作則會回滾
MYSQL應用
public class Demo {MYSQL應用
??? public static void main(String[] args) {MYSQL應用
??????? String url = "jdbc:mysql://localhost:3306/person";
??????? String user = "root";
??????? String pwd = "admin";MYSQL應用
??????? Connection conn = null;
??????? Statement st = null;
??????? try {
??????????? Class.forName("com.mysql.jdbc.Driver");
??????????? conn = DriverManager.getConnection(url,user,pwd);
??????????? //撤消自動提交
??????????? conn.setAutoCommit(false);
??????????? st = conn.createStatement();
??????????? st.addBatch("insert into student values(6,'Jerry','1995')");
??????????? st.addBatch("insert into student values(7,'Greg','1996')");
??????????? st.addBatch("insert into student values(8,'Ryan','1997')");
??????????? st.executeBatch();
??????????? //提交后設置自動提交
??????????? conn.commit();
??????????? conn.setAutoCommit(true);
??????? } catch (ClassNotFoundException e) {
??????????? e.printStackTrace();
??????? } catch (SQLException e) {
??????????? e.printStackTrace();MYSQL應用
??????????? if(conn != null) {
??????????????? try {
??????????????????? //出現異常則回滾操作,然后設置自動提交
??????????????????? conn.rollback();
??????????????????? conn.setAutoCommit(true);
??????????????? } catch (SQLException e1) {
??????????????????? e1.printStackTrace();
??????????????? }
??????????? }
??????? } finally {
??????????? try {
??????????????? if(st != null) {
??????????????????? st.close();
??????????????????? st = null;
??????????????? }
??????????????? if(conn != null) {
??????????????????? conn.close();
??????????????????? conn = null;
??????????????? }
??????????? } catch (SQLException e) {
??????????????? e.printStackTrace();
??????????? }???
??????? }
??? }
}
MYSQL應用
MYSQL應用
《Mysql必讀JDBC數據庫的使用操作總結》是否對您有啟發,歡迎查看更多與《Mysql必讀JDBC數據庫的使用操作總結》相關教程,學精學透。維易PHP學院為您提供精彩教程。