JDBC學習系列:使用JDBC對數據庫進行CRUD

1、statement對象介紹  

  Jdbc中的statement對象用於向數據庫發送SQL語句,想完成對數據庫的增刪改查,只須要經過這個對象向數據庫發送增刪改查語句便可。
  Statement對象的executeUpdate方法,用於向數據庫發送增、刪、改的sql語句,executeUpdate執行完後,將會返回一個整數(即增刪改語句致使了數據庫幾行數據發生了變化)。
  Statement.executeQuery方法用於向數據庫發送查詢語句,executeQuery方法返回表明查詢結果的ResultSet對象。html

1.一、CRUD操做-create

     使用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 }

1.二、CRUD操做-update

  使用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 }

1.三、CRUD操做-delete

  使用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 }

1.四、CRUD操做-read

  使用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 }

2、使用jdbc對數據庫增刪改查

2.一、搭建實驗環境

  搭建方式仍是和上一篇「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();
	            }
	        }
	    }
}

2.二、使用statement對象完成對數據庫的CRUD操做

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);
	        }
	    }
}

3、PreparedStatement對象介紹

  PreperedStatement是Statement的子類,它的實例對象能夠經過調用Connection.preparedStatement()方法得到,相對於Statement對象而言:PreperedStatement能夠避免SQL注入的問題。
  Statement會使數據庫頻繁編譯SQL,可能形成數據庫緩衝區溢出。PreparedStatement可對SQL進行預編譯,從而提升數據庫的執行效率。而且PreperedStatement對於sql中的參數,容許使用佔位符的形式進行替換,簡化sql語句的編寫。code

3.一、使用PreparedStatement對象完成對數據庫的CRUD操做

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

  使用JDBC對數據庫進行CRUD

相關文章
相關標籤/搜索