JDBC的定義
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的東陽網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。
jdbc的基本連接
簡單的說就是加載驅(qū)動(dòng),建立連接,然后進(jìn)行查詢和刪除等語句的操作,在java中提供了java.sql的jar包,不過我現(xiàn)在用的是MySQL的連接和實(shí)例,在這里基本在本地的
加載和建立連接,這就是基本的一個(gè)語法結(jié)構(gòu),在連接數(shù)據(jù)庫當(dāng)然還有其他的屬性可以設(shè)置,比如說最大的連接數(shù)了,和如何建立連接池,都可以在配置中用到,這里我就簡單的介紹如何連接,后面跟的是這個(gè)連接的字符集,防止出現(xiàn)亂碼。
簡單的增刪改查
簡單的增刪改查是每個(gè)開發(fā)者都會(huì)遇到的,畢竟我們整個(gè)系統(tǒng)真正的業(yè)務(wù)所在也是這幾個(gè)簡單的邏輯,但是在關(guān)系的連接和耦合性下就會(huì)變成復(fù)雜百倍的系統(tǒng),所以要懂得基本的就可以窺見更大系統(tǒng)的構(gòu)建了,所以我現(xiàn)在要分析的只是基本的功能實(shí)現(xiàn)。
首先連接好數(shù)據(jù)庫之后,那就是創(chuàng)建查詢語句,這里用到的是statment這個(gè)關(guān)鍵詞,下面是代碼的基本實(shí)現(xiàn)。
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.注冊(cè)驅(qū)動(dòng)程序 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.創(chuàng)建執(zhí)行語句,發(fā)送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.處理執(zhí)行結(jié)果 int i = stat.executeUpdate(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 5.關(guān)閉資源 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.注冊(cè)驅(qū)動(dòng)程序 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.創(chuàng)建執(zhí)行語句,發(fā)送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.處理執(zhí)行結(jié)果 int i = stat.executeUpdate(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 5.關(guān)閉資源 try { if (conn != null) { conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
這里的代碼很繁瑣,但是沒辦法,為了更清新一點(diǎn)的去了解,這個(gè)過程是必須的,然后接下來就是進(jìn)行簡單的優(yōu)化,雖然代碼還是差不多,但是感覺上會(huì)更加簡潔了 ,這里就要建立一個(gè)工具類了代碼如下
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(); } } }
在這里,把數(shù)據(jù)庫連接和異常處理,等工作都及合成一個(gè)工具類,然后再主函數(shù)調(diào)用就可以了,這就是面向?qū)ο蟮囊粋€(gè)體現(xiàn),當(dāng)然還是會(huì)分析下關(guān)于主類的代碼,要不然就太過于空洞了,下面要分析的主類代碼如下
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.注冊(cè)驅(qū)動(dòng)程序 try { //2.獲取連接 conn=JdbcUtil.getConnection(); // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令 stat = conn.createStatement(); String sql = "select * from emp"; // 4.處理執(zhí)行結(jié)果 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.關(guān)閉資源 JdbcUtil.free(conn); } return employees; } public static void addEmployee(Employee employee) { Connection conn = null; Statement stat = null; // 1.注冊(cè)驅(qū)動(dòng)程序 try { //2.獲取連接 conn=JdbcUtil.getConnection(); // 3.創(chuàng)建執(zhí)行語句,發(fā)送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.處理執(zhí)行結(jié)果 int i = stat.executeUpdate(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 5.關(guān)閉資源 JdbcUtil.free(conn); } } public static void updateEmployee(Employee employee) { Connection conn = null; Statement stat = null; // 1.注冊(cè)驅(qū)動(dòng)程序 try { //2.獲取連接 conn=JdbcUtil.getConnection(); // 3.創(chuàng)建執(zhí)行語句,發(fā)送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.處理執(zhí)行結(jié)果 int i = stat.executeUpdate(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 5.關(guān)閉資源 JdbcUtil.free(conn); } } public static void deleteEmployee(int empno) { Connection conn = null; Statement stat = null; // 1.注冊(cè)驅(qū)動(dòng)程序 try { //2.獲取連接 conn=JdbcUtil.getConnection(); // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令 stat = conn.createStatement(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String sql = "delete from emp where empno="+empno; // 4.處理執(zhí)行結(jié)果 int i = stat.executeUpdate(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 5.關(guān)閉資源 JdbcUtil.free(conn); } } }
這樣看上去就比較清晰和明了,不用分割開來去看代碼,只要調(diào)用到那個(gè)累才去照這個(gè)類的方法,這樣就能夠更加有利于檢查和排錯(cuò),維護(hù)的間接性的一個(gè)軟件的奮斗的目標(biāo),雖然只是簡單的優(yōu)化,卻能夠減輕了我們寫代碼和維護(hù)的成本。
總結(jié)
通過本次編碼,對(duì)面向?qū)ο蟮木幊痰拈_發(fā)有更加清晰的了解,當(dāng)然對(duì)重構(gòu)和優(yōu)化的重要性有更深的了解,在這個(gè)軟件里我學(xué)會(huì)的不僅是代碼的書寫,還學(xué)會(huì)了代碼的重構(gòu)不僅需要不斷的提煉,還需要對(duì)代碼的細(xì)微的觀察。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
本文題目:jdbc實(shí)現(xiàn)連接和增刪改查功能
本文地址:http://bm7419.com/article26/jdjscg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站排名、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)