JDBC数据库连接步骤

时间:2020-01-09 10:35:20  来源:igfitidea点击:

在本文中,我们将逐步介绍使用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();
        }
      }
    }
  }
}