JavaWeb学习之路(二)--- 数据库操作优化

新建一个类ConnectionFactory,封装Connection;
新建一个文件properties文件dbconfig.properties,存放数据库配置数据;
示例代码:

// ConnectionFactory.java

package com.package.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class ConnectionFactory {
    private static String driver;
    private static String dburl;
    private static String  user;
    private static String  password;
    private static final ConnectionFactory factory = new ConnectionFactory();
    private Connection conn;
    static {
        Properties prop = new Properties();
        try {
            InputStream in = ConnectionFactory.class.getClassLoader().getResourceAsStream("dbconfig.properties");
            prop.load(in);
        } catch (Exception e) {
            System.out.println("=========配置文件读取错误========");
        }
        driver = prop.getProperty("driver");
        dburl = prop.getProperty("dburl");
        user = prop.getProperty("user");
        password = prop.getProperty("password");

        System.out.println("=========" + driver + "========");
        System.out.println("=========" + dburl + "========");
        System.out.println("=========" + user + "========");
        System.out.println("=========" + password + "========");
    }
    private ConnectionFactory() {

    }
    public static ConnectionFactory getInstance() {
        return factory;
    }
    public Connection makeConnection() {
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(dburl, user, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
}
// dbconfig.properties

driver = com.mysql.jdbc.Driver
dburl = jdbc:mysql://localhost:3306/test // test为数据库名称
user = root
password = 

完整示例:数据库中有一个表(tab_user),使用模型通过接口的方式,操作数据库中的数据;

数据模型:

// IdEntity

package com.package.entity;

public abstract class IdEntity {
    protected Long id;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}
// user.java

package com.package.entity;

public class User extends IdEntity {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    private String password;
    private String email;

    @Override
    public String toString() {
        return "User [name=" + name + ", password=" + password + ", email=" + email + ", id=" + id + "]";
    }

}

接口文件:

// UserDao.java

package com.package.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.package.entity.User;

public interface UserDao {

    public void save(Connection conn, User user) throws SQLException;

    public void update(Connection conn, Long id, User user) throws SQLException;

    public void delete(Connection conn, User user) throws SQLException;

    public ResultSet get(Connection conn, User user) throws SQLException;

}

// 接口实现文件:

// UserDaoImpl.java

package com.package.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.package.dao.UserDao;
import com.package.entity.User;

public class UserDaoImpl implements UserDao {

    @Override
    public void save(Connection conn, User user) throws SQLException {
        // TODO Auto-generated method stub
        PreparedStatement ps = 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
    public void update(Connection conn, Long id, User user) throws SQLException {
        // TODO Auto-generated method stub
        String updateSql = "UPDATE tbl_user SET name=?, password=?, email=? WHERE id=?";
        PreparedStatement ps = conn.prepareStatement(updateSql);
        ps.setString(1, user.getName());
        ps.setString(2, user.getPassword());
        ps.setString(3, user.getEmail());
        ps.setLong(4, user.getId());
        ps.execute();
    }

    @Override
    public void delete(Connection conn, User user) throws SQLException {
        // TODO Auto-generated method stub
        PreparedStatement ps = conn.prepareStatement("DELETE FROM tbl_user WHERE id=?");
        ps.setLong(1, user.getId());
        ps.execute();
    }

执行:

package com.package.test;


import java.sql.Connection;

import com.package.dao.UserDao;
import com.package.dao.impl.UserDaoImpl;
import com.package.entity.User;
import com.package.util.ConnectionFactory;

public class UserDaoTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Connection conn = null;
        try {
            conn = ConnectionFactory.getInstance().makeConnection();
            conn.setAutoCommit(false);

            UserDao userDao = new UserDaoImpl();
            User tom = new User();
            tom.setName("Tom");
            tom.setPassword("12345");
            tom.setEmail("4342323432@qq.com");
            userDao.save(conn, tom);
            conn.commit();
        } catch (Exception e) {
            try {
                conn.rollback();
            } catch (Exception e2) {

            }
        }   
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值