Jdbc中的statement對象用於向數據庫發送SQL語句,想完成對數據庫的增刪改查,只須要經過這個對象向數據庫發送增刪改查語句便可。
Statement對象的executeUpdate方法,用於向數據庫發送增、刪、改的sql語句,executeUpdate執行完後,將會返回一個整數(即增刪改語句致使了數據庫幾行數據發生了變化)。
Statement.executeQuery方法用於向數據庫發送查詢語句,executeQuery方法返回表明查詢結果的ResultSet對象。html
使用executeUpdate(String sql)方法完成數據添加操做,示例操做:java
1 Statement st = conn.createStatement(); 2 String sql = "insert into user(….) values(…..) "; 3 int num = st.executeUpdate(sql); 4 if(num>0){ 5 System.out.println("插入成功!!!"); 6 }
使用executeUpdate(String sql)方法完成數據修改操做,示例操做:mysql
1 Statement st = conn.createStatement(); 2 String sql = 「update user set name=‘’ where name=‘’"; 3 int num = st.executeUpdate(sql); 4 if(num>0){ 5 System.out.println(「修改爲功!!!"); 6 }
使用executeUpdate(String sql)方法完成數據刪除操做,示例操做:sql
1 Statement st = conn.createStatement(); 2 String sql = 「delete from user where id=1; 3 int num = st.executeUpdate(sql); 4 if(num>0){ 5 System.out.println(「刪除成功!!!"); 6 }
使用executeQuery(String sql)方法完成數據查詢操做,示例操做:數據庫
1 Statement st = conn.createStatement(); 2 String sql = 「select * from user where id=1; 3 ResultSet rs = st.executeUpdate(sql); 4 while(rs.next()){ 5 //根據獲取列的數據類型,分別調用rs的相應方法映射到java對象中 6 }
搭建方式仍是和上一篇「JDBC入門」同樣,建立好數據庫表後,新建JAVAWEB工程並導入mysql驅動,不一樣的是此次將數據庫鏈接信息保存在properties文件中,在src目錄下新建一個db.properties文件,內容以下:工具
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/sc username=root password=123456
注意:properties文件中不能有空格,不然編譯時會報錯、url
編寫一個JdbcUtils工具類,用於鏈接數據庫,獲取數據庫鏈接和釋放數據庫鏈接,代碼以下:spa
package com.study.jdbc; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * JDBC工具類,用於鏈接數據庫,獲取數據庫鏈接和釋放數據庫鏈接 * @author Sam Flynn * */ public class JdbcUtils { private static String driver = null; private static String url = null; private static String username = null; private static String password = null; static{ try{ //讀取db.properties文件中的數據庫鏈接信息 InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); prop.load(in); //獲取數據庫鏈接驅動 driver = prop.getProperty("driver"); //獲取數據庫鏈接URL地址 url = prop.getProperty("url"); //獲取數據庫鏈接用戶名 username = prop.getProperty("username"); //獲取數據庫鏈接密碼 password = prop.getProperty("password"); //加載數據庫驅動 Class.forName(driver); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } /** * @Method: getConnection * @Description: 獲取數據庫鏈接對象 * * @return Connection數據庫鏈接對象 * @throws SQLException */ public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, username,password); } /** * @Method: release * @Description: 釋放資源, * 要釋放的資源包括Connection數據庫鏈接對象,負責執行SQL命令的Statement對象,存儲查詢結果的ResultSet對象 * * @param conn * @param st * @param rs */ public static void release(Connection conn,Statement st,ResultSet rs){ if(rs!=null){ try{ //關閉存儲查詢結果的ResultSet對象 rs.close(); }catch (Exception e) { e.printStackTrace(); } rs = null; } if(st!=null){ try{ //關閉負責執行SQL命令的Statement對象 st.close(); }catch (Exception e) { e.printStackTrace(); } } if(conn!=null){ try{ //關閉Connection數據庫鏈接對象 conn.close(); }catch (Exception e) { e.printStackTrace(); } } } }
package com.study.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; /** * JDBC使用Statement對象對數據庫進行CRUD操做 * @author Sam Flynn * */ public class JdbcCRUD { public static void insert(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ //獲取一個數據庫鏈接 conn = JdbcUtils.getConnection(); //經過conn對象獲取負責執行SQL命令的Statement對象 st = conn.createStatement(); //要執行的SQL命令 String sql = "insert into course(cname,ctime) values('法律學',6)"; //執行插入操做,executeUpdate方法返回成功的條數 int num = st.executeUpdate(sql); if(num>0){ System.out.println("插入成功!!"); } }catch (Exception e) { e.printStackTrace(); }finally{ //SQL執行完成以後釋放相關資源 JdbcUtils.release(conn, st, rs); } } public static void delete(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "delete from course where cno=6"; st = conn.createStatement(); int num = st.executeUpdate(sql); if(num>0){ System.out.println("刪除成功!!"); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } public static void update(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "update course set ctime=7 where cno=1"; st = conn.createStatement(); int num = st.executeUpdate(sql); if(num>0){ System.out.println("更新成功!!"); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } public static void find(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "select * from course where cno=3"; st = conn.createStatement(); rs = st.executeQuery(sql); if(rs.next()){ System.out.println(rs.getString("cname")); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } }
PreperedStatement是Statement的子類,它的實例對象能夠經過調用Connection.preparedStatement()方法得到,相對於Statement對象而言:PreperedStatement能夠避免SQL注入的問題。
Statement會使數據庫頻繁編譯SQL,可能形成數據庫緩衝區溢出。PreparedStatement可對SQL進行預編譯,從而提升數據庫的執行效率。而且PreperedStatement對於sql中的參數,容許使用佔位符的形式進行替換,簡化sql語句的編寫。code
package com.study.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * 使用PreparedStatement對象對數據庫進行CRUD * @author Sam Flynn * */ public class PreparedStatementCRUD { public static void insert(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ //獲取一個數據庫鏈接 conn = JdbcUtils.getConnection(); //要執行的SQL命令,SQL中的參數使用?做爲佔位符 String sql = "insert into course(cname,ctime) values(?,?)"; //經過conn對象獲取負責執行SQL命令的prepareStatement對象 st = conn.prepareStatement(sql); //爲SQL語句中的參數賦值,注意,索引是從1開始的 st.setString(1, "法律學");//cname是varchar(字符串類型) st.setInt(2,6);//ctime是varchar(字符串類型) //執行插入操做,executeUpdate方法返回成功的條數 int num = st.executeUpdate(); if(num>0){ System.out.println("插入成功!!"); } }catch (Exception e) { e.printStackTrace(); }finally{ //SQL執行完成以後釋放相關資源 JdbcUtils.release(conn, st, rs); } } public static void delete(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "delete from course where cno=?"; st = conn.prepareStatement(sql); st.setInt(1, 7); int num = st.executeUpdate(); if(num>0){ System.out.println("刪除成功!!"); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } public static void update(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "update course set ctime=? where cno=?"; st = conn.prepareStatement(sql); st.setInt(1,3); st.setInt(2,1); int num = st.executeUpdate(); if(num>0){ System.out.println("更新成功!!"); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } public static void find(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "select * from course where cno=?"; st = conn.prepareStatement(sql); st.setInt(1, 2); rs = st.executeQuery(); if(rs.next()){ System.out.println(rs.getString("cname")); } }catch (Exception e) { }finally{ JdbcUtils.release(conn, st, rs); } } }
參考資料:xml