我目前正在构建一个使用 JDBC 和 MySQL 的小型应用程序。
我有这个数据库类。目前它只有一个连接的主要方法,然后返回一些东西。现在这工作正常。但我想将其更改为:
具有构造函数的数据库类。 调用不同 SQL 查询的多种方法,例如我想这样调用用户。
db.user('约翰');
那么我想防止什么:每次创建新方法时都必须连接。
抱歉,如果问题可能有点不清楚。我是新的 JDBC 用户。
package application;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DB {
//ToDo Add these credentials leter to a main config file.
private static String connectionUrl = "jdbc:mysql://localhost:3306/tvh_jdbctesting";
private static String connectionUser = "root";
private static String connectionPassword = "root";
private static String jdbc = "com.mysql.jdbc.Driver";
DB(){
}
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName(jdbc).newInstance();
//Makes connection with the provided credentials.
conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword);
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM test");
while (rs.next()) {
String id = rs.getString("id");
String name = rs.getString("name");
String wachtwoord = rs.getString("wachtwoord");
System.out.println(id + name + wachtwoord);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); }
try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); }
try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
}
最佳答案
这对于一个新的 JDBC 人来说实际上是一个不错的开始。我最大的吹毛求疵是您不需要在 Class.forName 返回的类上使用 newInstance
,这取决于您使用的驱动程序是否需要 Class.forName。
如果你在这里谈论的是一个从命令行运行的小型单线程程序,它完成它的事情然后消失,你可以通过让 main 方法创建连接、创建其他对象并调用它们来解决,传入连接,然后让主程序在末尾的 finally block 中关闭连接。我宁愿显式传递连接也不愿使用某些数据库类。
如果您的程序有多个线程必须同时访问数据库,或者如果您希望程序在可能会终止数据库连接的网络故障中幸存下来,您将开始考虑使用连接池。如果您发现 JDBC 太痛苦,那么 Spring can help .
关于Java JDBC 工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33779988/