jdbc——程序优化

来源:互联网 发布:简单优化模板源码下载 编辑:程序博客网 时间:2024/06/16 11:50

用简单的jdbc语句操作数据库很不方便,即使加入了事务思想减少了错误的发生,但也仍避免不了其臃肿混乱的操作,因此接下来的优化思想绝对值得一看:

程序的优化主要分为以下步骤:

1、   配置文件(db_config.properties):将对数据库连接要求的信息存在特定的配置文件中,以方便操作。一般配置文件中会有以下信息

(1)      驱动:driver=com.mysql.jdbc.Driver

(2)      数据库连接url:db_url=jdbc:mysql://localhost:3306/jsp_db

(3)      数据库登录名:user=root

(4)      数据库登录密码:password=******

2、建立一个连接工厂类(ConnectionFactory),用于读取1中配置文件信息以及为数据库操作提供数据库连接。

3、创建实体类,实体类可以看成数据库中的表,一个实体类就是一个表,表中每一列对应实体类的属性。但要注意的是,数据库的表的主键设置成抽象类,被对应类继承,同时每个类都要设置getset方法,用于数据读取和插入等。

4、   创建Dao实现类(接口):规范确定各实体类的操作

5、  创建操作类,实现自4中的接口:

6、  测试,数据库操作步骤:

(1)      通过工厂类创建连接

(2)      设置事务不自动提交:conn.setAutoCommit(false);

(3)      新建实体类,同时get或set相应数据

(4)      新建Dao类,用以执行操作:UserDao userDao = new UserProcess(); userDao.save();

(5)      提交事务:conn.commit();

(6)      关闭事务:conn.close();


安静这种方式把对数据库的操作运用到面向对象的思想,将对单个数据的操作变成对类的操作,方便且实用,而且不易出错!!


具体代码如下:

2、创建连接

publicclass ConnectionFactory {

    privatestatic Stringdriver;

    privatestatic Stringdb_url;

    privatestatic Stringuser;

    privatestatic Stringpassword;

    public Connectionconn;

    //工厂实例

    privatestaticfinal ConnectionFactoryfactory =new ConnectionFactory();

    //静态代码块,从属性文件中读取关键字

    //初始化类,只执行一次

    static{

        Propertiesprop = new Properties();//保存、处理属性文件中的键值对

        try {

            //获取配置文件信息

            InputStreamin = ConnectionFactory.class.getClassLoader().getResourceAsStream("db_conf.properties");

            prop.load(in);

        }catch (IOException e) {

            System.out.println("=====配置文件读取错误=====");

            e.printStackTrace();

        }

        driver = prop.getProperty("driver");

        db_url = prop.getProperty("db_url");

        user = prop.getProperty("user");

        password = prop.getProperty("password");

    }

    public ConnectionFactory() {}

    //单例化类,保证程序运行期间只要一个ConnectionFactory存在

    publicstatic ConnectionFactory getInstance(){

        returnfactory;

    }

    //创建连接方法,返回一个Connection用于数据库连接

    public Connection makeConnection(){

        try {

            Class.forName(driver);

            conn = DriverManager.getConnection(db_url,user,password);

        }catch (Exception e) {

            e.printStackTrace();

        }

        returnconn;

    }

3、

(1)      主键实体类(IdEntity):

publicabstractclass IdEntity {

    protectedlongid;

    publiclong getId() {

        returnid;

    }

    publicvoid setId(long id) {

        this.id = id;

    }

}

(2)      用户实体类(User):

publicclass Userextends IdEntity{

    private Stringname;

    privateString password;

    private Stringemail;

    public String getName() {

        returnname;

    }

    publicvoid setName(String name) {

        this.name = name;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password = password;

    }

    public String getEmail() {

        returnemail;

    }

    publicvoid setEmail(String email) {

        this.email = email;

    }

    @Override

    public String toString() {

        return"User [name=" +name + ",password=" + password + ", email="+email + ",id=" + id +"]";

    }

}

4、UserDao:

publicinterface UserDao {

    publicvoid save(Connection conn,User user)throws SQLException;

    publicvoid update(Connection conn,long id,User user)throws SQLException;

    publicvoid delete(Connection conn,User user)throws SQLException;

}

5、

publicclass UserProcessimplements UserDao {

    @Override

    publicvoid save(Connection conn, User user)throws SQLException {

        PreparedStatementps = conn.prepareCall("INSERT INTO tbl_user(name,password,email) VALUES (?,?,?)");

        ps.setString(1,user.getName());

        ps.setString(2,user.getPassword());

        ps.setString(3,user.getEmail());

        ps.execute();

    }

    @Override

    publicvoid update(Connection conn,long id, User user)throws SQLException {

        StringupdateSql = "UPDATEtbl_user SET name = ?,password = ?,email = ? WHERE id = ?";

        PreparedStatementps = conn.prepareCall(updateSql);

        ps.setString(1,user.getName());

        ps.setString(2,user.getPassword());

        ps.setString(3,user.getEmail());

        ps.execute();

    }

    @Override

    publicvoid delete(Connection conn, User user)throws SQLException {

        StringdeleteSql = "DELETEFROM tbl_user WHERE id = ?";

        PreparedStatementps = conn.prepareCall(deleteSql);

        ps.setLong(1,user.getId());

        ps.execute();

    }

}

6、public class UserDaoTest {

    publicstaticvoid main(String[] args) {

        Connectionconn = null;

        try {

            conn= ConnectionFactory.getInstance().makeConnection();

            conn.setAutoCommit(false);

            UserDaouserDao = new UserProcess();

            Usermeimei = new User();

            meimei.setName("meimei");

            meimei.setPassword("199610");

            meimei.setEmail("meimei@gmain.com");

            userDao.save(conn,meimei);

            conn.commit();

            System.out.println("操作成功!");

        }catch (SQLException e) {

            e.printStackTrace();

            try {

                conn.rollback();

            }catch (SQLException e1) {

                e1.printStackTrace();

                System.out.println("回滚失败!");

            }

        }finally{

            try {

                conn.close();

            }catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}



代码较多需要细心理解,细心品味,希望大家都能有所收获

0 0