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、連線資料庫
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驅動的方法,消除了資料快取的累積現象。