Java操作數據庫實現"增刪改查"
本文主要講解JDBC操作數據庫 主要實現對MySql數據庫的"增刪改查"
綜合概述:
JDBC的常用類和接口
一 DriverManager類
DriverManage類用來管理數據庫中的所有驅動程序,是JDBC的管理層,作用於用戶和驅動程序之間,跟蹤可用的驅動程序,並在數據庫的驅動之間建立連接,DriverManager類中的方法都是靜態方法,下列是DriverManager的常用方法:
getConnection(String URL,String user,String PassWord) 指定3個參數,分別是連接地址,用戶名 和密碼 類連接數據庫 setLoginTimeout() 獲取驅動程序視圖登陸到某一數據庫可以等待的最長時間,以秒為單位, Println(String message) 將一條信息打印到當前JDBC日誌流中
二 Connection 接口
COnnection 接口代表與特定的數據庫的連接,要對數據庫中的數據進行操作,首先要獲取數據庫連接,Connection實就像在應用程序與數據庫之間開通了一條通道.可以通過DriverManager類的getConnection()方法獲取Connection的實例.Connection接口的常用方法如下:
createStatement() 創建Statement對象 PrepareStatement() 創建預處理對象PrepareStatement isReadOnly() 查看當前Connection對象的讀取模式是否是只讀形式 SetReadOnly() 設置當前Connection對象的讀寫模式,默認是非只讀模式 close() 立即釋放此Connection對象的數據庫和JDBC資源,而不是自動釋放
三 Statement 接口
Statement接口用於創建向數據庫中傳遞SQL語句的對象, 常用方法如下:
execute(String sql) 執行靜態的SELECT語句 可能返回多個數據集 executeQuery(String sql) 執行給定的Sql語句 返回單個ResultSet對象 clearBatch() 清空此Statement對象的當前SQL命令列表 executeUpdate() 執行指定的SQL語句 該語句可以為INSERT UPDATE DELETE語句 close() 釋放Statement實例占用的數據庫和JDBC資源
四 PreparedStatement 接口
PreparedStatement接口繼承Statement,用於執行動態的SQL語句 ,通過PreparedStatement實例執行的SQL語句,將被編譯並保存到PreparedStatement實例中,從而可以重復的執行該SQL語句 . preparedStatement接口的常用方法:
execute( ) 在此PreparedStatement對象執行SQL語句,該語句可以是任何類型的SQL語句
executeQuery( ) 在此preparedStatement對象中執行Sql查詢語句,返回為查詢數據集的對象
executeUpdate() 在此preparedStatement對象執行Sql語句,該SQL語句必須是一個INSERT UPDATE DELETE語句,或者是沒有返回值得DLL語句
setbyte(int Pindex byte by) 將參數Pindex位置上設置為給定的byte參數by
setString(int Pindex String str)將參數Pindex位置上設置為給定的String參數值str
setDouble(int pindex Double dou)將參數Pindex位置上設置為給定的Double參數值dou
setInt(int Pindex int i) 將參數Pindex位置上設置為給定的int參數值i
setObject(int PIndex Ocject obj)將參數Pindex位置上設置為給定的Object參數值Obj
五 ResultSet 接口
ResultSet接口類似於一個臨時的數據表,用來暫時存放數據庫查詢操作獲取到的數據集 它的常用方法如下:
getint() 以int形式獲取當前行指定的列 getFloat() 以Float形式獲取當前行指定的列 getDate() 以Date形式獲取當前行指定的列 getBoolean() 以Boolean形式獲取當前行指定的列 getString() 以String形式獲取當前行指定的列 getObject() 以Object形式獲取當前行指定的列 next( ) 將指針向下移一行 updateInt() 用int值更新指定列 updateFloat()用float值更新指定列 updateLong() 用指定的long值更新指定的列 updateString()用指定的"String"值更新指定列 updateObejct() 用object值更新指定的列 updatenull() 將指定的列值修改為null updateDate() 用指定的Date值更新指定的列 updateDouble() 用指定的DOuble值更新指定的列
通過JDBC操作數據庫
如果需要訪問數據庫,就必須加載數據庫驅動,這個驅動只是在程序第一次運行的時候加載一次,下面將我們的連接Mysql數據庫的連接器下載:鏈接:http://pan.baidu.com/s/1dE42McT 密碼:emqo
1):新建一個項目,創建lib文件夾
2)把剛才下載的驅動放到這個文件裏
3)點項目右鍵選擇Build Path 點Configure Build Path
選擇Libraries 然後Add JARs 把lib文件下的驅動放進去.
下面就可以編寫代碼了;
首先創建一個DBHerpel類:代碼如下:
package com.gr.DBHerpel; import java.sql.*; //導包 /** * ClassName: DBHerpel * @Description: TODO 數據庫輔助類 * @author 情緒i */ public class DBHerpel { private static Connection Conn; // 數據庫連接對象 // 數據庫連接地址 private static String URL = "jdbc:mysql://localhost:3306/myschool?characterEncoding=utf8&useSSL=true"; // 數據庫的用戶名 private static String UserName = "root"; // 數據庫的密碼 private static String Password = "1234"; /** * * @Description: TODO 獲取訪問數據庫的Connection對象 * @param @return * @return Connection 連接數據的對象 * @author 情緒i */ public static Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); // 加載驅動 System.out.println("加載驅動成功!!!"); } catch (ClassNotFoundException e) { // TODO: handle exception e.printStackTrace(); } try { //通過DriverManager類的getConenction方法指定三個參數,連接數據庫 Conn = DriverManager.getConnection(URL, UserName, Password); System.out.println("連接數據庫成功!!!"); //返回連接對象 return Conn; } catch (SQLException e) { // TODO: handle exception e.printStackTrace(); return null; } } }
這裏連接的是我MySchool的數據庫 數據庫的表結構如下:
數據表裏有user pwd 兩個字段;下面通過一個案例實現查詢:
"查"
代碼如下:
package com.gr.visitServer; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import com.gr.DBHerpel.DBHerpel; public class VisitMySql { // 連接對象 private Connection conn; // 傳遞sql語句 private Statement stt; // 結果集 private ResultSet set; // 查詢 public void Select() { try { // 獲取連接 conn = DBHerpel.getConnection(); if (conn == null) return; // 定義sql語句 String Sql = "select * from login"; // 執行sql語句 stt = conn.createStatement(); // 返回結果集 set = stt.executeQuery(Sql); // 獲取數據 while (set.next()) { System.out.println("用戶名:" + set.getString(1) + "\t密碼:" + set.getString(2)); } } catch (Exception e) { e.printStackTrace(); } finally { // 釋放資源 try { set.close(); conn.close(); } catch (Exception e2) { // TODO: handle exception } } } }
然後新建一個包Test編寫Test類代碼如下:
package com.gr.Test; import com.gr.visitServer.VisitMySql; public class Test { public static void main(String[] args){ //實例化對象 VisitMySql vs = new VisitMySql(); //調用查詢方法 vs.Select(); } }
上面的代碼是查詢數據庫Login表裏的用戶的賬號和密碼,用Connection接口的createStatement()方法獲得Statement對象傳遞Sql語句,用它的ExecuteQuery()方法獲取單個ResultSet對象.
下面向數據庫添加數據:
"增"
在VisitMySql類中添加Add方法:代碼如下:
// 使用Statement接口的executeUpdate()方法向數據庫添加數據 public void Add(){ try { //獲取連接 conn = DBHerpel.getConnection(); if(conn==null) return; //獲取用戶輸入的賬號和密碼 Scanner input = new Scanner(System.in); System.out.print("請輸入用戶名:"); int user = input.nextInt(); System.out.print("請輸入密碼:"); String pwd = input.next(); //定義sql語句 String sql = "insert into login values("+user+" , ‘"+pwd+"‘);"; //獲取Statement對象 stt = conn.createStatement(); //執行sql語句 stt.executeUpdate(sql); } catch (Exception e) { e.printStackTrace(); }finally{ //釋放資源 try { conn.close(); } catch (Exception e2) {} } }
同樣也是獲取Connection接口的createStatement()方法獲取Statement的對象,用Statement對象的executeUpdate()方法來執行INSERT語句,最後在Test類調用Add()方法
下面使用PreparedStatement接口中的executeUpdate()方法來執行INSERT語句,
// 使用PreparedStatement接口的executeUpdate()方法向數據庫添加一條數據 public void Add2() { try { // 獲取連接 conn = DBHerpel.getConnection(); if (conn == null) return; // 獲取用戶輸入 System.out.print("請輸入用戶名:"); Scanner input = new Scanner(System.in); int user = input.nextInt(); System.out.print("請輸入密碼:"); String pwd = input.next(); // 定義sql語句 String AddSQL = "INSERT INTO login VALUES (?,?);"; // 創建一個Statement對象 PreparedStatement ps = conn.prepareStatement(AddSQL); //向sql語句的第一個問號添加數據 ps.setInt(1, user); //向sql語句的第二個問號添加數據 ps.setString(2,pwd); // 執行sql語句 ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch (Exception e2) { // TODO: handle exception } } }
最後在Test類測試Add2()方法,,這裏Sql語句中用兩個問號代表要添加的用戶名和密碼,根據上面PreparedStatement接口的常用方法,setint() setString() 方法來指定添加的數據.
"刪"
刪除數據也是很常用的技術,同樣可以使用Statement接口中的executeUpdate()方法來實現 代碼如下:
//使用Statement接口的executeUpdate()方法實現從數據庫刪除數據 public void Delete(){ try { //獲取連接 conn = DBHerpel.getConnection(); if(conn==null) return; //提示用戶輸入要刪除的用戶 System.out.print("請輸入刪除的用戶:"); Scanner input = new Scanner(System.in); int user = input.nextInt(); //定義sql語句 String deleteSql = "DELETE FROM login WHERE user="+user+";"; //獲取Statement對象 stt = conn.createStatement(); //執行sql語句 stt.executeUpdate(deleteSql); } catch (Exception e) { e.printStackTrace(); }finally{ //釋放資源 try { conn.close(); } catch (Exception e2) {} } }
"改"
對數據的修改也是日常代碼中常見的技術. 可以使用Statement接口中executeUpdate()方法來實現,也可以用PreparedStatement接口的executeUpdate()方法來實現 具體代碼如下:
//使用PreparedStatement接口中的executeUpdate()方法實現修改數據 public void Update(){ try { //獲取連接 conn = DBHerpel.getConnection(); if(conn==null) return; //用戶輸入要修改的賬戶 System.out.print("請輸入用戶名:"); Scanner input = new Scanner(System.in); int user = input.nextInt();
//提示用戶輸入新的密碼 System.out.print("請輸入新的密碼:"); String NewPwd = input.next(); //定義Sql語句 String UpdateSql = "UPDATE login SET pwd = ‘"+NewPwd+"‘ WHERE user = "+user+";"; //創建Statement對象 PreparedStatement ps = conn.prepareStatement(UpdateSql); //執行sql語句 ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ //釋放資源 try { conn.close(); } catch (Exception e2) {} } }
以上是對Mysql數據庫的"增刪改查"功能的具體實現,
Java操作數據庫實現"增刪改查"