使用Java封装数据库连接类,大量减少代码量

常规的连接数据库方法(以MySQL为例)

第一步:创建数据库连接类

package com.dzsw.util;
//先在lib下引入包:mysql-connector-java-5.1.39-bin.jar
import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
//import java.sql.*;

//连接数据库的工具类
public class Todb {
	//jdba java database connect
	static final String NAME = "root";
	static final String PASSWORD = "123456";
	//链接地址  协议  地址  数据库名
	static final String URL = "jdbc:mysql://localhost:3306/test";
	static final String DRIVER = "com.mysql.jdbc.Driver";
	public static Connection getConnection() {
		Connection con = null;
		try {
		//加载驱动
		Class.forName(DRIVER);
		//获取连接
		con= (Connection) DriverManager.getConnection(URL,NAME,PASSWORD);
		}catch (SQLException e) {
			e.printStackTrace();
			} catch (ClassNotFoundException e) {
			e.printStackTrace();
                     return null;
		}
		return con;
	}

}

第二步:增删查改(这里只展示增和删的实现类)

public class Add {
	public int AddOne(String title,String author) {
		Connection con=Todb.getConnection();
		String sql="insert into new values(id,?,?)";
		int i=0;
		try {
			PreparedStatement ps=con.prepareStatement(sql);
			ps.setString(1, title);
			ps.setString(2, author);
			i=ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return i;
	}
}
public class Delete {
	public int delOne(int id) {
		Connection con=Todb.getConnection();
		String sql="delete from new where id="+id;
		int i=0;
		try {
			PreparedStatement ps=con.prepareStatement(sql);
			i=ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return i;
	}
}
//测试
	public static void main(String[] args) {
		Delete de=new Delete();
		int i=de.delOne(0);
		if (i==1) {
			System.out.println("删除成功");
		}else {
			System.out.println("删除失败");
		}
	}

以上便是普遍的做法,大家可以看到,在增和删的实现类中,存在着大量重复的代码,这些代码功能相同,每次使用它们就会降低我们的开发效率,有没有什么方法能够提高复用?

接下来我们要做就是整合代码!

首先我们保持数据库连接类不变,我们写一个增删改的集合处理类,请注意:这里是增删改,没有查询,因为查询的代码跟以上三者区别很大,下面是我们的整合方法:

public class AddUpDel {
	//把增删改封装成为一个方法
	//object...args是一个可变的参数,传入几个是几个
	public int AddUpdateDelete(String sql,Object...args) {
		Connection con=null;
		PreparedStatement ps=null;
		try {
			con=Todb.getConnection();
			ps=con.prepareStatement(sql);
			//设置占位符参数
			if (args!=null) {
				for (int i = 0; i < args.length; i++) {
					ps.setObject(i+1, args[i]);
				}
			}
			return ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			return -1;
		}finally {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
//使用封装后的添加方法
public int AddTwo(News news) {
    //实例化
	AddUpDel aud=new AddUpDel();
	String sql="insert into new values(id,?,?)";
	return aud.AddUpdateDelete(sql, news.getTitle(),news.getAuthor());
}
//测试类
public static void main(String[] args) {
	Add a=new Add();
	News news=new News();
	news.setTitle("第四篇新闻");
	news.setAuthor("赵四");
	a.AddTwo(news);
	if (a.AddTwo(news)==1) {
		System.out.println("添加成功");
	}else {
		System.out.println("添加失败");
	}
}

以上就是我们的全部代码,其中AddUpdateDelete方法是增删改三者的通用方法,AddTwo是我们的实现类,也就是是通用方法是除数据库连接类以外的另一个工具类,我们在AddTwo中仅仅使用了三行代码就完成了数据的添加,一句是实例化我们的通用方法,一句是我们要执行的sql语句,一句是返回调用我们的通用方法,大大提高了效率。

在通用方法中,最难理解的有两个地方,一个是可变参数:object...args,一个是占位符数量的设置。这里博主不再多做解释,这些事需要记住的东西。

你可能感兴趣的:(Java,数据库)