1. 程式人生 > >JDBC連線MySQL的增刪改查

JDBC連線MySQL的增刪改查

介紹:JDBC(Java DataBase Connectivity, Java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用 Java語言編寫的類和介面組成。

JDBC操作資料庫型別:  MySQL資料庫 

準備步驟:

① 你需要有MySQL資料庫,然後在MySQL裡面建立一個 home 資料庫,在資料庫裡面新建一個 person 表。

② 在 person表中,新建欄位  id(int 自增) ,name(character 型別),age(int 型別),chenghu(character 型別)

③ 在 Java / web 專案中匯入 JDBC驅動jar包。最新: mysql-connector-java-8.0.11.jar  在網站上可以自行下載。

④ 匯入方法:右擊專案-> build path -> Add External Archives...  之後找到  mysql-connector-java-8.0.11.jar 檔案 點選開啟即可。

jdbc連線資料庫步驟:

提示:JDBC 驅動jar包  在8.0版本以上的,和引入低版本的驅動jar包 在 建立驅動 建立URL、連線資料庫

操作要寫的java程式不一樣。

1. 建立URL

//載入驅動
String URL="jdbc:mysql://127.0.0.1:3306/home?useSSL=false&serverTimezone=GMT%2B8";  

   程式碼格式:     jdbc:資料庫型別://所連資料庫IP地址:預設埠號/資料庫名?引數&引數

2. 載入驅動

   Class.forName("com.mysql.cj.jdbc.Driver");

  驅動的格式,跟低版本的 jar包要寫的java格式不一樣。

3. 連線資料庫

Connection ct = DriverManager.getConnection(URL, USER, PASSWORD);

4. jdbc連線資料庫的java封裝

package jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import java.sql.Connection;
public class ConnDb {

	private Connection conn = null;
	private static Logger log=Logger.getLogger(ConnDb.class);	
    private Connection ct = null;
	
	public Connection getConn(){
		try {
		
	//建立URL
	String URL="jdbc:mysql://127.0.0.1:3306/home?useSSL=false&serverTimezone=GMT%2B8";  
  					 
		String USER="root";
		String PASSWORD="123456";
		//1.載入mysql驅動:		  		     
		Class.forName("com.mysql.cj.jdbc.Driver");		   	   
			
        //得到連線
	    ct = DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return ct;
	}

	public Boolean dbclose() {
		// TODO Auto-generated method stub
		Boolean closeResult = false;
		try {
			if(!conn.isClosed()){
				conn.close();
			}
			log.debug("資料庫連線關閉成功");
			closeResult=true;
		} catch (SQLException e) {
			// TODO: handle exception
			log.error("資料庫連線關閉失敗");
			log.error(e.getSQLState());//沒有合適的驅動
			log.error("錯誤資訊為:"+e.getMessage());
			closeResult=false;
		}
		return closeResult;
	}


}

4. JDBC增刪改查的jJava封裝

package dao;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import jdbc.ConnDb;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class personDao {

	private ConnDb dbs;
	private Connection conn;
	private PreparedStatement pst = null;

	public applicationtypeDao() {
		super();
		dbs = new ConnDb();
		conn = dbs.getConn();
	}

	public JSONArray select() { // select 選取資料

		JSONArray jsonArray = new JSONArray();
		String sql = "select * from person;     
		ResultSet resultSet = null;

		int col = 0;
		try {
			pst = conn.prepareStatement(sql);
			resultSet = pst.executeQuery();
			col = resultSet.getMetaData().getColumnCount();
			while (resultSet.next()) {

				JSONObject jsonObject = new JSONObject();
				for (int i = 0; i < col; i++) {
                    // 得到列名
					String columnLable = resultSet.getMetaData().getColumnLabel(i + 1); 
                   // 得到列值
					Object columnValue = resultSet.getObject(columnLable);  					
                    jsonObject.put(columnLable, columnValue);

				}

				jsonArray.add(jsonObject);

			}

			resultSet.close();
			closedb(null);
		} catch (SQLException e) {

			// log.error("----記錄更新失敗----");
			closedb(null);
		}

		return jsonArray;

	}

	
	public int update(int id, String name, int age,String shenfen) { 

		int rowsCount = 0; // 記錄被更新的記錄總數
        String sql = "update person set name='" + name + "',age='" + age+ 
       "',shenfen'"+shenfen+ "' where id ='" + id + "'";

		try {
			pst = conn.prepareStatement(sql);
			rowsCount = pst.executeUpdate();
			closedb(null);
		} catch (SQLException e) {
		
			closedb(e);

		}
		return rowsCount;

	}

	public boolean insert(int id, String name, int age, String shenfen) {

		boolean rowsCount = false; 

		String sql = "insert into person(id,name,image,shenfen) values ('"+ id + "','" 
        + name + "','" + age+"','" + shenfen +"')";
 
		
		try {
			pst = conn.prepareStatement(sql);
			rowsCount = pst.execute();
			closedb(null);
			System.out.println("插入成功");
		} catch (SQLException e) {
			System.out.println("---插入記錄失敗!---");
			closedb(e);

		}
		return rowsCount;

	}

	
	public int delete(int id) {
		int rowsCount = 0;
		String sql = "delete from  person where id='" + id + "'";
		PreparedStatement pst = null;
		try {
			pst = conn.prepareStatement(sql);
			rowsCount = pst.executeUpdate();
			System.out.println("刪除記錄成功:" + rowsCount);
			pst.close();
			conn.close();
		} catch (SQLException e) {

			System.out.println("刪除記錄失敗");

			try {
				if (!pst.isClosed()) {
					pst.close();
				}
				if (!conn.isClosed()) {
					conn.close();
				}
			} catch (SQLException e2) {

				e2.printStackTrace();
			}
		}
		return rowsCount;
	}

	private void closedb(SQLException e) {
		try {
			if (!pst.isClosed()) {
				pst.close();
			}
			if (!conn.isClosed()) {
				conn.close();
			}
		} catch (SQLException e2) {

		}
	}

}

5. 呼叫jdbc 增刪改查 的方法例項例項

package main;


public class test {

public static void main(String args[]){

  // 增
  new personDao.insert("李曉明",18,"兒子");
  new personDao.insert("李二小",38,"父親");
  new personDao.insert("王小紅",18,"母親");
  new personDao.insert("李大白",18,"祖父");
  // 刪
  new personDao.delete(1);
  // 改
  new personDao.update(1,"李小明改",20,"學生");
  // 查
  new personDao.select();

}

}

     上面的程式碼例項,主要實現了對 jdbc 增刪改查方法的類封裝,方便呼叫方法。且每次呼叫“增刪改查”功能後,內部自動執行關閉jdbc驅動的方法,消除了資料快取的累積現象。