Mysqldatasource线程是否安全

时间:2017-10-10 23:58:27

标签: java jdbc thread-safety datasource

是否实现了连接池? 我相信PostgreSQL JDBC驱动程序是线程安全的,但我不确定MYSQL。

我正在制作一个静态对象来处理这样的数据库连接     包com.amzi.DataAccess;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class DBUtil {
    private static MysqlDataSource dataSource = null;

    public static MysqlDataSource getDataSource() {
        if (dataSource == null) {
            dataSource = new MysqlDataSource();
            dataSource.setUser("root");
            dataSource.setPassword(""); // Put your password here
            dataSource.setUrl("jdbc:mysql://localhost:3306/user_device_table");
        }
        return dataSource;
    }
}

在另一个类中,我创建一个连接以查看是否存在记录。 完成连接后,我将其关闭。

public boolean ValidateLogin(User user) {
    boolean status = false;
    PreparedStatement ps = null;
    ResultSet rs = null;
    Connection connection = null;

    try {
        connection = DBUtil.getDataSource().getConnection();
        ps = connection.prepareStatement("select * from users where user_name=? and password=?");
        ps.setString(1, user.getUsername());
        ps.setString(2, user.getPassword());
        rs = ps.executeQuery();
        status = rs.next();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    return status;
}

1 个答案:

答案 0 :(得分:0)

com.mysql.jdbc.jdbc2.optional.MysqlDataSource是基本数据源。也就是说,它会创建连接,但不提供连接池。

它的连接创建使用基本的MySQL java.sql.Driver实现,就像使用DriverManager.getConnection一样。换句话说,它与驱动程序本身一样是线程安全的。

通常,建议使用连接池。使用应用程序/服务器(或Tomcat)提供的功能,或使用专用连接池库(例如HikariCP,DBCP等)。