java db数据库连接与操作功能

 更新时间:2025年09月11日 16:22:46   作者:NurDroid  
Java DB是一个基于Apache Derby的关系数据库管理系统(RDBMS),它完全用Java编写,支持标准的SQL语法,Java DB是Java开发者常用的数据库工具之一,本文给大家介绍java db数据库连接与操作功能,感兴趣的朋友跟随小编一起看看吧

Java DB 是一个基于 Apache Derby 的关系数据库管理系统(RDBMS),它完全用 Java 编写,支持标准的 SQL 语法。Java DB 是 Java 开发者常用的数据库工具之一,尤其适合嵌入式应用开发。

1. Java DB 的核心概念

  • 数据库(Database) :是存储数据的容器,它以表的形式组织数据。在 Java DB 中,一个数据库可以包含多个表,每个表存储特定类型的数据。例如,一个电商数据库可能包含用户表(存储用户信息)、订单表(存储订单信息)和商品表(存储商品信息)。
  • 表(Table) :是数据库中存储数据的基本单位,由行和列组成。每一列都有一个名称和数据类型,用于定义该列可以存储的数据种类。例如,一个用户表可能有以下结构:CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100)) 。其中,id 是主键,nameemail 是普通列。
  • 行(Row) :是表中的一个记录,表示一组相关数据。例如,在用户表中,一行可能表示一个用户的信息,如 INSERT INTO users VALUES (1, 'Alice', 'alice@example.com')
  • 列(Column) :是表中的一个字段,用于存储某种类型的数据。例如,name 列用于存储用户的名字,email 列用于存储用户的电子邮件地址。
  • 主键(Primary Key) :是表中用于唯一标识一行的列或列组合。主键的值必须是唯一的,且不能为 NULL 。例如,在用户表中,id 列被定义为主键,确保每个用户都有一个唯一的标识。
  • 外键(Foreign Key) :是表中的一个列或列组合,用于建立表与表之间的关系。外键的值必须是另一个表的主键值或 NULL 。例如,在订单表中,可以有一个 user_id 列作为外键,指向用户表的 id 列,表示订单属于哪个用户。

2. Java DB 的连接与操作

2.1 连接数据库

在 Java 中,使用 Java DB 时需要通过 JDBC(Java Database Connectivity)来连接数据库。以下是一个连接 Java DB 数据库的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JavaDBConnection {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true"; // 数据库 URL
        String username = "root"; // 数据库用户名
        String password = "password"; // 数据库密码
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            System.out.println("Connected to the database successfully.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 数据库 URL 是 jdbc:derby://localhost:1527/myDatabase;create=true 。其中,jdbc:derby 是 Java DB 的 JDBC 协议,localhost 是数据库服务器的地址,1527 是默认的 Java DB 服务端口,myDatabase 是数据库名称,create=true 表示如果数据库不存在则创建它。
  • 使用 DriverManager.getConnection() 方法建立连接,传入数据库 URL、用户名和密码。

2.2 创建表

创建表是数据库操作的基础。以下是一个创建表的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateTable {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement()) {
            String sql = "CREATE TABLE users (" +
                    "id INT PRIMARY KEY," +
                    "name VARCHAR(50)," +
                    "email VARCHAR(100)" +
                    ")";
            stmt.executeUpdate(sql);
            System.out.println("Table created successfully.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 Statement 对象执行 SQL 语句。CREATE TABLE 语句用于创建一个名为 users 的表,其中包含 idnameemail 三个列。
  • stmt.executeUpdate(sql) 方法用于执行 SQL 语句,创建表。

2.3 插入数据

插入数据是将数据添加到表中的操作。以下是一个插入数据的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InsertData {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
            try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
                pstmt.setInt(1, 1);
                pstmt.setString(2, "Alice");
                pstmt.setString(3, "alice@example.com");
                int rowsAffected = pstmt.executeUpdate();
                System.out.println(rowsAffected + " row(s) inserted.");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 PreparedStatement 对象来执行 SQL 插入语句。PreparedStatement 是一种预编译的 SQL 语句,可以提高性能并防止 SQL 注入攻击。
  • 使用 pstmt.setInt()pstmt.setString() 等方法设置 SQL 语句中的参数值。
  • pstmt.executeUpdate() 方法用于执行 SQL 插入语句,返回受影响的行数。

2.4 查询数据

查询数据是从表中检索数据的操作。以下是一个查询数据的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class QueryData {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            String sql = "SELECT * FROM users";
            try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String email = rs.getString("email");
                    System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 PreparedStatement 对象执行 SQL 查询语句。
  • pstmt.executeQuery() 方法用于执行 SQL 查询语句,返回一个 ResultSet 对象。
  • 使用 ResultSet 对象的 next() 方法遍历查询结果,rs.getInt()rs.getString() 等方法获取每一列的值。

2.5 更新数据

更新数据是修改表中已存在数据的操作。以下是一个更新数据的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UpdateData {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            String sql = "UPDATE users SET email = ? WHERE id = ?";
            try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
                pstmt.setString(1, "alice_new@example.com");
                pstmt.setInt(2, 1);
                int rowsAffected = pstmt.executeUpdate();
                System.out.println(rowsAffected + " row(s) updated.");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 PreparedStatement 对象执行 SQL 更新语句。
  • 使用 pstmt.setString()pstmt.setInt() 等方法设置 SQL 语句中的参数值。
  • pstmt.executeUpdate() 方法用于执行 SQL 更新语句,返回受影响的行数。

2.6 删除数据

删除数据是从表中移除数据的操作。以下是一个删除数据的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeleteData {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            String sql = "DELETE FROM users WHERE id = ?";
            try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
                pstmt.setInt(1, 1); // 假设删除 id 为 1 的用户
                int rowsAffected = pstmt.executeUpdate();
                System.out.println(rowsAffected + " row(s) deleted.");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 PreparedStatement 对象执行 SQL 删除语句。
  • 使用 pstmt.setInt(1, 1) 设置 SQL 语句中的参数值,表示删除 id1 的用户。
  • pstmt.executeUpdate() 方法用于执行 SQL 删除语句,返回受影响的行数。

3. Java DB 的其他功能

3.1 索引(Index)

索引是一种特殊的数据库对象,用于提高查询性能。在 Java DB 中,可以通过 SQL 语句创建索引。以下是一个创建索引的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateIndex {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement()) {
            String sql = "CREATE INDEX idx_name ON users (name)";
            stmt.executeUpdate(sql);
            System.out.println("Index created successfully.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 CREATE INDEX 语句创建了一个名为 idx_name 的索引,该索引基于 users 表的 name 列。
  • 索引可以帮助数据库更快地查找 name 列中的数据,从而提高查询性能。

3.2 视图(View)

视图是一种虚拟表,其内容由 SQL 查询定义。视图可以简化复杂的 SQL 操作,隐藏数据的复杂性。以下是一个创建视图的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateView {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement()) {
            String sql = "CREATE VIEW user_summary AS SELECT id, name FROM users";
            stmt.executeUpdate(sql);
            System.out.println("View created successfully.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 CREATE VIEW 语句创建了一个名为 user_summary 的视图,该视图只包含 users 表的 idname 列。
  • 查询视图时,可以像查询普通表一样查询视图。

3.3 存储过程(Stored Procedure)

存储过程是一组预编译的 SQL 语句,可以提高数据库操作的效率和安全性。以下是一个创建存储过程的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateProcedure {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement()) {
            String sql = "CREATE PROCEDURE insert_user (IN p_id INT, IN p_name VARCHAR(50), IN p_email VARCHAR(100)) " +
                    "LANGUAGE SQL " +
                    "BEGIN " +
                    "INSERT INTO users (id, name, email) VALUES (p_id, p_name, p_email); " +
                    "END";
            stmt.executeUpdate(sql);
            System.out.println("Stored procedure created successfully.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 CREATE PROCEDURE 语句创建了一个名为 insert_user 的存储过程,该存储过程接受三个参数:p_idp_namep_email
  • 存储过程内部执行了一个 INSERT 语句,将传入的参数插入到 users 表中。

3.4 调用存储过程

创建存储过程后,可以通过 JDBC 调用它。以下是一个调用存储过程的示例代码:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CallProcedure {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            String sql = "{CALL insert_user(?, ?, ?)}";
            try (CallableStatement cstmt = conn.prepareCall(sql)) {
                cstmt.setInt(1, 2);
                cstmt.setString(2, "Bob");
                cstmt.setString(3, "bob@example.com");
                cstmt.execute();
                System.out.println("User inserted using stored procedure.");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 CallableStatement 对象调用存储过程。
  • 使用 cstmt.setInt()cstmt.setString() 等方法设置存储过程的参数值。
  • cstmt.execute() 方法用于执行存储过程。

3.5 事务(Transaction)

事务是一组操作的集合,这些操作要么全部成功,要么全部失败。在 Java DB 中,可以通过 JDBC 控制事务。以下是一个使用事务的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TransactionExample {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            conn.setAutoCommit(false); // 禁用自动提交
            String sql1 = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
            String sql2 = "UPDATE users SET email = ? WHERE id = ?";
            try (PreparedStatement pstmt1 = conn.prepareStatement(sql1);
                 PreparedStatement pstmt2 = conn.prepareStatement(sql2)) {
                pstmt1.setInt(1, 3);
                pstmt1.setString(2, "Charlie");
                pstmt1.setString(3, "charlie@example.com");
                pstmt1.executeUpdate();
                pstmt2.setString(1, "charlie_new@example.com");
                pstmt2.setInt(2, 3);
                pstmt2.executeUpdate();
                conn.commit(); // 提交事务
                System.out.println("Transaction committed successfully.");
            } catch (SQLException e) {
                conn.rollback(); // 回滚事务
                System.out.println("Transaction rolled back.");
                e.printStackTrace();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 conn.setAutoCommit(false) 禁用自动提交,手动控制事务。
  • 执行两条 SQL 语句:插入一个用户和更新该用户的电子邮件地址。
  • 如果两条语句都成功执行,则调用 conn.commit() 提交事务;如果发生异常,则调用 conn.rollback() 回滚事务。

4. Java DB 的一些高级功能

4.1 数据库触发器(Trigger)

触发器是一种特殊的存储过程,它在特定的数据库事件(如插入、更新或删除操作)发生时自动执行。以下是一个创建触发器的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateTrigger {
    public static void main(String[] args) {
        String url = "jdbc:derby://localhost:1527/myDatabase;create=true";
        String username = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement()) {
            String sql = "CREATE TRIGGER update_email_trigger " +
                    "AFTER UPDATE OF email ON users " +
                    "FOR EACH ROW " +
                    "BEGIN " +
                    "CALL update_email_log(OLD.email, NEW.email); " +
                    "END";
            stmt.executeUpdate(sql);
            System.out.println("Trigger created successfully.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 CREATE TRIGGER 语句创建了一个名为 update_email_trigger 的触发器。
  • 该触发器在 users 表的 email 列发生更新操作时触发。
  • 触发器内部调用了一个名为 update_email_log 的存储过程,将旧的电子邮件地址和新的电子邮件地址作为参数传递。

4.2 数据库连接池(Connection Pool)

数据库连接池是一种资源管理技术,用于提高数据库连接的性能和可伸缩性。在 Java 中,可以使用第三方库(如 Apache DBCP 或 HikariCP)来实现数据库连接池。以下是一个使用 Apache DBCP 的示例代码:

import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class ConnectionPoolExample {
    public static void main(String[] args) {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("org.apache.derby.jdbc.ClientDriver");
        dataSource.setUrl("jdbc:derby://localhost:1527/myDatabase");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        try (Connection conn = dataSource.getConnection()) {
            String sql = "SELECT * FROM users";
            try (PreparedStatement pstmt = conn.prepareStatement(sql);
                 ResultSet rs = pstmt.executeQuery()) {
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String email = rs.getString("email");
                    System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

  • 使用 BasicDataSource 创建了一个数据库连接池。
  • 设置了数据库驱动程序类名、数据库 URL、用户名和密码。
  • 从连接池中获取连接,执行 SQL 查询语句。

5. Java DB 的一些实用工具

5.1 ij 工具

ij 是 Java DB 自带的一个命令行工具,用于执行 SQL 语句。以下是使用 ij 工具的一些示例:

  • 启动 ij 工具:
ij
  • 连接到数据库:
CONNECT 'jdbc:derby://localhost:1527/myDatabase;user=root;password=password';
  • 执行 SQL 查询语句:
SELECT * FROM users;
  • 退出 ij 工具:
EXIT;

5.2 网络服务器模式

Java DB 支持网络服务器模式,允许远程客户端连接到数据库。以下是启动 Java DB 网络服务器的示例代码:

java -jar derbyrun.jar server start

在启动网络服务器后,可以使用 JDBC 连接到数据库,如前面的示例代码所示。

6. Java DB 的一些注意事项

  • 数据库性能优化 :在使用 Java DB 时,需要注意数据库性能优化。例如,合理使用索引、避免全表扫描、优化 SQL 查询语句等。
  • 数据备份与恢复 :定期备份数据库是防止数据丢失的重要措施。Java DB 提供了备份和恢复数据库的功能,可以通过 SQL 语句或工具进行备份和恢复。
  • 安全性 :在使用 Java DB 时,需要注意安全性。例如,使用强密码、限制数据库访问权限、防止 SQL 注入攻击等。

到此这篇关于java db数据库连接与操作功能的文章就介绍到这了,更多相关java db连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java8中方法引用的使用详解

    Java8中方法引用的使用详解

    这篇文章主要介绍了Java 8 中的方法引用使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java实现简单的搜索引擎

    java实现简单的搜索引擎

    这篇文章主要为大家详细介绍了java实现简单的搜索引擎的相关资料,需要的朋友可以参考下
    2016-02-02
  • Java编程redisson实现分布式锁代码示例

    Java编程redisson实现分布式锁代码示例

    这篇文章主要介绍了Java编程redisson实现分布式锁代码示例,小编觉得还是比较不错的,这里给大家分享下,供需要的朋友参考。
    2017-10-10
  • Java之SSM中bean相关知识汇总案例讲解

    Java之SSM中bean相关知识汇总案例讲解

    这篇文章主要介绍了Java之SSM中bean相关知识汇总案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • SpringBoot采用AJAX实现异步发布帖子详解

    SpringBoot采用AJAX实现异步发布帖子详解

    Ajax是一种web应用技术,可以借助客户端脚本(javascript)与服务端应用进行异步通讯,获取服务端数据以后,可以进行局部刷新,进而提高数据的响应和渲染速度。所有的Ajax请求都会基于DOM(HTML元素)事件,通过XHR(XMLHttpRequest)对象实现与服务端异步通讯局部更新
    2022-08-08
  • Java基础面试题之volatile详解

    Java基础面试题之volatile详解

    Volatile可以看做是轻量级的 Synchronized,它只保证了共享变量的可见性,下面这篇文章主要给大家介绍了关于Java基础面试题之volatile的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • nacos服务注册命名空间指定方式

    nacos服务注册命名空间指定方式

    文章介绍了Nacos服务注册命名空间的用途,以及如何创建和指定命名空间,命名空间用于隔离不同项目的服务和配置,避免冲突,通过在配置文件中指定命名空间ID,服务会注册到相应的命名空间中,这样可以更好地管理不同环境下的配置文件
    2024-12-12
  • Java在PDF中替换文字详解及可能遇到的问题

    Java在PDF中替换文字详解及可能遇到的问题

    本文详细介绍了如何使用Java和Spire.PDF for Java库在PDF文档中批量替换文字,包括替换特定文字的所有实例、第一个实例以及使用正则表达式,同时,探讨了可能遇到的问题及其解决方案,需要的朋友可以参考下
    2024-09-09
  • Java String保存字符串的机制

    Java String保存字符串的机制

    Java中字符串以什么格式来存储?Java 中的 Unicode 字符串会按照 Latin1或者 UTF16 的编码格式保存在 String 中,本文就详细的介绍了一下,感兴趣的可以了解一下
    2021-05-05
  • idea2020.1最新版永久破解/pycharm也可用(步骤详解)

    idea2020.1最新版永久破解/pycharm也可用(步骤详解)

    这篇文章主要介绍了idea2020.1最新版永久破解/pycharm也可用,本文给大家分享简单实现步骤,通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论