中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jdbc實現連接和增刪改查功能

發布時間:2020-09-22 20:00:18 來源:腳本之家 閱讀:181 作者:lxh5431 欄目:編程語言

JDBC的定義

JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。

jdbc的基本連接

簡單的說就是加載驅動,建立連接,然后進行查詢和刪除等語句的操作,在java中提供了java.sql的jar包,不過我現在用的是mysql的連接和實例,在這里基本在本地的服務器都是用到下面這個語句。

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

  String url="jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8";
  String user="root";
  String password="root";

加載和建立連接,這就是基本的一個語法結構,在連接數據庫當然還有其他的屬性可以設置,比如說最大的連接數了,和如何建立連接池,都可以在配置中用到,這里我就簡單的介紹如何連接,后面跟的是這個連接的字符集,防止出現亂碼。

簡單的增刪改查

簡單的增刪改查是每個開發者都會遇到的,畢竟我們整個系統真正的業務所在也是這幾個簡單的邏輯,但是在關系的連接和耦合性下就會變成復雜百倍的系統,所以要懂得基本的就可以窺見更大系統的構建了,所以我現在要分析的只是基本的功能實現。

首先連接好數據庫之后,那就是創建查詢語句,這里用到的是statment這個關鍵詞,下面是代碼的基本實現。

package dbtest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class DbTest {

 public static void main(String[] args) {
  Employee employee1 =new Employee();
  employee1.setEmpno(555);
  employee1.setEname("hakly");
  employee1.setSal(5400);
  employee1.setHiredate(new Date());

  addEmployee(employee1);
  List<Employee>employees=getEmployees();
  for(Employee employee:employees){
   System.out.println(employee);

  }

  Employee employee =new Employee();
  employee.setEmpno(999);
  employee.setEname("jack");
  employee.setSal(5000);
  employee.setHiredate(new Date());

  addEmployee(employee);

 }

  public static List<Employee> getEmployees() {
  ResultSet rs=null;
  Connection conn=null;
  Statement stat=null;
  List<Employee> employees=new ArrayList<Employee>();
  try{
   Class.forName("com.mysql.jdbc.Driver");


  String url="jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8";
  String user="root";
  String password="root";
  conn= DriverManager.getConnection(url,user,password);
  stat=conn.createStatement();
  String sql="select * from emp";
   rs=stat.executeQuery(sql);
   Employee employee=null;
  while(rs.next()){
   employee=new Employee();
   employee.setEmpno(rs.getInt("empno"));
   employee.setEname(rs.getString("ename"));
   employee.setSal(rs.getDouble("sal"));
  employee.setHiredate(rs.getDate("hiredate"));
  employees.add(employee);
  }


  }catch(Exception e ){
   e.printStackTrace();
  }finally{
   try {
    if(conn!=null){
    conn.close();
   } 
    }catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return employees;
 }
  public static void addEmployee(Employee employee) {
   Connection conn = null;
   Statement stat = null;
   // 1.注冊驅動程序
   try {
    Class.forName("com.mysql.jdbc.Driver");

    // 2.建立連接
    String url = "jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8";
    String user = "root";
    String password = "root";
    conn = DriverManager.getConnection(url, user, password);

    // 3.創建執行語句,發送sql命令
    stat = conn.createStatement();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String sql = "insert into emp(empno,ename,sal,hiredate) values(" + employee.getEmpno() + ",'"
      + employee.getEname() + "'," + employee.getSal() + ",'" + sdf.format(employee.getHiredate()) + "')";

    // 4.處理執行結果
    int i = stat.executeUpdate(sql);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } finally {
    // 5.關閉資源
    try {
     if (conn != null) {
      conn.close();
     }
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
  public static void updateEmployee(Employee employee) {
   Connection conn = null;
   Statement stat = null;
   // 1.注冊驅動程序
   try {
    Class.forName("com.mysql.jdbc.Driver");

    // 2.建立連接
    String url = "jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8";
    String user = "root";
    String password = "root";
    conn = DriverManager.getConnection(url, user, password);

    // 3.創建執行語句,發送sql命令
    stat = conn.createStatement();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String sql = "update emp set ename='"+employee.getEname()+"empno"+employee.getEmpno()+"sal"+employee.getSal();
    // 4.處理執行結果
    int i = stat.executeUpdate(sql);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } finally {
    // 5.關閉資源
    try {
     if (conn != null) {
      conn.close();
     }
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }

}

這里的代碼很繁瑣,但是沒辦法,為了更清新一點的去了解,這個過程是必須的,然后接下來就是進行簡單的優化,雖然代碼還是差不多,但是感覺上會更加簡潔了 ,這里就要建立一個工具類了代碼如下

package dbtest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcUtil {
 static String url = "jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf-8";
 static String user = "root";
 static String password = "root";

 static{
  try {
   Class.forName("com.mysql.jdbc.Driver");
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public static Connection getConnection() throws SQLException{
  String url = "jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8";
  String user = "root";
  String password = "root";
  return DriverManager.getConnection(url, user, password);

 }
 public static void free(Connection conn){

  try {
   if (conn != null) {
    conn.close();
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 }

在這里,把數據庫連接和異常處理,等工作都及合成一個工具類,然后再主函數調用就可以了,這就是面向對象的一個體現,當然還是會分析下關于主類的代碼,要不然就太過于空洞了,下面要分析的主類代碼如下

package com.niit.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class EmployeeDao1 {

 public static void main(String[] args) throws ParseException {

  List<Employee> employees=getEmployees();
  for(Employee employee:employees){
   System.out.println(employee);
  }

  /*Employee employee = new Employee();
  employee.setEmpno(9999);
  employee.setEname("tom");
  employee.setSal(6000);

  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
  employee.setHiredate(sdf.parse("2015-07-23"));

  //addEmployee(employee);
  //updateEmployee(employee);
  deleteEmployee(9999);*/



 }

 public static List<Employee> getEmployees() {
  Connection conn = null;
  Statement stat = null;
  ResultSet rs = null;
  List<Employee> employees = new ArrayList<Employee>();
  // 1.注冊驅動程序
  try {
   //2.獲取連接
   conn=JdbcUtil.getConnection();

   // 3.創建執行語句,發送sql命令
   stat = conn.createStatement();
   String sql = "select * from emp";

   // 4.處理執行結果
   rs = stat.executeQuery(sql);
   Employee employee = null;
   while (rs.next()) {
    employee = new Employee();
    employee.setEmpno(rs.getInt("empno"));
    employee.setEname(rs.getString("ename"));
    employee.setSal(rs.getDouble("sal"));
    employee.setHiredate(rs.getDate("hiredate"));

    employees.add(employee);
   }

  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   // 5.關閉資源
   JdbcUtil.free(conn);
  }
  return employees;
 }

 public static void addEmployee(Employee employee) {
  Connection conn = null;
  Statement stat = null;
  // 1.注冊驅動程序
  try {
   //2.獲取連接
   conn=JdbcUtil.getConnection();

   // 3.創建執行語句,發送sql命令
   stat = conn.createStatement();
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   String sql = "insert into emp(empno,ename,sal,hiredate) values(" + employee.getEmpno() + ",'"
     + employee.getEname() + "'," + employee.getSal() + ",'" + sdf.format(employee.getHiredate()) + "')";

   // 4.處理執行結果
   int i = stat.executeUpdate(sql);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   // 5.關閉資源
   JdbcUtil.free(conn);
  }
 }

 public static void updateEmployee(Employee employee) {
  Connection conn = null;
  Statement stat = null;
  // 1.注冊驅動程序
  try {
   //2.獲取連接
   conn=JdbcUtil.getConnection();

   // 3.創建執行語句,發送sql命令
   stat = conn.createStatement();

   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   String sql = "update emp set ename='" + employee.getEname() + "',sal=" + employee.getSal() + ",hiredate='"
     + sdf.format(employee.getHiredate()) + "' where empno=" + employee.getEmpno();

   // 4.處理執行結果
   int i = stat.executeUpdate(sql);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   // 5.關閉資源
   JdbcUtil.free(conn);
  }
 }

 public static void deleteEmployee(int empno) {
  Connection conn = null;
  Statement stat = null;
  // 1.注冊驅動程序
  try {
   //2.獲取連接
   conn=JdbcUtil.getConnection();

   // 3.創建執行語句,發送sql命令
   stat = conn.createStatement();
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   String sql = "delete from emp where empno="+empno;

   // 4.處理執行結果
   int i = stat.executeUpdate(sql);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   // 5.關閉資源
   JdbcUtil.free(conn);
  }
 }

}

這樣看上去就比較清晰和明了,不用分割開來去看代碼,只要調用到那個累才去照這個類的方法,這樣就能夠更加有利于檢查和排錯,維護的間接性的一個軟件的奮斗的目標,雖然只是簡單的優化,卻能夠減輕了我們寫代碼和維護的成本。

總結

通過本次編碼,對面向對象的編程的開發有更加清晰的了解,當然對重構和優化的重要性有更深的了解,在這個軟件里我學會的不僅是代碼的書寫,還學會了代碼的重構不僅需要不斷的提煉,還需要對代碼的細微的觀察。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌兰县| 富锦市| 南溪县| 宁远县| 宁城县| 固阳县| 平乡县| 盈江县| 秭归县| 仪征市| 元氏县| 台东市| 长乐市| 莫力| 五原县| 鹤庆县| 克山县| 叙永县| 都安| 襄城县| 淳化县| 容城县| 阜南县| 商城县| 东明县| 威海市| 广丰县| 蓬莱市| 榆社县| 山西省| 台中县| 富平县| 泉州市| 久治县| 扶绥县| 农安县| 阿瓦提县| 若尔盖县| 晋江市| 乐至县| 沧州市|