JDBC 数据库连接

在软件开发中,通常采用MVC模式,将视图和业务逻辑分开,业务逻辑层主要完成各种业务逻辑操作,如果业务逻辑设计到数据库访问,则将对数据库的操作封装在最底层。业务逻辑层可以通过继承或构造的方式实现数据库访问的透明性。在JAVA中对数据库的访问通常采用JDBC驱动来访问底层数据库,对于不同的数据库具有不同的JDBC驱动,相应的JDBC驱动可以到各种数据库的官网下载。那么在JAVA中如果实现对数据库的访问呢?接下来通过对mysql数据的访问操作例子来介绍jdbc数据访问操作的实现:

定义一个DatabaseHelper类:

public class DatabaseHelper {
	
	private static final String DRIVER_STRING = "com.mysql.jdbc.Driver";
	private static final String IP_STRING = "192.168.44.128";
	private static final String USER_STRING = "root";
	private static final String PASSWORD_S_STRING = "pwd";
	private static final String DATABASE_NAME_STRING = "database_name";
	private static final int PORT = 3306;
	
	private Connection connection;
	
        	/** 
          * 采用单例模式获取数据库连接
	 * single object
 	 * @return
	 */
	protected Connection getDefaultConnection(){
		if (connection == null) {
			connection = getConnection(getConnectionURL(IP_STRING, PORT, DATABASE_NAME_STRING),USER_STRING,PASSWORD_S_STRING);
		}
		return connection;
	}
	
	/**
	 * get PreparedStatement
	 * @param sql
	 * @return
	 */
	protected PreparedStatement getPreparedStatement(String sql) {
		if (getDefaultConnection() != null) {
			try {
				return getDefaultConnection().prepareStatement(sql);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}
	
	/**
	 * 组合数据库连接字符串 	 
	 * @param databaseName
	 * @return
	 */
	protected String getConnectionURL(String ip,int port,String databaseName){
		StringBuilder sBuilder = new StringBuilder();
		return sBuilder.append("jdbc:mysql://").append(ip).append(":").append(String.valueOf(port))
		.append("/").append(databaseName).toString();
	}
	
	/**
	 * close connection
	 */
	protected void close(){
		try {
			if (!connection.isClosed()) {
				connection.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


假设数据库中有一张表student,根据数据库表字段,编写相应的java bean

public class Student {
	private String name;
	private String six;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String getSix() {
		return six;
	}
	public void setSix(String six) {
		this.six = six;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}


编写一个StudentDao类,继承DatabaseHelper,在该类中即可实现对数据库表的增删改查等操作:

public class StudentDao extends DatabaseHelper {
	
	private PreparedStatement statement;
	private ResultSet resultSet;
	
	public List<Student >  getDataSet(){
		String sql = "select * from student";
		List<Student > list = null;
		try {
			statement = getPreparedStatement(sql);
			resultSet = statement.executeQuery();
			if (resultSet != null) {
				list = new ArrayList<Student >();
				while(resultSet.next()){
					Student student = new Student ();
					student.setName(resultSet.getString("NAME"));
					student.setSix(resultSet.getString("SIX"));
					student.setAge(resultSet.getInt("AGE"));
					list.add(student);
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
}


这里只简单实现了对表的查询操作,通过这种方式就屏蔽了对数据库的直接操作,将对数据库的直接访问封装在父类中实现,业务逻辑之类关心的只是如何编写Sql语句,并将结果集返回,对于视图层,则直接调用该层的业务逻辑类,这样对于视类看到的只是函数调用,而看不到对数据库的操作。这种方式增强了软件的可移植性和可维护性,当换一种数据库时,我们只要修改DatabaseHelper类中的数据库连接配置信息即可。当数据库表结构变化时,我们也只需要修改业务逻辑层。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值