JDBC连接数据库

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS SQL Server,基础系列 2核4GB
简介:   一、JDBC数据库连接通用数据访问层(JDBCDBManager.java) 代码如下: package com.myhome.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.Result

 

一、JDBC数据库连接通用数据访问层(JDBCDBManager.java)

代码如下:

package com.myhome.dao;

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

/**
 * JDBC数据库连接通用数据访问层
 * */
public class JDBCDBManager {
// private static final String DRIVER_CLASS = "org.gjt.mm.mysql.Driver";
 //mySql驱动类的完全限定名和数据库连接字符串
 String mySqlDriverString="org.gjt.mm.mysql.Driver";
 String mySqlConnString="jdbc:mysql://localhost:3306/blog?user=root&password=root";
 //sqlserver驱动类的完全限定名和数据库连接字符串
 String sqlserverDriverString="com.microsoft.jdbc.sqlserver.SQLServerDriver";
 String sqlserverConnString="jdbc:sqlserver://localhost:1433;DatabaseName=google_snack";

 //oracle驱动类的完全限定名和数据库连接字符串 (localhost为本地主机或ip地址如222.23.162.221)
 String oracleDriverString="oracle.jdbc.driver.OracleDriver";
 String oracleConnString="jdbc:oracle:thin:@localhost:1521:orcl";

 /**
  * 获取JDBC数据库访问连接对象
  * @throws ClassNotFoundException
  * @throws SQLException
  * */
 public Connection getConnection() throws ClassNotFoundException, SQLException{
  
// /*-------------------------mySql---------------------------------------*/
// //加载mySql数据库驱动类加载到内存中
// Class.forName(mySqlDriverString);
// //获取mySql数据库连接,通过驱动程序管理器DriverManager获取连接对象mySqlConn,mySqlConn连接的服务器和数据库信息在连接字符串中
// Connection mySqlConn=DriverManager.getConnection(mySqlConnString);
// //返回mySql连接
// return mySqlConn;
  
// /*------------------------sqlserver----------------------------------------*/
// //加载sqlserver数据库驱动类加载到内存中
// Class.forName(sqlserverDriverString);
// //获取sqlserver数据库连接,通过驱动程序管理器DriverManager获取连接对象sqlserverConn,sqlserverConn连接的服务器和数据库信息在连接字符串中
// Connection sqlserverConn=DriverManager.getConnection(sqlserverConnString,"sa","sa");
// //返回sqlserver连接
// return sqlserverConn;
  
 /*------------------------oracle----------------------------------------*/
 //加载oracle数据库驱动类加载到内存中
 Class.forName(oracleDriverString);
 //获取oracle数据库连接,通过驱动程序管理器DriverManager获取连接对象oracleConn,oracleConn连接的服务器和数据库信息在连接字符串中
 Connection oracleConn=DriverManager.getConnection(oracleConnString,"kekeai","kekeai123");
 //返回oracle连接
 return oracleConn;
 }
 /**
  * 为sql语句占位符参数赋值
  * @throws SQLException
  * */
 public void operateParameters(PreparedStatement pstmt,Object...args) throws SQLException{
  if(args!=null&&args.length>0){
   for (int i = 0; i < args.length; i++) {

    //为sql语句的占位符  ?  赋值从1开始的
    pstmt.setObject(i + 1, args[i]);
   }
  }
 }

 /**
  * 释放数据库连接和操作占用的资源(注意关闭顺序)
  * @throws SQLException
  * */
 public void closeResource(Connection conn,PreparedStatement pstmt,ResultSet rs) throws SQLException{
  //关闭结果集
  if(rs!=null){
   rs.close();
   rs=null;
  }

  //关闭sql载体和执行对象
  if(pstmt!=null){
   pstmt.close();
   pstmt=null;
  }
  //关闭数据库连接对象
  if(conn!=null&&!conn.isClosed()){
   conn.close();
   conn=null;
  }
 }

 /**
  * 数据库数据更新(添加、删除、修改)
  * @throws Exception
  * */
 public int executeUpdate(String sql,Object...args) throws Exception{
  //数据库连接对象
  Connection conn=null;
  //发送sql语句到数据库(载体)并执行sql语句
   /* PreparedStatement可以防止sql注入,因此安全,并且性能更优越
    * Statement对象将sql语句发送到数据库后,数据库要做3件事,如下
    * 1分析语句
    * 2编译
    * 3执行
    * 而PreparedStatement将sql语句发送到数据库后第一次做如上3件事,以后只做第3件事,因此效率更好
    * */
  PreparedStatement pstmt=null;
  Statement stmt=null;

  //更新影响的数据库行数
  int rowCount=0;
  try {

   //获取数据库连接
   conn=getConnection();
   //分析、便宜、执行sql语句
   pstmt=conn.prepareStatement(sql);
   operateParameters(pstmt, args);

   //将sql语句发送到数据库中,并执行,rowCount是影响的行数  >0表示成功 否则表示失败
   rowCount=pstmt.executeUpdate();
  } catch (Exception e) {

   //向控制台打印错误信息
   e.printStackTrace();
   //抛出自定义的异常
   throw new Exception("数据插入失败");
  }finally{

   //释放资源
   closeResource(conn, pstmt, null);
  }

  //返回影响行数
  return rowCount;
 }

 /**
  * 数据数据查询,返回ResultSet
  * 多条记录返回用list集合(在jndi中)
  * @throws Exception
  * */
 public ResultSet executeQuery(String sql,Object ... args) throws Exception{
  Connection conn = null;
  PreparedStatement pstmt = null;
  ResultSet rs = null;

  /*
  rs必须在数据库连通的情况下获取数据。 rs默认情况下,指向表头
  rs调用next()方法,表示向下移动一条记录,返回boolean值,true:有数据,false:没有数据
  rs同一时刻只能指向一条记录 rs下去就回不来
  String sql = "select id,username,age from " + tablename;
  rs只表示结果集中的数据,不能表示表头,表头例如:id,username,age,如果要取表头,需要使用ResultSetMetaData接口
   */
  conn = getConnection();
  pstmt = conn.prepareStatement(sql);
  operateParameters(pstmt, args);
  rs = pstmt.executeQuery();

  // 获取表的架构(即表结构信息,如列名称,列类型)信息,ResultSetMetaData专门获取表架构信息
  ResultSetMetaData rsm = rs.getMetaData();
  System.out.print(rsm.getColumnName(1));
  System.out.print("\t");
  System.out.print(rsm.getColumnName(2));
  System.out.print("\t");
  System.out.print(rsm.getColumnName(3));
  System.out.println();
  while (rs.next()) {
   System.out.print(rs.getString("username") + "\t");
   System.out.print(rs.getString("userpass") + "\t");
   System.out.print(rs.getString(3) + "\t");
   System.out.println("");
  }

  //返回数据库查询结果集(内存中)
  return rs;
 }
}

二、使用junit用例测试JDBCDBManager类

 Junit测试的java类:

 

junit测试类结构:

junit测试类代码:

package com.myhome.test;

import static org.junit.Assert.*;

import java.sql.Connection;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.myhome.dao.JDBCDBManager;

public class JDBCDBManagerTest {
 @BeforeClass
 public static void setUpBeforeClass() throws Exception {}
 @AfterClass
 public static void tearDownAfterClass() throws Exception {}
 @Before
 public void setUp() throws Exception {}
 @After
 public void tearDown() throws Exception {}
 @Test
 public void testExecuteUpdate() throws Exception {
  JDBCDBManager manager=new JDBCDBManager();
  Connection conn=manager.getConnection();
//  String sql="insert into users(username,userpass) values(?,?)";
//  Object [] args=new Object[]{"窗前明月光","地上鞋两双"};
//  manager.executeQuery(sql,args);
  String sql="insert into users(username,userpass) values('淡淡','蛋蛋')";
  manager.executeUpdate(sql);
 }
 @Test
 public void testExecuteQuery() throws Exception {
  JDBCDBManager manager=new JDBCDBManager();
  Connection conn=manager.getConnection();
  String sql="select * from users";
  manager.executeQuery(sql, null);
 }

}

 

 

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
15天前
|
安全 Java 数据库连接
gbase8a JDBC常用特性-Kerberos认证方式连接
JDBC常用特性-Kerberos认证方式连接
|
16天前
|
Java 数据库连接 网络安全
JDBC常用特性-SSH隧道连接
JDBC常用特性-SSH隧道连接
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
282 3
|
1月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
132 68
|
1天前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
29天前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
28天前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
55 3
|
27天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
关系型数据库 MySQL 数据库连接
DBeaver如何连接一个数据库
【10月更文挑战第27天】DBeaver 是一款功能强大的通用数据库管理工具,支持多种主流数据库。本文介绍了使用 DBeaver 连接数据库的基本步骤,包括下载安装、创建新连接、选择数据库类型、配置连接参数、测试连接以及最终连接到数据库。详细的操作指南帮助用户轻松管理和操作数据库。
412 9