反射之前奏Oracle升级版

利用接口来提高扩展性
Student表的属性和帮助方法

public class Student {
    private int id;
    private String name;
    private String sex;
//构造方法
    public Student() {
    }
    public Student(int id, String name, String sex) {
        super();
        this.id = id;
        this.name = name;
        this.sex = sex;
    }
//get和set方法
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
//重写toTring方法
    @Override
    public String toString() {
        return "id=" + id + ", name=" + name + ", sex=" + sex;
    }
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcHelp {
//需要用到的String参数
    private static String driver = "oracle.jdbc.driver.OracleDriver";
    private static String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
    private static String user = "Scott";
    private static String password = "tiger";
/*单例的懒汉式
1、定义一个实例JdbcHelp Instance
2、私有化构造方法,使得别人不能new一个对象;
3、判断,在本类new一个对象
*/
    private static JdbcHelp Instance;
    private JdbcHelp() {    }
    public static JdbcHelp getInstance() {
        if (Instance == null) {
            Instance = new JdbcHelp();
        }
        return Instance;
    }
    // 加载驱动,因为是格式不变且共享,所以单独放一个静态块里
    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("驱动加载失败异常");
        }
    }

// 连接Oracle方法
    public static Connection getconn() {
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("连接失败异常");
            return null;
        }
    }
    // 关闭方法,主要用到两种,这里用到重载
    public static void close(Connection conn, PreparedStatement prep)
            throws SQLException {
        if (prep != null && prep.isClosed()) {
            prep.close();//先关声明
        }
        if (conn != null && conn.isClosed()) {
            conn.close();//再关连接
        }
    }

    public static void close(Connection conn, PreparedStatement prep,
            ResultSet rSet) throws SQLException {
        if (rSet != null && rSet.isClosed()) {
            rSet.close();//先关查询
        }
        close(conn, prep);
    }
}

增删改查接口

public interface InterStu {
//      1、查询Student所有信息
    public List<Student> getStu() ;
    //      2、根据学生id查出其信息
    public Student getId1(int Id);
    //      3、根据name查出其信息
    public Student getName1(String name);
    //      4、修改student信息update
    public void updateStu(Student stu);
    //      5、删除student信息delete
    public void deleteStu(int Id);
    //      6、增加student信息add用insert into
    public void addStu(Student stu);
}

实现接口并且单独添加了一个dml和查询方法

package JdbcSimple;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ImpStudentSelect implements InterStu {
    // 单例
    private static ImpStudentSelect Instance;

    private ImpStudentSelect() {
    }

    public static ImpStudentSelect getInstance() {
        if (Instance == null) {
            Instance = new ImpStudentSelect();
        }
        return Instance;
    }

    private JdbcHelp jh = JdbcHelp.getInstance();
    private Connection conn;
    private PreparedStatement prep;
    private ResultSet rSet;

    // dml方法也就是增删改方法,利用数组来设置prep的内容
    public void dml(String sql, String[] args) {
        try {
            // 连接
            conn = jh.getconn();
            // 操作
            prep = conn.prepareStatement(sql);
            // 判断数组非空,并且长度大于0,将传入的数组用循环来加到prep上
            if (args != null && args.length > 0) {
                int size = args.length;
                if (size > 0) {
                    for (int i = 0; i < size; i++) {
                        prep.setString(i + 1, args[i]);
                    }
                }
            }
            prep.execute();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                JdbcHelp.close(conn, prep);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                conn = null;
                prep = null;
            }
        }
    }

    public List<Student> Select(String sql) {
        List<Student> list = new ArrayList<Student>();
        try {
            conn = jh.getconn();
            prep = conn.prepareStatement(sql);
            rSet = prep.executeQuery();
            while (rSet.next()) {
                Student stu = new Student();
                stu.setId(rSet.getInt(1));
                stu.setName(rSet.getString(2));
                stu.setSex(rSet.getString(3));
                list.add(stu);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                JdbcHelp.close(conn, prep, rSet);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                conn = null;
                prep = null;
                rSet = null;
            }
        }
        return list;
    }
//=========================================================================================================
    @Override
    public List<Student> getStu() {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public List<Student> getId1(int Id) {
        // TODO Auto-generated method stub
        String sql = "select * from student where id=" + Id;
        return Select(sql);
    }
    @Override
    public Student getName1(String name) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void updateStu(Student stu) {
        String sql = "update student set name=?,sex=? where id=?";
        String[] args = { stu.getName(), stu.getSex(),
                String.valueOf(stu.getId()) };
        dml(sql, args);
    }
    @Override
    public void deleteStu(int Id) {
        // TODO Auto-generated method stub

    }

    @Override
    public void addStu(Student stu) {
        // TODO Auto-generated method stub

    }
}

测试方法大致相同

public class StudentTest {
    public static void main(String args[]) {
    //查询一个
    ImpStudentSelect stuse1=ImpStudentSelect.getInstance();
    ArrayList<Student> stus=(ArrayList<Student>)stuse1.getId1(5);
    if(stus!=null){
        for(Student s:stus){
            System.out.println(s);
            }
        }
//dml方法
    Student stu=new Student();
    stu.setId(4);
    stu.setName("榴莲");
    stu.setSex("女");
    stuse1.updateStu(stu);
    //add操作
stuse1.dml("insert into student values(?,?,?)", new String[]{"9","蓝盾","女"});
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值