【JDBC】Java操作數據庫

JDBC連接數據庫

一、JDBC

​ 概念:JDBC(Java DataBase Connectivity) 是一種Java數據庫連接計數,能實現Java程序對各種數據庫的訪問。有一組使用Java語言編寫的類和接口組成,稱爲JDBC API
在這裏插入圖片描述

作用:
​ 1)建立與數據庫之間的訪問連接
​ 2)將編寫好的SQL語句發送到數據庫執行
​ 3)對數據庫返回的結果進行處理

二、使用JDBC訪問數據庫

1、幾個重要的JDBC API

​ 1)DriverManager類:負責依據數據庫的不同,管理JDBC驅動
​ 2)Connection(連接)接口:負責連接數據庫並擔任傳送數據的任務
​ 3)Statement接口:有Connection產生,負責執行SQL語句
​ 4)ResultSet 接口:負責保存Statement 執行後所產生的執行結果

​ 2、訪問數據庫的步驟:
1.加載驅動Class.forName();
2.創建連接 Connection conn = DriverManager.getConnection(url,user,pwd);
3.創建Statement執行SQL語句 Statement stmt = conn.createStatement();
4.返回ResultSet查詢結果 ResultSet rs = stmt.execute(sql);
5.釋放資源 .close();
//加載數據庫驅動
Class.forName("com.mysql.jdbc.Driver");
//使用DriverManager類獲取數據庫連接
//配置url地址,jdbc:mysql://主機:端口/數據庫
String url = "jdbc:mysql://localhost:3306/kgcnews";
Connection connection = DriverManager.getConnection(url,"root","root");
//執行SQL語句
Statement stmt = connection.createStatement();
String sql = "select * from news_detail";
ResultSet rs = stmt.executeQuery(sql); //結果集保存到ResultSet
while(rs.next){  	//獲取查詢的各個字段
   String id = rs.getInt(1);	//數字表示按順序第幾個字段
   String title = rs.getString("title");//具體某列的值
   System.out.println("id:"+id+",\t title:"+title)
}
//使用結束關閉資源,注意要判空
	rs.close();
	stmt.close();
	connection.close();

​ 讀取配置文件的方式
  改配置文件要比改Java代碼方便
​ 創建jdbc.peoperties配置文件,將數據庫的信息寫入配置文件

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/kgcnews
jdbc.user = root
jdbc.password = root

加載配置文件

public static void loadProperties() {
    	//讀取文件內容
        InputStream is = JDBCUtil.class.getResourceAsStream("jdbc.properties");
       	//創建peoperties對象
    	Properties prop = new Properties();
        try {
            prop.load(is); //從字節輸入流中讀取鍵值對
            //根據鍵獲取對應的值
            String driver = prop.getProperty("jdbc.driver");
            String url = prop.getProperty("jdbc.url");
            String user = prop.getProperty("jdbc.user");
            String password = prop.getProperty("jdbc.password");
            //後面爲具體的用JDBC連接數據庫步驟
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
3、操作數據庫

​對數據庫進行增刪改查操作
Statement 與prepareStatement
  Staement 由方法 createStatement() 創建,該對象用於發送簡單的SQL語句
  prepareStatement 由方法 prepareStatement() 創建,該對象用於發送帶有一個或者多個輸入參數的SQL語句
​  SQL語句使用 '?'作爲佔位符
  用setXxx()方法設置數據
例:

	Connection conn=null;
    Statement stmt = null;
    ResultSet rs = null;

 Statement進行插入操作

			public void insert() {
        try {
            stmt =conn.createStatement();
            String sql = "insert  into news_detail values (3,1,'測試','測試結果數據放在這裏',null,null,'admin',now(),null );";
           //執行插入語句
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 Statement進行刪除操作

public void delete(int id ){
        try {
            stmt =conn.createStatement();
            //刪除的sql語句
            String sql = "delete from news_detail where id="+id;
            //執行刪除語句
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 Statement進行更新操作

 public void update() {
        try {
            stmt = conn.createStatement();
            String sql = "update news_detail set title ='測試新參數' where id=3";
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 Statement進行查詢操作

public void queryAll(String str){
        //要執行的動作
        try {
        	//創建statement對象
            stmt = conn.createStatement();
            String sql = "select * from news_detail"+str;
            //執行查詢語句,結果集保存到ResultSet中
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                int id = rs.getInt(1);
                String title = rs.getString("title");
                System.out.println("id:"+id+",title:"+title);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 prepareStatement進行操作
   和Statement可以多有 ’ ?'和setXxx()賦值的區別,後續操作與Statement操作類似,後面只貼了一個insert的操作

PrepareStatement psmt =null;
public void insertUser(int id,String name,String pwd,String email,int userType) {
        try {
            String sql = "insert into news_user values(?,?,?,?,?)";
            
            PrepareStatement pstm = conn.prepareStatement(sql);
            
            //用set方式給插入的值賦值,1-4對應上面的sql語句
            pstm.setInt(1, id);
            pstm.setString(2, name);
            pstm.setString(3, pwd);
            pstm.setString(4, email);
            pstm.setInt(5, userType);
            //執行SQL語句
            pstm.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
4、execute、executeQuery、executeUpdate區別
  • execute:
      執行SQL語句,返回的是boolean值,表示查詢的結果集(ResultSet接受)是否返回了
    在這裏插入圖片描述

  • executeQuery:
      只能執行查詢的SQL語句,返回的是一個ResultSet結果集
    在這裏插入圖片描述

  • executeUpdate:
      執行的是insert,update,delete的SQL語句,返回的是一個int型整數值,表示受到影響的行數;
    在這裏插入圖片描述
    5、statment 和preparestatment區別
    錯誤以及不足之處請指正,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章