利用接口来提高扩展性
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","蓝盾","女"});
}
}