我正在实现一个使用JDBC驱动程序的代码。
以下是我制作的代码。
public class MysqlUtils {
public Connection conn;
public ResultSet rs;
public PreparedStatement stmt;
public MysqlUtils(String address, String id, String passwd) {
try {
conn = DriverManager.getConnection(address, id, passwd);
stmt = null;
rs = null;
} catch (SQLException e) {
// error management
}
}
public void getSomeData(long id) {
try {
stmt = conn.prepareStatement("SELECT * FROM some_table");
rs = stmt.executeQuery();
rs.next();
System.out.println(rs.getString("some_column");
} catch (SQLException e) {
// error management
}
}
}
我已将Connection conn,ResultSet rs,PreparedStatement stmt声明为成员变量,因为我认为这可能会帮助我提高性能。
我有几个问题。
如果我连续调用getSomeData(),每次都会为stmt和rs分配新对象吗?
无论上述问题的答案如何,如果我在多线程环境中运行此代码(使用MysqlUtils类的多个线程),是否会混淆,因为我没有声明ResultSet rs in getSomeData()?
将Connection conn,ResultSet rs,PreparedStatement stmt声明为成员变量是一个糟糕的选择吗?换句话说,我的JDBC实现是否可行?
感谢您的帮助。
答案 0 :(得分:1)
stmt
和rs
将采用新值。当然,您可能有多个类的实例,因此可能有这两个字段的多个实例。另外:
getSomeData()
应该返回一些东西,而不仅仅是打印一些东西我建议使用spring-jdbc,它会为您处理所有管道代码,并避免您的代码目前遇到的所有问题。
答案 1 :(得分:0)
不要在方法之外使用ResultSet ....使用while(rs.next)(rs = resultSet)循环数据库表并检索值!