JDBC详解系列之流程
生活随笔
收集整理的這篇文章主要介紹了
JDBC详解系列之流程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
JDBC概述定義:JDBC(Java DataBase Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,
可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),
據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。JDBC是SUN公司提出來的一系列規(guī)范,但它只定義了接口規(guī)范,具體的實現(xiàn)則交給各個數(shù)據(jù)庫的廠商去做。
這類似以前的軟件要調(diào)用打印機(jī)的時候都要自己去給各種類型的打印機(jī)實現(xiàn)驅(qū)動,但微軟在操作系統(tǒng)定義了
打印機(jī)驅(qū)動接口,由各個打印機(jī)廠商去實現(xiàn),而軟件供應(yīng)商只需要調(diào)用接口即可(不然每個數(shù)據(jù)庫都要自己
去實現(xiàn)驅(qū)動,會累死的)。我想這也符合JAVA跨平臺的思想,實現(xiàn)“Write once, run anywhere!”。JDBC使用詳解/*** 如果你要使用我的代碼,在此之前請在mysql創(chuàng)建jdbc_test數(shù)據(jù)庫,并建立student表,兩個字段,name和age*/
public class JDBCTest {/*** 數(shù)據(jù)庫相關(guān)參數(shù)*///這是驅(qū)動名稱,此例子中我們加載的是mysql的驅(qū)動,在之前需要導(dǎo)入mysql的驅(qū)動jar包public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";//連接數(shù)據(jù)庫的url,各個數(shù)據(jù)庫廠商不一樣,此處為mysql的;后面是創(chuàng)建的數(shù)據(jù)庫名稱public static final String JDBC_URL = "jdbc:mysql://localhost:3306/jdbc_test";//連接數(shù)據(jù)庫所需賬戶名public static final String JDBC_USERNAME = "root";//用戶名對應(yīng)的密碼,我的mysql密碼是123456public 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類,注冊數(shù)據(jù)庫驅(qū)動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 =?");//傳入?yún)?shù),之所以這樣是為了防止sql注入preparedStatement.setInt(1, 18);//第四步:執(zhí)行語句,將結(jié)果返回resultSetresultSet = preparedStatement.executeQuery();//第五步:對結(jié)果進(jìn)行處理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-》connectiontry {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查詢的基本連接過程,后續(xù)一些復(fù)雜的數(shù)據(jù)庫操作過程只不過是在上面進(jìn)行一些增改而已。
大體步驟如注釋:JDBC流程:
第一步:加載Driver類,注冊數(shù)據(jù)庫驅(qū)動;
第二步:通過DriverManager,使用url,用戶名和密碼建立連接(Connection);
第三步:通過Connection,使用sql語句打開Statement對象;
第四步:執(zhí)行語句,將結(jié)果返回resultSet;
第五步:對結(jié)果resultSet進(jìn)行處理;
第六步:倒敘釋放資源resultSet-》preparedStatement-》connection。如果是刪除,修改和插入,使用executeUpdate()即可:/*** 如果你要使用我的代碼,在此之前請在mysql創(chuàng)建jdbc_test數(shù)據(jù)庫,并建立student表,兩個字段,name和age*/
public class JDBCTest {/*** 數(shù)據(jù)庫相關(guān)參數(shù)*///這是驅(qū)動名稱,此例子中我們加載的是mysql的驅(qū)動,在之前需要導(dǎo)入mysql的驅(qū)動jar包public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";//連接數(shù)據(jù)庫的url,各個數(shù)據(jù)庫廠商不一樣,此處為mysql的;后面是創(chuàng)建的數(shù)據(jù)庫名稱public static final String JDBC_URL = "jdbc:mysql://localhost:3306/jdbc_test";//連接數(shù)據(jù)庫所需賬戶名public static final String JDBC_USERNAME = "root";//用戶名對應(yīng)的密碼,我的mysql密碼是123456public static final String JDBC_PASSWORD = "123456";@Testpublic void testUpdate() {Connection connection = null;PreparedStatement preparedStatement = null;try {//第一步:加載Driver類,注冊數(shù)據(jù)庫驅(qū)動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=?");//傳入?yún)?shù),之所以這樣是為了防止sql注入preparedStatement.setString(1, "xiaoming");//第四步:執(zhí)行語句,將結(jié)果返回resultSetint count = preparedStatement.executeUpdate();//第五步:對結(jié)果進(jìn)行處理System.out.println(count);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {//第六步:倒敘釋放資源resultSet-》preparedStatement-》connectiontry {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類,注冊數(shù)據(jù)庫驅(qū)動Class.forName(JDBC_DRIVER);//第二步:通過DriverManager,使用url,用戶名和密碼建立連接(Connection)connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);//第三步:通過Connection,使用sql語句打開Statement對象;preparedStatement = connection.prepareStatement(insertSql);//傳入?yún)?shù),之所以這樣是為了防止sql注入for(int i=0;i<10;i++){preparedStatement.setString(1,100+i+"user");preparedStatement.setInt(2,100+i);preparedStatement.addBatch();}//第四步:執(zhí)行語句,將結(jié)果返回resultSetint[] count = preparedStatement.executeBatch();//第五步:對結(jié)果進(jìn)行處理System.out.println(count);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {//第六步:倒敘釋放資源resultSet-》preparedStatement-》connectiontry {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();}}}
?
總結(jié)
以上是生活随笔為你收集整理的JDBC详解系列之流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springMVC请求流程详解
- 下一篇: 为什么要用dubbo,dubbo和zoo