jdbc简单的连接和实现基本的增删改更功能

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);
        }
    }



}

这样看上去就比较清晰和明了,不用分割开来去看代码,只要调用到那个累才去照这个类的方法,这样就能够更加有利于检查和排错,维护的间接性的一个软件的奋斗的目标,虽然只是简单的优化,却能够减轻了我们写代码和维护的成本。

总结

通过本次编码,对面向对象的编程的开发有更加清晰的了解,当然对重构和优化的重要性有更深的了解,在这个软件里我学会的不仅是代码的书写,还学会了代码的重构不仅需要不断的提炼,还需要对代码的细微的观察。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值