JDBC學習

1 什麼是JDBC
jdbc的全稱是(Java Data Base Connectivity,java數據庫連接),其主要是由一些類和接口構成的API,它是J2SE的一部分,由java.sql,javax.sql包組成。是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供同一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,根據這種基準可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
2 怎麼使用JDBC
這裏寫圖片描述
JDBC鏈接數據庫的主要步驟:
1 註冊驅動
2 創建鏈接
3 創建能夠執行sql語句的statement等對象
4 執行語句
5 處理結果
6 釋放資源

註冊驅動的方式有三種:
Class.forName(“com.mysql.jdbc.Driver”);——將驅動類com.mysql.jdbc.Driver加載到虛擬機中。推薦這種方式,不會對具體的驅動類產生依賴。
DriverManager.registerDriver(com.mysql.jdbc.Driver);——會造成DriverManager中產生兩個一樣的驅動,並會對具體的驅動類產生依賴。
System.setProperty(“jdbc.drivers”, “driver1:driver2”);——雖然不會對具體的驅動類產生依賴,但註冊不太方便,所以很少使用。
建立連接:
Connection conn = DriverManager.getConnection(url, user, password);
url格式:
JDBC:子協議:子名稱//主機名:端口/數據庫名?屬性名=屬性值&…
user,password可以用“屬性名=屬性值”方式告訴數據庫。
其他參數如:useUnicode=true&characterEncoding=GBK(用於控制數據庫與應用程序之間的編碼,防亂碼)
釋放資源
釋放ResultSet, Statement,Connection。(一般都是進行close)
數據庫連接(Connection)是非常稀有的資源,用完後必須馬上釋放,如果Connection不能及時正確的關閉將導致系統宕機(?)。Connection的使用原則是儘量晚創建,儘量早的釋放。

還有很重要的是數據庫的事務
舉個例子

public void addStudent(String studentName, int studentAge, String studentPhone) throws Exception
{
    Connection connection = DBConnection.mysqlConnection;
    PreparedStatement ps = connection.prepareStatement("insert into student values(null,?,?,?)");
    ps.setString(1, studentName);
    ps.setInt(2, studentAge);
    ps.setString(3, studentPhone);
    if (ps.executeUpdate() > 0)
        System.out.println("添加學生信息成功");
    else
        System.out.println("添加學生信息失敗");    
}



public static void main(String[] args) throws Exception
{
    StudentManager.getInstance().addStudent("Betty", 17, "55555555");
}

運行就不運行了,反正最後結果是”添加學生信息成功”,數據庫裏面多了一條數據。注意一下:

1、增刪改用的是executeUpdate()方法,因爲增刪改認爲都是對數據庫的更新

2、查詢用的是executeQuery()方法,看名字就知道了”Query”,查詢嘛

可能有人注意到一個問題,就是Java代碼在insert後並沒有對事物進行commit,數據就添加進數據庫了,也能查出來,這是爲什麼呢?因爲JDK的Connection設置了事物的自動提交。如果在addStudent(…)方法裏面這麼寫:

Connection connection = DBConnection.mysqlConnection;
connection.setAutoCommit(false);

這時就需要我們手動提交:

public void addStudent(String studentName, int studentAge, String studentPhone) throws Exception
{
    Connection connection = DBConnection.mysqlConnection;
    connection.setAutoCommit(false);
    PreparedStatement ps = connection.prepareStatement("insert into student values(null,?,?,?)");
    ps.setString(1, studentName);
    ps.setInt(2, studentAge);
    ps.setString(3, studentPhone);
    try
    {
        ps.executeUpdate();
        connection.commit();
    } 
    catch (Exception e)
    {
        e.printStackTrace();
        connection.rollback();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章