JDBC 数据库连接

来源:互联网 发布:java微信号自定义菜单 编辑:程序博客网 时间:2024/05/01 02:52

在软件开发中,通常采用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 blocke.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 blocke.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 blocke.printStackTrace();}return list;}}


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

原创粉丝点击