---來自我的CSDN博客---
JDBC概述
使用JDBC也挺長時間了,最近因為想學習mybatis的源碼,因此打算重新復習一下JDBC的使用。
定義:JDBC(Java DataBase Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基准,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
也就是說JDBC是SUN公司提出來的一系列規范,但它只定義了接口規范,具體的實現則交給各個數據庫的廠商去做。這類似以前的軟件要調用打印機的時候都要自己去給各種類型的打印機實現驅動,但微軟在操作系統定義了打印機驅動接口,由各個打印機廠商去實現,而軟件供應商只需要調用接口即可(不然每個數據庫都要自己去實現驅動,會累死的)。我想這也符合JAVA跨平台的思想,實現“Write once, run anywhere!”。
JDBC使用詳解
先上代碼,一個簡單的連接,查詢用戶信息:
/**
* 如果你要使用我的代碼,在此之前請在mysql創建jdbc_test數據庫,並建立student表,兩個字段,name和age
*/
public class JDBCTest {
/**
* 數據庫相關參數
*/
//這是驅動名稱,此例子中我們加載的是mysql的驅動,在之前需要導入mysql的驅動jar包
public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//連接數據庫的url,各個數據庫廠商不一樣,此處為mysql的;后面是創建的數據庫名稱
public static final String JDBC_URL = "jdbc:mysql://localhost:3306/jdbc_test";
//連接數據庫所需賬戶名
public static final String JDBC_USERNAME = "root";
//用戶名對應的密碼,我的mysql密碼是123456
public static final String JDBC_PASSWORD ="123456";
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//第一步:加載Driver類,注冊數據庫驅動
Class.forName(JDBC_DRIVER);
//第二步:通過DriverManager,使用url,用戶名和密碼建立連接(Connection)
connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
//第三步:通過Connection,使用sql語句打開Statement對象;
preparedStatement = connection.prepareStatement("select * from student where age =?");
//傳入參數,之所以這樣是為了防止sql注入
preparedStatement.setInt(1, 18);
//第四步:執行語句,將結果返回resultSet
resultSet = preparedStatement.executeQuery();
//第五步:對結果進行處理
while (resultSet.next()){
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
Student student = new Student();
student.setAge(age);
student.setName(name);
students.add(student);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//第六步:倒敘釋放資源resultSet-》preparedStatement-》connection
try {
if (resultSet!=null && !resultSet.isClosed()){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(preparedStatement!=null &&
!preparedStatement.isClosed()){
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(connection!=null && connection.isClosed()){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
for (Student student:students
) {
System.out.println(student.getName()+"="+student.getAge());
}
}
}
以上就是JDBC查詢的基本連接過程,后續一些復雜的數據庫操作過程只不過是在上面進行一些增改而已。大體步驟如注釋:
JDBC流程:
第一步:加載Driver類,注冊數據庫驅動;
第二步:通過DriverManager,使用url,用戶名和密碼建立連接(Connection);
第三步:通過Connection,使用sql語句打開Statement對象;
第四步:執行語句,將結果返回resultSet;
第五步:對結果resultSet進行處理;
第六步:倒敘釋放資源resultSet-》preparedStatement-》connection。
如果是刪除,修改和插入,使用executeUpdate()即可:
/**
* 如果你要使用我的代碼,在此之前請在mysql創建jdbc_test數據庫,並建立student表,兩個字段,name和age
*/
public class JDBCTest {
/**
* 數據庫相關參數
*/
//這是驅動名稱,此例子中我們加載的是mysql的驅動,在之前需要導入mysql的驅動jar包
public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//連接數據庫的url,各個數據庫廠商不一樣,此處為mysql的;后面是創建的數據庫名稱
public static final String JDBC_URL = "jdbc:mysql://localhost:3306/jdbc_test";
//連接數據庫所需賬戶名
public static final String JDBC_USERNAME = "root";
//用戶名對應的密碼,我的mysql密碼是123456
public static final String JDBC_PASSWORD = "123456";
@Test
public void testUpdate() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
//第一步:加載Driver類,注冊數據庫驅動
Class.forName(JDBC_DRIVER);
//第二步:通過DriverManager,使用url,用戶名和密碼建立連接(Connection)
connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
//第三步:通過Connection,使用sql語句打開Statement對象;
preparedStatement = connection.prepareStatement("UPDATE student SET age=20 WHERE name=?");
//傳入參數,之所以這樣是為了防止sql注入
preparedStatement.setString(1, "xiaoming");
//第四步:執行語句,將結果返回resultSet
int count = preparedStatement.executeUpdate();
//第五步:對結果進行處理
System.out.println(count);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//第六步:倒敘釋放資源resultSet-》preparedStatement-》connection
try {
if (preparedStatement != null &&
!preparedStatement.isClosed()) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (connection != null && connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
以及批量操作:
@Test
/**
* 測試批量操作
*/
public void testBatch() {
Connection connection = null;
PreparedStatement preparedStatement = null;
String insertSql = "insert into student values(?,?)";
try {
//第一步:加載Driver類,注冊數據庫驅動
Class.forName(JDBC_DRIVER);
//第二步:通過DriverManager,使用url,用戶名和密碼建立連接(Connection)
connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
//第三步:通過Connection,使用sql語句打開Statement對象;
preparedStatement = connection.prepareStatement(insertSql);
//傳入參數,之所以這樣是為了防止sql注入
for(int i=0;i<10;i++){
preparedStatement.setString(1,100+i+"user");
preparedStatement.setInt(2,100+i);
preparedStatement.addBatch();
}
//第四步:執行語句,將結果返回resultSet
int[] count = preparedStatement.executeBatch();
//第五步:對結果進行處理
System.out.println(count);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//第六步:倒敘釋放資源resultSet-》preparedStatement-》connection
try {
if (preparedStatement != null &&
!preparedStatement.isClosed()) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (connection != null && connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
今天大概介紹了JDBC連接數據庫進行操作的一些具體的流程,后面我會對流程上的各個步驟進行分析,以便在后續學習mybatis源碼時有一個更深刻的理解。
---[來自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)---