📜  如何创建数据库连接?

📅  最后修改于: 2022-05-13 01:57:53.769000             🧑  作者: Mango

如何创建数据库连接?

Java Database Connectivity 是一个标准 API,或者我们可以说是Java编程语言和各种数据库(如 Oracle、SQL、PostgreSQL、MongoDB 等)之间的应用程序接口。它基本上将前端(用于与用户交互)与用于存储用户在表详细信息中输入的数据的后端。 JDBC 或Java数据库连接通过以下步骤创建数据库:

  • 导入数据库
  • 加载和注册驱动程序
  • 创建连接
  • 创建声明
  • 执行查询
  • 处理结果
  • 关闭连接

第一步:导入数据库

Java由许多包组成,这些包简化了对每个逻辑进行硬编码的需要。它具有 JDBC 连接所需的内置 SQL 包。

句法:

import java.sql* ;

第 2 步:加载和注册驱动程序

这是由 JVC(Java虚拟机)完成的,它将某些驱动程序文件加载到对 JDBC 的工作至关重要的辅助内存中。

句法:

forName(com.mysql.jdbc.xyz);

class.forname() 方法是注册驱动程序最常用的方法。它动态地将驱动程序文件加载到内存中。

例子:

try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException e) {
   System.out.println("cant load driver class!");
   System.Exit(1);
}

这里使用了oracle数据库。现在让我们考虑一个随机的酒店数据库管理系统示例。现在在其上应用 SQL 命令,将该数据库命名为“样本”。现在假设用户开始在其中插入名为“sample1”和“sample2”的表。


Java
// Connections class
  
// Importing all SQL classes
import java.sql.*;
  
public class connection{
 
// Object of Connection class
// initially assigned NULL
Connection con = null;
 
public static Connection connectDB()
{
    try
    {
         
        // Step 2: involve among 7 in Connection
        // class i.e Load and register drivers
 
        // 2(a) Loading drivers using forName() method
        // Here, the name of the database is mysql
        Class.forName("com.mysql.jdbc.Driver");
 
        // 2(b) Registering drivers using DriverManager
        Connection con = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/database",
            "root", "1234");
             
        // Root is the username, and
        // 1234 is the password
 
        // Here, the object of Connection class is return
        // which further used in main class
        return con;
    }
 
    // Here, the exceptions is handle by Catch block
    catch (SQLException | ClassNotFoundException e)
    {
         
        // Print the exceptions
        System.out.println(e);
 
        return null;
    }
}
}


Java
// Importing SQL libraries to create database
import java.sql.*;
   
class GFG{
   
// Step 1: Main driver method
public static void main(String[] args)
{
     
    // Step 2: Creating connection using
    // Connection type and inbuilt function
    Connection con = null;
    PreparedStatement p = null;
    ResultSet rs = null;
 
    con = connection.connectDB();
 
    // Here, try block is used to catch exceptions
    try
    {
         
        // Here, the SQL command is used to store
        // String datatype
        String sql = "select * from customer";
        p = con.prepareStatement(sql);
        rs = p.executeQuery();
 
        // Here, print the ID, name, email
        // of the customers
        System.out.println("id\t\tname\t\temail");
 
        // Check condition
        while (rs.next())
        {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            String email = rs.getString("email");
            System.out.println(id + "\t\t" + name +
                                    "\t\t" + email);
        }
    }
 
    // Catch block is used for exception
    catch (SQLException e)
    {
         
        // Print exception pop-up on the screen
        System.out.println(e);
    }
}
}


第 3 步:创建连接

创建连接由 DriverManager 类的 getconnection() 方法完成,它包含数据库 URL、用户名和密码作为参数。

句法:

public static Connection getConnection(String URL, String Username, String password)  
throws SQLException  

例子:

String URL = "jdbc:oracle:thin:@amrood:1241:EMP";
String USERNAME = "geekygirl";
String PASSWORD = "geekss"
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

这里,

数据库 URL 看起来像 - jdbc:oracle:thin:@amrood:1221:EMP
用户名是-“geekygirl”
密码是“极客”

第 4 步:创建声明

创建查询语句以按照正确的语法与数据库交互。在编写查询之前,我们必须使用 connect() 方法连接数据库。例如:

conn = connection.connectDB();
String sql = "select * from customer";

该语句基本上显示了客户表的内容。我们还可以使用 Connection 接口的 createStatement() 方法创建语句。在这里,语句的对象主要负责执行查询。

句法:

public Statement createStatement()throws SQLException 

例子:

Statement s = conn.createStatement();

第 5 步:执行查询

为了执行查询(上面写的),我们需要将查询转换为 JDBC 可读格式,为此我们使用preparedstatement()函数,为了执行转换后的查询,我们使用Statement 接口的executequery()函数。它返回用于查找所有表记录的“rs”对象。

句法:

public rs executeQuery(String sql)throws SQLException  

例子:

p = conn.prepareStatement(sql);
rs = p.executeQuery();

第 6 步:处理结果

现在我们检查 rs.next() 方法是否不为空,然后我们在“客户”表中显示该特定客户的详细信息。next()函数基本上检查是否有任何记录满足查询,如果没有记录满足条件,然后它返回null。下面是示例代码:

while (rs.next())
{  
    int id = rs.getInt("cusid");
    String name = rs.getString("cusname");
    String email = rs.getString("email");
    System.out.println(id + "\t\t" + name + 
                            "\t\t" + email);
}

第 7 步:关闭连接

执行完所有操作后,在不再需要数据库会话后,需要关闭 JDBC 连接。如果没有明确完成,那么Java垃圾收集器会为我们完成这项工作。然而作为一个优秀的程序员,让我们学习如何关闭 JDBC 的连接。所以关闭JDBC连接使用close()方法,这个方法关闭所有的JDBC连接。

句法:

public void close()throws SQLException  

例子:

conn.close();

示例代码如上图所示:

Java

// Importing SQL libraries to create database
import java.sql.*;
   
class GFG{
   
// Step 1: Main driver method
public static void main(String[] args)
{
     
    // Step 2: Creating connection using
    // Connection type and inbuilt function
    Connection con = null;
    PreparedStatement p = null;
    ResultSet rs = null;
 
    con = connection.connectDB();
 
    // Here, try block is used to catch exceptions
    try
    {
         
        // Here, the SQL command is used to store
        // String datatype
        String sql = "select * from customer";
        p = con.prepareStatement(sql);
        rs = p.executeQuery();
 
        // Here, print the ID, name, email
        // of the customers
        System.out.println("id\t\tname\t\temail");
 
        // Check condition
        while (rs.next())
        {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            String email = rs.getString("email");
            System.out.println(id + "\t\t" + name +
                                    "\t\t" + email);
        }
    }
 
    // Catch block is used for exception
    catch (SQLException e)
    {
         
        // Print exception pop-up on the screen
        System.out.println(e);
    }
}
}

输出: