JAVAJDBC连接数据库简单实例

JAVAJDBC连接数据库简单实例

0.前言

在现代应用程序开发中,数据库连接是不可或缺的一部分。本文将详细介绍如何在Java中连接Oracle数据库,包括加载驱动、创建连接、执行SQL语句、处理结果以及释放资源的完整步骤。

1. 加载数据库驱动类

Java与不同数据库的交互依赖于特定的JDBC驱动。以Oracle数据库为例,您需要下载并配置ojdbc5.jar文件。

步骤:

  1. 下载驱动

    • 通常,您可以在Oracle数据库的安装目录下找到

      ojdbc5.jar
      ojdbc5.jar
      ojdbc5.jar
    •  

      文件,路径可能类似于:

      app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc5.jar
      app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc5.jar
      app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc5.jar
  2. 添加到项目

    • ojdbc5.jar复制到您的Java项目目录中。

    • 在IDE中(如Eclipse或IntelliJ),右键点击项目,选择 Build Path -> Configure Build Path -> Libraries -> Add JARs,然后选择刚才添加的jar包。

      20241030195021471-image

      20241030195112807-image

    • 在代码中使用以下方式加载驱动:

      加载驱动

      Class.forName("oracle.jdbc.driver.OracleDriver");
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Class.forName("oracle.jdbc.driver.OracleDriver");

2. 创建SQL语句

在连接数据库之前,您需要准备要执行的SQL语句。根据需求,SQL语句可以是插入、更新、删除或查询。

示例:

// 插入一条记录
String insertSql = "INSERT INTO emp(empno, ename) VALUES (8888, 'aa')";
// 查询所有员工
String selectSql = "SELECT * FROM emp";
// 插入一条记录
String insertSql = "INSERT INTO emp(empno, ename) VALUES (8888, 'aa')";
​
// 查询所有员工
String selectSql = "SELECT * FROM emp";
// 插入一条记录 String insertSql = "INSERT INTO emp(empno, ename) VALUES (8888, 'aa')"; ​ // 查询所有员工 String selectSql = "SELECT * FROM emp";

3. 创建数据库连接

使用DriverManager类创建数据库连接。以下是连接Oracle数据库的示例代码:

示例代码:

// 数据库连接信息
String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 数据库URL
String userName = "SCOTT"; // 数据库用户名
String userPass = "tiger"; // 数据库密码
// 创建连接
Connection conn = DriverManager.getConnection(url, userName, userPass);
// 数据库连接信息
String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 数据库URL
String userName = "SCOTT"; // 数据库用户名
String userPass = "tiger"; // 数据库密码
​
// 创建连接
Connection conn = DriverManager.getConnection(url, userName, userPass);
// 数据库连接信息 String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 数据库URL String userName = "SCOTT"; // 数据库用户名 String userPass = "tiger"; // 数据库密码 ​ // 创建连接 Connection conn = DriverManager.getConnection(url, userName, userPass);

4. 执行SQL语句

连接成功后,可以使用StatementPreparedStatementCallableStatement来执行SQL语句。

4.1 使用Statement

Statement适用于简单的SQL语句,但不推荐用于用户输入的内容,以避免SQL注入。

示例:

// 创建Statement对象
Statement stmt = conn.createStatement();
// 执行插入操作
int result = stmt.executeUpdate(insertSql);
if (result > 0) {
System.out.println("插入成功");
}
// 执行查询操作
ResultSet rs = stmt.executeQuery(selectSql);
while (rs.next()) {
String name = rs.getString("ename");
double salary = rs.getDouble("sal");
Date hireDate = rs.getDate("hiredate");
System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate);
}
// 创建Statement对象
Statement stmt = conn.createStatement();
​
// 执行插入操作
int result = stmt.executeUpdate(insertSql);
if (result > 0) {
   System.out.println("插入成功");
}
​
// 执行查询操作
ResultSet rs = stmt.executeQuery(selectSql);
while (rs.next()) {
   String name = rs.getString("ename");
   double salary = rs.getDouble("sal");
   Date hireDate = rs.getDate("hiredate");
   System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate);
}
// 创建Statement对象 Statement stmt = conn.createStatement(); ​ // 执行插入操作 int result = stmt.executeUpdate(insertSql); if (result > 0) {    System.out.println("插入成功"); } ​ // 执行查询操作 ResultSet rs = stmt.executeQuery(selectSql); while (rs.next()) {    String name = rs.getString("ename");    double salary = rs.getDouble("sal");    Date hireDate = rs.getDate("hiredate");    System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate); }

 

4.2 使用PreparedStatement

PreparedStatement可以防止SQL注入,并且在执行多次相同SQL时性能更好。

示例:

// 创建PreparedStatement对象
String preparedSql = "INSERT INTO emp(empno, ename) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(preparedSql);
// 设置参数
pstmt.setInt(1, 8888);
pstmt.setString(2, "aa");
int insertResult = pstmt.executeUpdate();
if (insertResult > 0) {
System.out.println("插入成功");
}
// 查询示例
String querySql = "SELECT * FROM emp WHERE ename LIKE ?";
pstmt = conn.prepareStatement(querySql);
pstmt.setString(1, "%aa%");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String name = rs.getString("ename");
System.out.println("查询结果: " + name);
}
// 创建PreparedStatement对象
String preparedSql = "INSERT INTO emp(empno, ename) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(preparedSql);
​
// 设置参数
pstmt.setInt(1, 8888);
pstmt.setString(2, "aa");
int insertResult = pstmt.executeUpdate();
if (insertResult > 0) {
   System.out.println("插入成功");
}
​
// 查询示例
String querySql = "SELECT * FROM emp WHERE ename LIKE ?";
pstmt = conn.prepareStatement(querySql);
pstmt.setString(1, "%aa%");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
   String name = rs.getString("ename");
   System.out.println("查询结果: " + name);
}
// 创建PreparedStatement对象 String preparedSql = "INSERT INTO emp(empno, ename) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(preparedSql); ​ // 设置参数 pstmt.setInt(1, 8888); pstmt.setString(2, "aa"); int insertResult = pstmt.executeUpdate(); if (insertResult > 0) {    System.out.println("插入成功"); } ​ // 查询示例 String querySql = "SELECT * FROM emp WHERE ename LIKE ?"; pstmt = conn.prepareStatement(querySql); pstmt.setString(1, "%aa%"); ResultSet rs = pstmt.executeQuery(); while (rs.next()) {    String name = rs.getString("ename");    System.out.println("查询结果: " + name); }

 

5. 处理返回结果

在执行查询后,您将获得一个ResultSet对象。通过ResultSet,可以遍历查询结果。

示例:

while (rs.next()) {
String name = rs.getString("ename");
double salary = rs.getDouble("sal");
Date hireDate = rs.getDate("hiredate");
System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate);
}
while (rs.next()) {
   String name = rs.getString("ename");
   double salary = rs.getDouble("sal");
   Date hireDate = rs.getDate("hiredate");
   System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate);
}
while (rs.next()) {    String name = rs.getString("ename");    double salary = rs.getDouble("sal");    Date hireDate = rs.getDate("hiredate");    System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate); }

 

6. 释放资源

在完成数据库操作后,务必释放资源,以避免内存泄漏。

示例:

// 释放ResultSet、Statement和Connection
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
// 释放ResultSet、Statement和Connection
if (rs != null) {
   rs.close();
}
if (stmt != null) {
   stmt.close();
}
if (conn != null) {
   conn.close();
}
// 释放ResultSet、Statement和Connection if (rs != null) {    rs.close(); } if (stmt != null) {    stmt.close(); } if (conn != null) {    conn.close(); }

 

注意事项

SQL注入

使用Statement时,拼接SQL语句可能导致SQL注入问题。例如:

String e_name = "C OR '1'='1"; // 潜在的SQL注入
String sql = "SELECT * FROM EMP WHERE ENAME LIKE '%" + e_name + "%'";
String e_name = "C OR '1'='1"; // 潜在的SQL注入
String sql = "SELECT * FROM EMP WHERE ENAME LIKE '%" + e_name + "%'";
String e_name = "C OR '1'='1"; // 潜在的SQL注入 String sql = "SELECT * FROM EMP WHERE ENAME LIKE '%" + e_name + "%'";

 

为了避免此类问题,建议使用PreparedStatement,它会自动处理参数,防止SQL注入。

事务管理

在进行多表操作时,建议使用事务管理,以确保数据一致性。

示例:

try {
conn.setAutoCommit(false); // 关闭自动提交
// 执行多个SQL操作
pstmt.executeUpdate(insertSql);
pstmt.executeUpdate(anotherSql); // 另一个SQL操作
conn.commit(); // 手动提交
} catch (SQLException e) {
conn.rollback(); // 发生异常时回滚
e.printStackTrace();
} finally {
// 释放资源
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
}
try {
   conn.setAutoCommit(false); // 关闭自动提交
   // 执行多个SQL操作
   pstmt.executeUpdate(insertSql);
   pstmt.executeUpdate(anotherSql); // 另一个SQL操作
​
   conn.commit(); // 手动提交
} catch (SQLException e) {
   conn.rollback(); // 发生异常时回滚
   e.printStackTrace();
} finally {
   // 释放资源
   if (pstmt != null) {
       pstmt.close();
  }
   if (conn != null) {
       conn.close();
  }
}
try {    conn.setAutoCommit(false); // 关闭自动提交    // 执行多个SQL操作    pstmt.executeUpdate(insertSql);    pstmt.executeUpdate(anotherSql); // 另一个SQL操作 ​    conn.commit(); // 手动提交 } catch (SQLException e) {    conn.rollback(); // 发生异常时回滚    e.printStackTrace(); } finally {    // 释放资源    if (pstmt != null) {        pstmt.close();   }    if (conn != null) {        conn.close();   } }

整体代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class OracleDatabaseExample {
public static void main(String[] args) {
// 数据库连接信息
String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 数据库URL
String userName = "SCOTT"; // 数据库用户名
String userPass = "tiger"; // 数据库密码
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 加载Oracle JDBC驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 创建数据库连接
conn = DriverManager.getConnection(url, userName, userPass);
System.out.println("数据库连接成功");
// 插入一条记录
String insertSql = "INSERT INTO emp(empno, ename) VALUES (?, ?)";
pstmt = conn.prepareStatement(insertSql);
pstmt.setInt(1, 8888); // 设置员工编号
pstmt.setString(2, "aa"); // 设置员工姓名
int insertResult = pstmt.executeUpdate();
if (insertResult > 0) {
System.out.println("插入成功");
}
// 查询所有员工
String selectSql = "SELECT * FROM emp";
pstmt = conn.prepareStatement(selectSql);
rs = pstmt.executeQuery(); // 执行查询
// 处理结果集
while (rs.next()) {
String name = rs.getString("ename");
double salary = rs.getDouble("sal");
java.sql.Date hireDate = rs.getDate("hiredate");
System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate);
}
} catch (ClassNotFoundException e) {
System.err.println("数据库驱动加载失败: " + e.getMessage());
} catch (SQLException e) {
System.err.println("数据库操作失败: " + e.getMessage());
} finally {
// 释放资源
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
System.out.println("资源已释放");
} catch (SQLException e) {
System.err.println("释放资源失败: " + e.getMessage());
}
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class OracleDatabaseExample {

    public static void main(String[] args) {
        // 数据库连接信息
        String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 数据库URL
        String userName = "SCOTT"; // 数据库用户名
        String userPass = "tiger"; // 数据库密码

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            // 加载Oracle JDBC驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            // 创建数据库连接
            conn = DriverManager.getConnection(url, userName, userPass);
            System.out.println("数据库连接成功");

            // 插入一条记录
            String insertSql = "INSERT INTO emp(empno, ename) VALUES (?, ?)";
            pstmt = conn.prepareStatement(insertSql);
            pstmt.setInt(1, 8888); // 设置员工编号
            pstmt.setString(2, "aa"); // 设置员工姓名
            int insertResult = pstmt.executeUpdate();
            if (insertResult > 0) {
                System.out.println("插入成功");
            }

            // 查询所有员工
            String selectSql = "SELECT * FROM emp";
            pstmt = conn.prepareStatement(selectSql);
            rs = pstmt.executeQuery(); // 执行查询

            // 处理结果集
            while (rs.next()) {
                String name = rs.getString("ename");
                double salary = rs.getDouble("sal");
                java.sql.Date hireDate = rs.getDate("hiredate");
                System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate);
            }

        } catch (ClassNotFoundException e) {
            System.err.println("数据库驱动加载失败: " + e.getMessage());
        } catch (SQLException e) {
            System.err.println("数据库操作失败: " + e.getMessage());
        } finally {
            // 释放资源
            try {
                if (rs != null) rs.close();
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
                System.out.println("资源已释放");
            } catch (SQLException e) {
                System.err.println("释放资源失败: " + e.getMessage());
            }
        }
    }
}
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class OracleDatabaseExample { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 数据库URL String userName = "SCOTT"; // 数据库用户名 String userPass = "tiger"; // 数据库密码 Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 加载Oracle JDBC驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 创建数据库连接 conn = DriverManager.getConnection(url, userName, userPass); System.out.println("数据库连接成功"); // 插入一条记录 String insertSql = "INSERT INTO emp(empno, ename) VALUES (?, ?)"; pstmt = conn.prepareStatement(insertSql); pstmt.setInt(1, 8888); // 设置员工编号 pstmt.setString(2, "aa"); // 设置员工姓名 int insertResult = pstmt.executeUpdate(); if (insertResult > 0) { System.out.println("插入成功"); } // 查询所有员工 String selectSql = "SELECT * FROM emp"; pstmt = conn.prepareStatement(selectSql); rs = pstmt.executeQuery(); // 执行查询 // 处理结果集 while (rs.next()) { String name = rs.getString("ename"); double salary = rs.getDouble("sal"); java.sql.Date hireDate = rs.getDate("hiredate"); System.out.println("员工姓名: " + name + ", 薪水: " + salary + ", 入职日期: " + hireDate); } } catch (ClassNotFoundException e) { System.err.println("数据库驱动加载失败: " + e.getMessage()); } catch (SQLException e) { System.err.println("数据库操作失败: " + e.getMessage()); } finally { // 释放资源 try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); System.out.println("资源已释放"); } catch (SQLException e) { System.err.println("释放资源失败: " + e.getMessage()); } } } }

 

用云无忧
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 共1条

请登录后发表评论

    暂无评论内容