java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java连接数据库方式

Java中连接数据库方式详细步骤记录

作者:噢小程

这篇文章主要介绍了Java中连接数据库方式的详细步骤,包括添加依赖、建立连接、执行SQL语句、处理结果集和关闭连接,还讨论了数据库连接池的使用,需要的朋友可以参考下

一、JDBC(Java Database Connectivity)

这是 Java 连接数据库最基本的方式。

1、添加依赖

2、连接数据库

Java 虚拟机能够找到并加载特定数据库的 JDBC 驱动程序

try {
       Class.forName("com.mysql.cj.jdbc.Driver");
   } catch (ClassNotFoundException e) {
       e.printStackTrace();
   }

3、建立连接

String url = "jdbc:mysql://localhost:3306/your_database_name";
   String username = "your_username";
   String password = "your_password";
   try {
       Connection connection = DriverManager.getConnection(url, username, password);
       // 连接成功后可以进行后续数据库操作
   } catch (SQLException e) {
       e.printStackTrace();
   }

4、执行 SQL 语句

可以使用StatementPreparedStatement来执行 SQL 语句。

Statement示例:

try {
         Statement statement = connection.createStatement();
         ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table_name");
         while (resultSet.next()) {
             // 处理结果集
             int id = resultSet.getInt("id");
             String name = resultSet.getString("name");
             System.out.println("ID: " + id + ", Name: " + name);
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }

若使用PreparedStatement,(可以防止 SQL 注入):

try {
         String sql = "SELECT * FROM your_table_name WHERE id =?";
         PreparedStatement preparedStatement = connection.prepareStatement(sql);
         preparedStatement.setInt(1, 123); // 设置参数值
         ResultSet resultSet = preparedStatement.executeQuery();
         while (resultSet.next()) {
             // 处理结果集
             int id = resultSet.getInt("id");
             String name = resultSet.getString("name");
             System.out.println("ID: " + id + ", Name: " + name);
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }

5、处理结果集

根据执行的 SQL 语句类型(查询、插入、更新、删除等),处理结果集的方式不同。

对于查询语句,使用ResultSet的方法(如getIntgetString等)获取结果集中的列值。

1)查询语句处理

try {
         Statement statement = connection.createStatement();
         ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table_name");
         while (resultSet.next()) {
             // 处理每一行数据
             int id = resultSet.getInt("id");
             String name = resultSet.getString("name");
             System.out.println("ID: " + id + ", Name: " + name);
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }
int id = resultSet.getInt(1); // 通过列索引获取第一列的值(整数类型)
     String name = resultSet.getString("name"); // 通过列名获取名为"name"的列的值(字符串类型)

2)插入语句处理

String sql = "INSERT INTO your_table_name (column1, column2) VALUES (?,?)";
     try {
         PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
         preparedStatement.setString(1, "value1");
         preparedStatement.setString(2, "value2");
         int rowsInserted = preparedStatement.executeUpdate();
         if (rowsInserted > 0) {
             // 获取自增主键
             ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
             if (generatedKeys.next()) {
                 int generatedId = generatedKeys.getInt(1);
                 System.out.println("Inserted row with id: " + generatedId);
             }
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }

3)更新语句处理

String sql = "UPDATE your_table_name SET column1 =? WHERE column2 =?";
     try {
         PreparedStatement preparedStatement = connection.prepareStatement(sql);
         preparedStatement.setString(1, "newValue1");
         preparedStatement.setString(2, "conditionValue");
         int rowsUpdated = preparedStatement.executeUpdate();
         System.out.println("Updated " + rowsUpdated + " rows.");
     } catch (SQLException e) {
         e.printStackTrace();
     }

4)删除语句处理

String sql = "DELETE FROM your_table_name WHERE column1 =?";
     try {
         PreparedStatement preparedStatement = connection.prepareStatement(sql);
         preparedStatement.setString(1, "valueToDelete");
         int rowsDeleted = preparedStatement.executeUpdate();
         System.out.println("Deleted " + rowsDeleted + " rows.");
     } catch (SQLException e) {
         e.printStackTrace();
     }

在处理这些 SQL 语句时,需要注意捕获SQLException异常,以确保在出现数据库错误时能够正确处理异常情况,并进行适当的错误处理和日志记录。

6、关闭连接

在完成数据库操作后,务必关闭连接以释放资源。

try {
       if (connection!= null) {
           connection.close();
       }
   } catch (SQLException e) {
       e.printStackTrace();
   }

二、数据库连接池

使用数据库连接池可以提高数据库连接的性能和效率,常见的数据库连接池有 HikariCP、C3P0、Druid 等。

以 Druid 为例,首先添加 Druid 的依赖到项目中,配置连接池参数,如数据库 URL、用户名、密码、最大连接数等,通过连接池获取数据库连接进行操作。

1、添加依赖

如果是 Maven 项目,在pom.xml中添加以下依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.12</version>
</dependency>

如果是 Gradle 项目,在build.gradle中添加:

implementation 'com.alibaba:druid:1.2.12'

2、基本使用步骤

1)配置数据源:

import com.alibaba.druid.pool.DruidDataSource;

   public class DruidExample {
       public static void main(String[] args) {
           // 创建 Druid 数据源对象
           DruidDataSource dataSource = new DruidDataSource();
           dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
           dataSource.setUsername("your_username");
           dataSource.setPassword("your_password");
           // 可以设置其他属性,如最大连接数、最小连接数等
           dataSource.setInitialSize(5);
           dataSource.setMaxActive(10);
       }
   }

2)获取数据库连接:

try {
       Connection connection = dataSource.getConnection();
       // 使用连接进行数据库操作
   } catch (SQLException e) {
       e.printStackTrace();
   }

3)关闭数据源(通常在应用程序关闭时执行)

dataSource.close();

3、监控功能

Druid 提供了强大的监控功能,可以通过以下方式访问监控页面:

dataSource.setFilters("stat");
   dataSource.setEnable(true);

访问监控页面:默认情况下,可以通过http://localhost:8080/druid/index.html访问 Druid 的监控页面,前提是你的应用程序在端口 8080 运行。在监控页面中,可以查看连接池的状态、SQL 执行情况等信息。

4、结合 Spring 使用

如果在 Spring 项目中使用 Druid,可以通过以下步骤进行配置:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
       <property name="url" value="jdbc:mysql://localhost:3306/your_database"/>
       <property name="username" value="your_username"/>
       <property name="password" value="your_password"/>
       <!-- 其他属性配置 -->
   </bean>

在代码中通过@Autowired注入数据源:

import javax.sql.DataSource;

   @Service
   public class YourService {
       private DataSource dataSource;

       @Autowired
       public YourService(DataSource dataSource) {
           this.dataSource = dataSource;
       }

       public void doSomethingWithDatabase() {
           try {
               Connection connection = dataSource.getConnection();
               // 进行数据库操作
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
   }

三、ORM框架

这里以MyBatis举例:

1、添加依赖

如果是 Maven 项目,在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.10</version>
</dependency>

如果是 Gradle 项目,在build.gradle中添加:

implementation 'org.mybatis:mybatis:3.5.10'

同时,如果使用数据库,还需要添加相应数据库的驱动依赖。

2、创建实体类

例如,有一个用户实体类:

public class User {
    private int id;
    private String username;
    private String password;

    // 构造函数、getter 和 setter 方法
}

3、创建映射接口

import java.util.List;

public interface UserMapper {
    List<User> getAllUsers();
    User getUserById(int id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

4、编写 SQL 映射文件

创建一个与映射接口同名的 XML 文件,例如UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="your.package.name.UserMapper">

    <select id="getAllUsers" resultType="User">
        SELECT * FROM users;
    </select>

    <select id="getUserById" parameterType="int" resultType="User">
        SELECT * FROM users WHERE id = #{id};
    </select>

    <insert id="insertUser" parameterType="User">
        INSERT INTO users (username, password) VALUES (#{username}, #{password});
    </insert>

    <update id="updateUser" parameterType="User">
        UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id};
    </update>

    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id};
    </delete>

</mapper>

5、配置 MyBatis

创建mybatis-config.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/your_database"/>
                <property name="username" value="your_username"/>
                <property name="password" value="your_password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="your/package/name/UserMapper.xml"/>
    </mappers>
</configuration>

在代码中加载配置文件并使用 MyBatis:

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisExample {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();

            // 获取映射接口的实现
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            // 查询所有用户
            List<User> users = userMapper.getAllUsers();
            for (User user : users) {
                System.out.println(user.getId() + ", " + user.getUsername() + ", " + user.getPassword());
            }

            // 插入用户
            User newUser = new User();
            newUser.setUsername("newUser");
            newUser.setPassword("newPassword");
            userMapper.insertUser(newUser);
            sqlSession.commit();

            // 根据 ID 查询用户
            User userById = userMapper.getUserById(1);
            System.out.println(userById.getId() + ", " + userById.getUsername() + ", " + userById.getPassword());

            // 更新用户
            User userToUpdate = userMapper.getUserById(2);
            userToUpdate.setUsername("updatedUser");
            userMapper.updateUser(userToUpdate);
            sqlSession.commit();

            // 删除用户
            userMapper.deleteUser(3);
            sqlSession.commit();

            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

到此这篇关于Java中连接数据库方式详细步骤的文章就介绍到这了,更多相关Java连接数据库方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文