Java中通过JDBC操作MySQL数据库
JDBC相關的操作?
0、JDBC常用類和接口介紹?
DriverManager類?
DriverManager類用來管理數據庫中的所有驅動程序;是JDBC的管理層,作用于用戶和驅動程序之間,跟蹤可用的驅動程序,并在數據庫的驅動程序之間建立連接。此外,DriverManager類也處理諸如驅動程序登錄時間限制及登錄和跟蹤信息的顯示等事務。DriverManager類中的方法都是靜態方法,所以在程序中無須對它進行實例化,直接通過類名就可以調用。?
DriverManager類的常用方法如下:?
setLoginTimeout()設置驅動程序試圖登錄到某一數據庫時可以等待的最長時間,以秒為單位; println(String message)將一條消息打印到當前JDBC日志流中。?
Connection接口?
Connection接口代表與特定的數據庫的連接。要對數據表中的數據進行操作,首先要獲取數據庫連接。Connection實例就像在應用程序與數據庫之間開通了一條渠道。可以通過DriverManager類的getConnection()方法獲取Connection實例。?
Connection接口的常用方法如下:?
createStatement()創建Statement對象?
createStatement(int resultSetType,int resultSetConcurrency) 創建一個Statement對象,該對象將生成具有給定類型、并發性和可保存性的ResultSet對象?
prepareStatement()創建預處理對象PreparedStatement?
isReadOnly()查看當前Connection對象的讀取模式是否是只讀形式?
commit()使所有上一次提交、回滾后進行的更改成為持久更改,并釋放此Connection對象當前持有的所有數據庫鎖?
roolback()取消在當前事務中進行的所有更改,并釋放此Connection對象當前持有的所有數據庫鎖;?
close()立即釋放此Connection對象的數據庫和JDBC資源,而不是等待他們被自動釋放。?
Statement接口?
Statement接口用于創建向數據庫中傳遞SQL語句的對象,該接口提供了一些方法可以實現對數據庫的常用操作。?
Statement接口的常用方法如下:?
execute(String sql) 執行靜態的SELECT語句,該語句可能返回多個結果集?
learBatch() 清空此Statement對象的當前SQL命令列表?
executeBatch() 將一批命令提交給數據庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。數組元素的排序與SQL語句的添加順序對應?
executeUpdate() 執行給定SQL語句,該語句可以為INSERT、UPDATE或DELETE語句?
addBatch(String sql) 將給定的SQL命令添加到此Statement對象的當前命令列表中。如果驅動程序不支持批量處理將拋出異常?
close() 釋放Statement實例占用的數據庫和JDBC資源?
PreparedStatement接口?
PreparedStatement接口繼承Statement,用于執行動態的SQL語句,通過PreparedStatement實例執行的SQL語句,將被預編譯并保存到PreparedStatement實例中,從而可以反復地執行該SQL語句。?
PreparedStatement接口的常用方法如下:?
execute() 在此PreparedStatement對象中執行SQL語句,該語句可以是任何類型的SQL語句 executeQuery() 在此PreparedStatement對象中執行SQL查詢語句,返回結果為查詢結果集ResultSet對象?
executeUpdate() 在此PreparedStatement對象中執行SQL語句,該SQL語句必須是一個INSERT、UPDATE、DELETE語句,或者是沒有返回值的DDL語句?
setByte(int pIndex, byte bt) 將參數pIndex位置上設置為給定的byte型參數bt?
setDouble(int pIndex, double dou) 將參數pIndex位置上設置為給定的double型參數dou?
setInt(int pIndex, int x) 將參數pIndex位置上設置為給定的int型參數x?
setObject(int pIndex, Object o)將參數pIndex位置上設置為給定的Object型參數值?
setString(int pIndex, String str) 將參數pIndex位置上設置為給定的String型參數值?
ResultSet接口?
ResultSet接口類似于一個臨時表,用來暫時存放數據庫查詢操作所獲得的結果集。?
ResultSet接口的常用方法如下:?
getInt()?
getFloat()?
getDate()?
getBoolean()?
getString()?
getObject() 以指定類型獲取ResultSet對象的當前行的指定列值。?
next() 將指針向下移一行?
updateInt() 用int值更新指定列?
updateFloat()?
updateLong()?
updateString()?
updateObject()?
updateNull()?
updateDouble() 用指定類型值更新指定列?
1、加載MySQL驅動?
如果需要訪問數據庫,首先要加載數據庫驅動,數據庫驅動只需在第一次訪問數據庫時加載一次。然后在每次訪問數據庫時創建一個Connection實例,獲取數據庫連接,這樣就可以執行操作數據庫的SQL語句。最后在完成數據庫操作時,釋放與數據庫的連接。Java加載數據庫驅動的方法是調用Class類的靜態方法forName()。語法格式如下:Class.forName(String DriverManager)
2、建立連接?
加載完數據庫驅動即可建立數據庫的連接,要連接數據庫可以使用DriverManager類的靜態方法getConnection()來實現,并分別將數據庫的URL、數據庫用戶名和密碼作為該方法的參數,即可建立到指定數據庫的連接。
3、數據操作(增、刪、改、查)?
在Java程序中,一旦建立類數據庫連接,就可以使用Connection接口的createStatement()方法來獲得Statement對象,也可調用prepareStatement()方法獲得PreparedStatement對象,通過executeUpdate()方法來執行SQL語句,就可以向數據庫添加數據了。
Statement接口的executeUpdate()或executeQuery()方法可以執行SQL語句,executeUpdate()方法用于執行數據的插入、修改或刪除操作,返回影響數據庫記錄的條數。executeQuery()方法用于執行SELECT查詢語句,將返回一個ResultSet型的結果集。通過遍歷查詢結果集的內容,才可獲取SQL語句執行的查詢結果。ResultSet對象具有指向當前數據行的光標。最初,光標被置于第一行之前,可以通過該對象的next()方法將光標移動到下一行;如果ResultSet對象沒有下一行,next()方法返回false,所以可以在while循環中使用next()方法迭代結果集。
<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span> com.photon; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.sql.Connection; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.sql.DriverManager; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.sql.ResultSet; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.sql.SQLException; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.sql.Statement; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">MySQLConnectTest</span> {</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//定義MySQL的數據庫驅動程序 </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> String DBDRIVER = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.mysql.jdbc.Driver"</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//定義MySQL數據庫的連接地址 </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> String DBURL = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"jdbc:mysql://localhost:3303/javadata"</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//MySQL數據庫的連接用戶名和連接密碼 </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> String DBUSER = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"root"</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> String DBPASS = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mysqladmin"</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">main</span>(String[] args) { Connection conn = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// TODO Auto-generated method stub </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span>{ Class.forName(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.mysql.jdbc.Driver"</span>); }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span>(ClassNotFoundException e){ e.printStackTrace(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> id, age; String name, pass; String sql = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select * from mytab"</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS); System.out.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"id\t用戶名\t密碼\t年齡"</span>); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span>(rs.next()){ id = rs.getInt(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"id"</span>); name = rs.getString(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"m_name"</span>); pass = rs.getString(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"m_password"</span>); age = rs.getInt(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"age"</span>); System.out.println(id+<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\t"</span>+name+<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\t"</span>+pass+<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\t"</span>+age); } conn.close(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (SQLException e1) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// TODO Auto-generated catch block </span>e1.printStackTrace(); } } }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li></ul> 修改數據是數據庫操作中必不可少的一部分,使用Statement接口中的executeUpdate()方法可以修改數據庫表中的數據,也可以使用PreparedStatement接口中的executeUpdate()方法對數據庫中的表進行修改操作。 修改數據是根據一定的條件進行修改,這個條件可以是固定的,也可以是一個范圍。下面做一個根據范圍修改的例子,同樣使用executeUpdate()方法,它的返回值是一個int類型的數據,表示受影響的行數,獲得這個值就可以知道這次一共修改了幾條數據。?
4、注意?
由于在一個程序中經常需要對數據庫進行操作,如果每次操作數據庫都要建立數據庫的連接,這樣不但會出現代碼重復,而且也極大地影響了編程效率,為此可以為數據庫連接單獨創建一個類,在該類中定義一個進行數據庫連接的靜態方法,當需要使用數據庫連接時,可以通過類名調用該方法獲得數據庫的連接。
from:?http://blog.csdn.net/zhaoyuping/article/details/49637713
總結
以上是生活随笔為你收集整理的Java中通过JDBC操作MySQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过JDBC进行简单的增删改查(以MyS
- 下一篇: Eclipse连接MySQL数据库(傻瓜