JAVA访问数据库之连接数据库

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

开发一个访问数据库的应用程序,首先要加载数据库的驱动程序,只需要在第一次访问数据库时加载一次,然后每次运行时创建一个Connection实例,紧接着执行操作数据库的SQL语句,并处理返回的结果集,最后在完成完成此次操作时销毁前面创建的Connection,释放与数据库的连接。

加载数据库驱动

在连接数据库之前,首先要把JDBC驱动类加载到java虚拟机,可以使用java.lang.Class类的静态方法forName(String className)。成功加载后会将加载的驱动类注册给DriverManager类,加载失败将抛出ClassNotFoundException异常。

创建数据库连接

DriverManager类跟踪已注册的驱动程序,通过调用DriverManager类的静态方法getConnection(String url, String user, String password)可以建立与数据库的连接。3个参数依次为欲连接的数据库的路径、用户名和密码,方法返回值类型为java.sql.Connection。当调用该方法时,会搜索整个驱动程序列表,直到找到一个能够连接至数据连接字符串中指定的数据库的驱动程序为止。

执行SQL语句,得到结果集

当数据库连接建立以后,就可以使用该连接创建Statement实例,并将SQL语句传递给它所连接的数据库,并返回类型为ResultSet的对象(查询的时候),Statement实例分为3种类型:

  • Statement实例:该类型的实例只能用来执行静态的SQL
  • PreparedStatement实例:该类型的实例可以执行动态的SQL
  • CallableStatement实例:该类型的实例可以执行数据库的存储过程

处理查询结果

对于返回的结果集,使用ResultSet对象的next()方法将光标指向下一行。最初光标位于第一行之前,因此第一次调用next()方法将光标置于第一行上,如果到达结果集的末尾,则ResultSet的next()方法会返回false,方法getXXX提供了获取当前行中某一列的值的途径,列名或列号可用于标识要从中获取数据的列。

连接示例

为了方便操作,这里我选用H2数据库,这样电脑上没有安装数据库的朋友也可以快速的构建程序,H2数据库的官网地址为:
http://www.h2database.com/html/main.html

H2是一个短小精干的嵌入式数据库引擎,主要的特性包括:
1. 免费、开源、快速
2. 嵌入式的数据库服务器,支持集群
3. 提供JDBC、ODBC访问接口,提供基于浏览器的控制台管理程序
4. Java编写,可使用GCJ和IKVM.NET编译
5. 短小精干的软件,1M左右

如电脑上已经安装了数据库,直接使用对应数据库厂商提供的驱动包即可,操作过程一致。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCConnectDemo
{
   public static void main(String[] args)
   {
      // 加载数据库驱动
      try
      {
         Class.forName("org.h2.Driver");
      }
      catch (ClassNotFoundException e)
      {
         System.out.println("加载数据库驱动失败...");
         return;
      }
      // 初始化数据库,方便运行加的这一段代码,实际开发中,数据库应该是初始化好的,如果已存在数据库,请将该段代码注释掉,无需执行
      try
      {
         initDataBase();
      }
      catch (SQLException e1)
      {
         System.out.println("数据库表初始化失败驱动失败...");
         return;
      }
      Connection conn = null;
      Statement statement = null;
      ResultSet resultSet = null;
      try
      {
         // 获得数据库连接
         conn = DriverManager.getConnection("jdbc:h2:h2.db", "test", "123");
         statement = conn.createStatement();
         resultSet = statement
               .executeQuery("SELECT USER_ID, USER_NAME FROM USER_INFO");
         System.out.printf("%20s %50s\n", "USER_ID", "USER_NAME");
         // 遍历结果集
         while (resultSet.next())
         {
            System.out.printf("%20s %50s\n", resultSet.getString("USER_ID"),
                  resultSet.getString("USER_NAME"));
         }
      }
      catch (SQLException e)
      {
         System.out.println("出现异常...");
      }
      finally
      {
         // 释放资源
         if (resultSet != null)
         {
            try
            {
               resultSet.close();
            }
            catch (SQLException e)
            {
               e.printStackTrace();
            }
         }
         if (statement != null)
         {
            try
            {
               statement.close();
            }
            catch (SQLException e)
            {
               e.printStackTrace();
            }
         }
         if (conn != null)
         {
            try
            {
               conn.close();
            }
            catch (SQLException e)
            {
               e.printStackTrace();
            }
         }
      }
   }

   /**
    * 初始化数据库
    * 
    * @throws SQLException
    */
   private static void initDataBase() throws SQLException
   {
      Connection conn = null;
      Statement statement = null;
      try
      {
         // 获得数据库连接
         conn = DriverManager.getConnection("jdbc:h2:h2.db", "test", "123");
         // 创建一张表
         String sql = "CREATE TABLE IF NOT EXISTS USER_INFO (USER_ID VARCHAR(20) PRIMARY KEY, USER_NAME VARCHAR(50))";
         statement = conn.createStatement();
         statement.executeUpdate(sql);
      }
      catch (SQLException e)
      {
         throw e;
      }
      finally
      {
         if (statement != null)
         {
            try
            {
               statement.close();
            }
            catch (SQLException e)
            {
               e.printStackTrace();
            }
         }
         if (conn != null)
         {
            try
            {
               conn.close();
            }
            catch (SQLException e)
            {
               e.printStackTrace();
            }
         }
      }
   }
}

常用数据库驱动类及连接字符串

数据库 驱动类 连接字符串
Oracle oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@[IP]:[PORT]:[SID]
DB2 com.ibm.db2.jdbc.app.DB2Driver jdbc:db2://[IP]:[PORT]/[databaseName]
Sql Server com.microsoft.jdbc.sqlserver.SQLServerDriver jdbc:microsoft:sqlserver://[IP]:[PORT];databaseName=[databaseName]
Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:[IP]:[PORT]/databaseName
MySQL com.mysql.jdbc.Driver jdbc:mysql://[IP]:[PORT]/databaseName

其中[]为需要替换的部分。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
19天前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
34 8
|
4天前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
5天前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
24 6
|
5天前
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
14 4
|
12天前
|
存储 SQL 分布式计算
Java连接阿里云MaxCompute例
要使用Java连接阿里云MaxCompute数据库,首先需在项目中添加MaxCompute JDBC驱动依赖,推荐通过Maven管理。避免在代码中直接写入AccessKey,应使用环境变量或配置文件安全存储。示例代码展示了如何注册驱动、建立连接及执行SQL查询。建议使用RAM用户提升安全性,并根据需要配置时区和公网访问权限。具体步骤和注意事项请参考阿里云官方文档。
|
19天前
|
SQL Java 关系型数据库
探索Java数据库连接的奥秘:JDBC技术全攻略
探索Java数据库连接的奥秘:JDBC技术全攻略
40 8
|
19天前
|
SQL Java 数据库连接
JDBC之旅:从陌生到熟悉的Java数据库连接之路
JDBC之旅:从陌生到熟悉的Java数据库连接之路
20 8
|
19天前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
16 7
|
5天前
|
JavaScript 前端开发 Java
通过JUnit5访问Java静态、私有、保护变量和方法
在《通过Gtest访问C++静态、私有、保护变量和方法》一文中介绍了如何通过Gtest访问C++静态、私有、保护变量和方法,本文介绍如何通过Junit5访问Java静态、私有、保护变量和方法。
12 0
|
13天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
28 0