JDBC数据库连接步骤
在本文中,我们将逐步介绍使用JDBC将Java应用程序连接到数据库的步骤。以下是要遵循的步骤
1.为数据库注册适当的驱动程序
2.通过传递数据库URL,数据库用户和数据库密码来创建连接对象。
3.创建语句
4.执行查询
5.处理ResultSet(如果要从数据库获取记录)
6.关闭连接
注册驱动程序类
第一件事是为要连接的数据库注册JDBC驱动程序。注册驱动程序后,它将被加载到内存中。
我们可以通过以下两种方式之一注册驱动程序:
- 通过使用Class.forName()
- 通过使用Driver.registerDriver()
使用Class.forName()
我们必须使用方法将驱动程序类名称作为字符串传递,以将驱动程序的类文件动态加载到内存中。一般形式如下:
Class.forName(“JDBC Driver Class”);
注册Oracle驱动程序。在类路径中需要ojdbc8.jar或者更高版本。
Class.forName(“oracle.jdbc.driver.OracleDriver”);
正在注册MySQL驱动程序。在类路径中需要MySQL Connector / J jar。
Class.forName(“com.mysql.cj.jdbc.Driver”);
正在注册DB2驱动程序。在类路径中需要db2jcc.jar。
Class.forName(“com.ibm.db2.jcc.DB2Driver”);
使用Driver.registerDriver()
我们还可以使用静态方法DriverManager.registerDriver()注册驱动程序,我们需要将Driver类实例作为方法参数传递。一般形式如下:
DriverManager.registerDriver(Driver class instance);
注册Oracle驱动程序。
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
正在注册MySQL驱动程序。
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
正在注册DB2驱动程序。
DriverManager.registerDriver(new com.ibm.db2.jcc.DB2Driver());
请注意,从JDBC 4.0开始,我们无需显式注册JDBC驱动程序。如果类路径中有适当的jar,则JDBC驱动程序管理器可以自动检测并加载驱动程序。因此,从Java 6开始,显式注册驱动程序步骤是可选的。
创建连接对象
第二步是建立与数据库的连接。我们可以使用java.sql.DriverManager类的静态方法getConnection()进行此操作。有3个重载的getConnection()方法。
- getConnection(字符串URL)
- getConnection(字符串url,字符串用户,字符串密码)
- getConnection(字符串url,属性信息)
URL是指向数据库服务器的数据库URL。对于不同的数据库,如何创建数据库URL有所不同。以下是某些数据库的DB URL模式
Oracle – jdbc:oracle:<驱动程序类型>:@主机名:端口:databaseSID
例如,我们有一个主机名为myhost的数据库,Oracle侦听器配置为在端口1521上侦听,用户名是dbuser,密码是dbpwd,数据库SID是emp,则连接
Connection connection = DriverManager.getConnection ("jdbc:oracle:thin:@myhost:1521:emp", "dbuser", "dbpwd");
MySQL – jdbc:mysql:// hostname:port / dbName
例如,使用密码dbpwd将用户dbuser连接到侦听主机localhost的端口3306的DB emp。
Connection connection = DriverManager.getConnection ("jdbc:mysql://localhost:3306/emp", "dbuser", "dbpwd");
DB2 – jdbc:db2:// hostname:port / dbName
例如,将密码为dbpwd的用户dbuser通过主机myhost的端口5021连接到数据库emp。
Connection connection = DriverManager.getConnection ("jdbc:db2://myhost:5021/emp","dbuser","dbpwd");
创建语句对象
Connection接口的createStatement()方法用于创建Statement对象。使用语句对象,我们可以指定必须由数据库执行的SQL查询。
Statement statement = connection.createStatement();
执行查询
要执行查询,请调用Statement类的execute方法。 Statement界面中有几种执行方法,其中一些在此处提到
- execute(String sql)–执行给定的SQL语句,该语句可能返回多个结果。
- executeQuery(String sql)–执行给定的SQL语句,该语句返回单个ResultSet对象。
- executeUpdate(String sql)–执行给定的SQL语句,该语句可以是INSERT,UPDATE或者DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。
执行查询示例
更新学生表中的学生记录
statement.executeUpdate("UPDATE Student SET lastname='sharma' where rollno=32");
获取所有员工的数据
ResultSet rs = statement.executeQuery("Select * from Employee");
处理结果集
如果查询执行返回一个ResultSet,则必须通过游标访问该ResultSet中的数据。该光标是一个指向ResultSet对象中的一行数据的指针。最初,光标位于第一行之前。在ResultSet中,有一个下一个方法可移至ResultSet的下一行,并且有几种针对不同数据类型的getter方法,以从记录中获取值。
例如,访问查询返回的ResultSet以获取所有员工。
while(rs.next()){ int empId = rs.getInt("id"); String empName = rs.getString("EMP_NAME"); String dept = rs.getString("DEPT"); int age = rs.getInt("AGE"); System.out.println("id: " + empId + " Name: " + empName + " Department: " + dept + " Age : " + age ); }
关闭连接对象
我们可以使用Connection接口的close()方法关闭连接。
connection.close();
良好的做法是显式关闭与数据库的连接以释放资源。作为一种好习惯,请在finally块中关闭打开的DB连接。这样可以确保即使代码中存在异常也可以关闭连接。
JDBC Java示例
这是一个Java JDBC示例,其中显示了所有JDBC数据库连接步骤,创建语句,执行查询,处理ResultSet以及关闭连接。在示例中使用MySQL DB,它连接到的模式为theitroad,表为employee。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCDemo { public static void main(String[] args) { Connection connection = null; try { // Load driver Class.forName("com.mysql.cj.jdbc.Driver"); // connection object connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/theitroad", "root", "admin"); // create Statement object Statement statement = connection.createStatement(); // Executing Query ResultSet rs = statement.executeQuery("SELECT * from employee"); // Processing Resultset while(rs.next()){ System.out.println("id: " + rs.getInt("id") + " First Name: " + rs.getString("FIRST_NAME") + " Last Name: " + rs.getString("LAST_NAME")+ " Dept: " + rs.getString("DEPARTMENT")); } }catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(connection != null){ //close connection try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }