什麼是JDBC JDBC全稱為:Java Data Base Connectivity,它是可以執行SQL語句的Java API 為什麼我們要用JDBC 市面上有非常多的資料庫,本來我們是需要根據不同的資料庫學習不同的API,sun公司為了簡化這個操作,定義了JDBC API【介面】 sun公司只是 ...
什麼是JDBC
JDBC全稱為:Java Data Base Connectivity,它是可以執行SQL語句的Java API
為什麼我們要用JDBC
- 市面上有非常多的資料庫,本來我們是需要根據不同的資料庫學習不同的API,sun公司為了簡化這個操作,定義了JDBC API【介面】
- sun公司只是提供了JDBC API【介面】,資料庫廠商負責實現。
- 對於我們來說,操作資料庫都是在JDBC API【介面】上,使用不同的資料庫,只要用資料庫廠商提供的資料庫驅動程式即可
- 這大大簡化了我們的學習成本
簡單操作JDBC
步驟:
- 導入MySQL或者Oracle驅動包
- 裝載資料庫驅動程式
- 獲取到與資料庫連接
- 獲取可以執行SQL語句的對象
- 執行SQL語句
- 關閉連接
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
/*
* 載入驅動有兩種方式
*
* 1:會導致驅動會註冊兩次,過度依賴於mysql的api,脫離的mysql的開發包,程式則無法編譯
* 2:驅動只會載入一次,不需要依賴具體的驅動,靈活性高
*
* 我們一般都是使用第二種方式
* */
//1.
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2.
Class.forName("com.mysql.jdbc.Driver");
//獲取與資料庫連接的對象-Connetcion
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");
//獲取執行sql語句的statement對象
statement = connection.createStatement();
//執行sql語句,拿到結果集
resultSet = statement.executeQuery("SELECT * FROM users");
//遍歷結果集,得到數據
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
System.out.println(resultSet.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
/*
* 關閉資源,後調用的先關閉
*
* 關閉之前,要判斷對象是否存在
* */
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
上面我們已經簡單使用JDBC去查詢資料庫的數據了,接下來我們去瞭解一下上面代碼用到的對象
Connection對象
客戶端與資料庫所有的交互都是通過Connection來完成的。
常用的方法:
//創建向資料庫發送sql的statement對象。
createcreateStatement()
//創建向資料庫發送預編譯sql的PrepareSatement對象。
prepareStatement(sql)
//創建執行存儲過程的callableStatement對象
prepareCall(sql)
//設置事務自動提交
setAutoCommit(boolean autoCommit)
//提交事務
commit()
//回滾事務
rollback()
Statement對象
Statement對象用於向資料庫發送Sql語句,對資料庫的增刪改查都可以通過此對象發送sql語句完成。
Statement對象的常用方法:
//查詢
executeQuery(String sql)
//增刪改
executeUpdate(String sql)
//任意sql語句都可以,但是目標不明確,很少用
execute(String sql)
//把多條的sql語句放進同一個批處理中
addBatch(String sql)
//向資料庫發送一批sql語句執行
executeBatch()
ResultSet對象
ResultSet對象代表Sql語句的執行結果,當Statement對象執行executeQuery()時,會返回一個ResultSet對象
ResultSet對象維護了一個數據行的游標【簡單理解成指針】,調用ResultSet.next()方法,可以讓游標指向具體的數據行,進行獲取該行的數據
常用方法:
//獲取任意類型的數據
getObject(String columnName)
//獲取指定類型的數據【各種類型,查看API】
getString(String columnName)
//對結果集進行滾動查看的方法
next()
Previous()
absolute(int row)
beforeFirst()
afterLast()
寫一個簡單工具類
通過上面的理解,我們已經能夠使用JDBC對資料庫的數據進行增刪改查了,我們發現,無論增刪改查都需要連接資料庫,關閉資源,所以我們把連接資料庫,釋放資源的操作抽取到一個工具類
/*
* 連接資料庫的driver,url,username,password通過配置文件來配置,可以增加靈活性
* 當我們需要切換資料庫的時候,只需要在配置文件中改以上的信息即可
*
* */
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
static {
try {
//獲取配置文件的讀入流
InputStream inputStream = UtilsDemo.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(inputStream);
//獲取配置文件的信息
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
//載入驅動類
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
}
public static void release(Connection connection, Statement statement, ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關註微信公眾號:Java3y