JDBC 配置

2023-05-16

JDBC
Java DataBase Connectivity

规范

JDBC是一套协议(规范)
是java开发人员和数据库厂商达成的协议
是由sun定义一组接口
由数据库厂商来实现
并规定了java开发人员访问数据库所使用的方法

JDBC的实现是由数据库厂商提供,以驱动程序形式提供

作用
	连接数据库
	操作数据库
	处理结果集
	使用事务

特点
	JDBC是java唯一的统一的访问数据库的方法
	JDBC是统一的访问接口,可以访问任何提供了驱动的数据库


驱动:JDBC的实现代码
对具体访问数据库的代码进行封装
对外提供一组统一的接口

JDBC的发展
1.JDBC+ODBC 桥驱动
2.JDBC+本地驱动
3.纯java网络服务器驱动
4.纯java驱动

工厂链模式

java.sql包和javax.sql包
DriverManager 类 驱动管理器,管理驱动的类,创建连接,他是连接对象的工厂
Driver 接口 驱动
Connection 接口 数据库的连接
作用
跟数据库做连接
根据驱动产生不同的连接
事务处理
数据库操作对象的工厂
Statement 接口以及子接口 数据库操作对象
作用
发送sql语句
ResultSet 接口 结果集
作用
数据库返回的结果封装成结果集对象
处理结果集

编码
1.注册驱动
2.建立连接
3.获得操作对象
4.发送sql
5.处理结果集
6.释放资源

注册驱动
方式一:
Driver driver=new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);

方式二:
	Class.forName(driverClassName);

方式三:
	java -Djdbc.drivers=驱动名

url
mysql
jdbc:mysql://ip:port/库名

Oracle
	jdbc:oracle:thin:@ip:port:sid

SQLServer
	jdbc:microsoft:sqlserver://ip:port

驱动
mysql
com.mysql.jdbc.Driver

Oracle
	oracle.jdbc.driver.OracleDriver

预编译的操作对象
PreparedStatement

jdbc首先会将sql语句交给数据库编译
执行时只是传递参数,不会改变sql语句的流程

不要使用Statement
1.注册驱动             (mysql 驱动类)
方式一:

Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
方式二:

private static String driverCalssName="com.mysql.jdbc.Driver";
class.forName(driverCalssName);
//导致类加载    Driver驱动的静态代码块会执行,注册驱动

方式三:

java -Djdbc.drivers=驱动名
2.建立链接
Connection con =Drivermanager.getConnection(url,username,password);
服务器的位置                             
String url="jdbc:mysql://127.0.0.1:3306/jdbc?useUnicode=true;D"  ;
String username="root";
String password="123";
                                端口号
//url mysql     jdbc:mysql://ip:port/库名
    //Oracle    jdbc:oracle:thin:@ip:port:sid
//?传参 &
3.创建数据库操作对象
Statement stat =con.createStatement();
//陈述表述
String sql= new StringBuffer()
    .append("create table t_student(")
    .append("id int primary key auto_increment,")
    .append("no varchar(10),")
    .append("name varchar(10),")
    .append("sex boolean")
    .append(")")
    .toString();
4.释放操作对象和连接
stat.execute(sql);
//增删改查
stat.executeUpdate();
stat.close();
con.close();
5.结果集 Query 查询
java中JDBC下表从1开始,其他从0开始
ResultSet rs=null;

String sql=new StringBuffer()
    
rs=stat.executeQuery(sql);

if(rs.next()) 查询一条

while(rs.next()) 查询多条
//下一行是否有记录  把记录内容存到rs里   自动往后移动
{
    int id=rs.getInt(1"id");//可以写表头,传的是表头
    String no =rs.getString(2);
}    

//1、.next()方法的作用:指针指向下一条记录,有记录(有值)返回true并把记录内容存入到对应的对象中,也就是obj.next()的obj中。如果没有返回false。

//2、.next()方法的应用:一般和ResultSet对象和while循环一起使用,去迭代结果集,并在循环中调用getXXX(intfieldIndex)/getXXX(String columnName)方法获取字段值。

//过程:ResultSet对象具有指向其当前数据行的指针。开始,指针被置于第一行。.next()方法将指针移动到下一行,然后while循环迭代遍历ResultSet对象。

//while (obj.next()) {

//}

预编译的操作对象
Preparedstatement
准备好的操作对象,先将你的sql语句到数据库编译。不会换sql语句。
不要使用 statement
String sql=new StringBuffer()
    .append("(no,name,sex)")
    .append(" (?,?,?) ")
ps=con.prepareStatement(sql)
    ps.setString(1,student.getNo())
    ps.setString(2,student.getName())
    
    
    ps.executeUpdate();
保存数据的类型序列化 Serializable
对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列化机制允许把内存 中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将 这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流(无论是从磁盘中获取的,还 是通过网络获取的),都可以将这种二进制流恢复成原来的Java对象。
序列化的含义和意义 序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网 络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化 (Deserialize)则指从IO流中恢复该Java对象如果需要让某个对象支持序列化机制,则必须让它的类是 可序列化的(serializable)。 
为了让某个类是可序列化的,该类必须实现如下两个接口之一: Serializable(常用) ExternalizableJava 很多类已经实现了Serializable,该接口是一个标记接口,实现该接口无须实现任何方法,它只是表明该类的实例是可序列化的。 
所有可能在网络上传输的对象的类都应该是可序列化的,否则程序将会出现异常。
public 
    
封装JDBC
JdbcUtil
1.将链接性息写入配置文件,读配置文件
2.jdbc操作第一步,注册驱动,只注册一次
3.提供获得Connection的方法,并做了异常转换
4.提供释放资源的方法

util配置文件

连接不能写成属性会被大家共享

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcUtil {
	private static Properties config;
	
	static{
		try {
			config=new Properties();
			config.load(JdbcUtil.class
								.getClassLoader()
								.getResourceAsStream("dataSource.properties"));
			
			Class.forName(config.getProperty("driverClassName"));
		} catch (Exception e) {
			e.printStackTrace();
			//静态代码快抛出异常
			throw new ExceptionInInitializerError("JdbcUtil初始化失败");
		}
	}
	
	public static Connection getConnection(){
		Connection con=null;
		try {
			con=DriverManager.getConnection(config.getProperty("url"),
											config.getProperty("username"),
											config.getProperty("password"));
		} catch (Exception e) {
			throw new DataAccessException("数据访问失败",e);
		}
		return con;
	}

	
	public static void close(Connection con,PreparedStatement ps,ResultSet rs){
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (con != null) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
    }	
	
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC 配置 的相关文章

  • 未由 SQLite JDBC 驱动程序实现

    我已经使用以下命令成功创建了 SQLite 数据库的 ColdFusion 数据源sqlitejdbc v056 jar http code google com p sqlitebot downloads detail name sqli
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 通过 JDBC 调用 Sybase 存储过程时结果集为空

    我正在调用一个通过 JDBC 返回多个结果集的 Sybase 存储过程 我需要获取一个特定的结果集 其中有一列名为 结果 这是我的代码 CallableStatement cs conn prepareCall sqlCall cs reg
  • Oracle 更新/插入卡住、DB CPU 为 100%、并发度高、来自客户端的 SQL*Net 等待消息

    我们有一个 JavaEE 应用程序在 Weblogic 上针对 Oracle 11g DB 运行 使用瘦 JDBC 驱动程序 最近 我们在生产中发生了一系列事件 其中某个表的更新和插入被卡住或花费的时间比正常情况长得多 而且没有明显的原因
  • 什么可能导致输出参数访问时出现 SQL Server JDBC 错误“未为参数号 0 设置值”?

    我有一些访问 SQL Server 2005 的 Java 代码 如下所示 CallableStatement cstmt Set input parameters cstmt registerOutParameter 11 Types I
  • JDBC set_approle

    我正在尝试使用prepareCall 通过 JDBC 连接设置应用程序角色 它似乎工作正常 即语法方面 但 SQL Server 2008 返回此错误 Application roles can only be activated at t
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • Kafka JDBC Sink Connector,批量插入值

    我每秒收到很多消息 通过 http 协议 50000 100000 并希望将它们保存到 PostgreSql 我决定使用 Kafka JDBC Sink 来实现此目的 消息以一条记录保存到数据库 而不是批量保存 我想在 PostgreSQL
  • 将 1GB 文件的内容流式传输到单列下的 sqlite 表

    下面的实现给出了具有 4 GB 堆空间的 1 GB 大小的文件的内存不足错误 Files lines 将返回一个流 但在运行 Collectors joining 时会出现堆错误 我们可以使用 jooq 和 jdbc 保留原始行分隔符来流式
  • com.mysql.jdbc.Driver 的类未找到异常不是类路径问题

    我已经为此工作了几个星期 但现在我只是在原地踏步 我收到运行时错误 在获取连接 com mysql jdbc Driver 时 在 class 中未找到类异常 连接函数如下 return a MySQL connection to the
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • 如何使用 SparkR 1.6.0 写入 JDBC 源?

    使用 SparkR 1 6 0 我可以使用以下代码从 JDBC 源读取数据 jdbc url lt jdbc mysql localhost 3306 dashboard user
  • 使用 TLS 证书 JDBC 连接到 Oracle 数据库

    我正在尝试用 Java 编写一个连接类来使用 JDBC 驱动程序连接到 Oracle 数据库 但我想保护用于连接到 Oracle 数据库的参数 例如 jdbcurl 用户名 密码 我必须使用 TLS 证书概念来连接到 Java 中的 Ora
  • 正确使用 JDBC 连接池 (Glassfish)

    我需要在 Java Web 服务中作为会话 bean 实现数据库连接 但我不确定我这样做是否正确 我创建了一个类 public final class SQLUtils private static DataSource m ds null
  • JDBC 和多线程

    我正在尝试使用多线程方法运行一些查询 但是我认为我做错了什么 因为我的程序需要大约五分钟来运行一个简单的选择语句 例如 SELECT FROM TABLE WHERE ID 123 我的实现如下 我使用一个连接对象 在我的运行方法中 pub
  • 尝试使用 OSX 使用 schemacrawler 连接到 sqlite db - 为什么它要求用户?

    结论见底部 我正在尝试使用 schemacrawler 来绘制 sqlite 数据库的图表 我的设置 OSX 10 8 SchemaCrawler 10 5 下载自Here http sourceforge net projects sch
  • JavaPreparedStatementUTF-8字符问题

    我有一份准备好的声明 PreparedStatement st 在我的代码中 我尝试使用 st setString 方法 st setString 1 userName userName 的值为 ak a setString 方法将 ak
  • 基础知识 - Hibernate / JDBC 连接池问题故障排除

    Hibernate 对于从底层连接池获取的数据库连接的责任是什么 它是否在使用连接之前测试连接是否已关闭 如果是的话 从池中获取另一个连接 我在下面包含了错误和确认信息 任何关于我可以从哪里开始解决这个问题的想法都会非常有帮助 以及有关我们
  • JDBC 插入错误

    我正在尝试使用 jdbc 将一些数据插入到我的数据库中 我使用了正确的表 数据库名称和参数 一切都经过检查 Code public static void main String args throws IOException ClassN
  • JTable 中的结果集

    如何在 JTable 中显示结果集 我正在使用这个代码 String record new String ColCount for i 0 i

随机推荐

  • LeetCode621:任务调度器

    要求 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表 其中每个字母表示一种不同种类的任务 任务可以以任意顺序执行 xff0c 并且每个任务都可以在 1 个单位时间内执行完 在任何一个单位时间 xff0c CPU 可以完成
  • LeetCode647:回文子串

    要求 给你一个字符串 s xff0c 请你统计并返回这个字符串中 回文子串 的数目 回文字符串 是正着读和倒过来读一样的字符串 子字符串 是字符串中的由连续字符组成的一个序列 具有不同开始位置或结束位置的子串 xff0c 即使是由相同的字符
  • LeetCode739:每日温度

    要求 给定一个整数数组 temperatures xff0c 表示每天的温度 xff0c 返回一个数组 answer xff0c 其中 answer i 是指对于第 i 天 xff0c 下一个更高温度出现在几天后 如果气温在这之后都不会升高
  • 八大排序算法

    介绍 排序也称排序算法 Sort Algorithm xff0c 排序是将一组数据 xff0c 依指定的顺序进行排列的过程 排序分类 1 内部排序 指将需要处理的所有数据都加载到内部存储器 内存 中进行排序 2 外部排序法 数据量过大 xf
  • 时间复杂度和空间复杂度详解及排序算法复杂度

    时间复杂度 度量一个程序 算法 执行时间的两种方法 1 事前估算法 通过分析某个算法的时间复杂度来判断哪个算法更优 2 事后统计法 这种方法可行 xff0c 但是有两个问题 xff1a 一是要想对设计的算法的运行性能进行评测 xff0c 需
  • Java反编译工具JAD的安装与简单使用

    jad介绍 jad 是一个使用非常广泛的 Java 反编译工具 可以将java编译后的class文件反编译成对应的java文件 下载地址 JAD下载地址 xff0c 点击跳转https varaneckas com jad 按照自己的需求
  • python Counter() 函数

    目录 1 以统计列表中的词频为例 2 寻找出现次数最多的 k 个数 刷 leetcode 时发现了可以很方便地统计词频的 Counter 函数 xff0c 有了这个函数就不用手动的使用 for 循环来手动统计词频啦 xff01 Counte
  • C++11 新特性简介

    1 auto auto是旧关键字 xff0c 在C 43 43 11之前 xff0c auto用来声明自动变量 xff0c 表明变量存储在栈 xff0c 很少使用 在C 43 43 11中被赋予了新的含义和作用 xff0c 用于类型推断 a
  • Java反射(Reflex)机制

    反射概述 Reflection 反射 是Java被视为动态语言的关键 xff0c 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息 xff0c 并能直接操作任意对象的内部属性及方法 加载完类之后 xff0c 在
  • 偏航角、俯仰角、滚动角

    偏航角 俯仰角 滚动角 在姿态估计中 xff0c 常常会提到三个概念 xff0c 就是偏航角 俯仰角和滚动角 姿态估计是物体在三维空间内方向的表征 通常描述物体姿态以大地作为参考系 xff08 标准坐标系 xff09 将世界坐标系 xff0
  • 定时器与计数器的区别

    曾经我在北方工业大学复试的时候 xff0c 有个老师问了我个问题 他说同学你好 xff0c 我看你前面一直都在说深度学习的问题 xff0c 请问你对单片机了解吗 xff1f xff0c 请问定时器与计数器的区别是什么 xff1f 我告诉他
  • 编译make px4_fmu-v2_default upload时,报错ERROR Board can accept larger flash images (2080768 bytes)

    编译make px4 fmu v2 default upload时 xff0c 报错ERROR Board can accept larger flash images 2080768 bytes than board config 103
  • vue中实现axios封装

    vue中实现axios封装 为什么要进行axios封装vue项目安装axios封装前的get和post请求封装后的get和post请求 为什么要进行axios封装 实际开发过程中可能有几种环境 xff0c 开发环境 xff0c 测试环境 x
  • 项目实训—场景划分(一)

    1 什么是场景 xff08 Scene xff09 场景作为电影讲故事的关键单元 xff0c 包含了演员的复杂活动及其在物理位置上的互动 识别场景的组成和语义是视觉理解复杂长视频 xff08 如电影 电视剧 娱乐节目和综艺节目 xff09
  • 手把手教你FreeRTOS源码解析(一)——内存管理

    FreeRTOS中一共有5种内存分配的方法 xff0c 分别在文件heap 1 c heap 2 c heap 3 c heap 4 c heap 5 c种 虽然标准C库中的 malloc 和 free 也可以实现动态内存管理 xff0c
  • 手把手教你FreeRTOS源码详解(二)——任务管理

    FreeRTOS源码解析集合 xff08 全网最详细 xff09 手把手教你FreeRTOS源码解析 xff08 一 xff09 内存管理 手把手教你FreeRTOS源码详解 xff08 二 xff09 任务管理 手把手教你FreeRTOS
  • 手把手教你FreeRTOS源码详解(三)——队列

    FreeRTOS源码解析集合 xff08 全网最详细 xff09 手把手教你FreeRTOS源码解析 xff08 一 xff09 内存管理 手把手教你FreeRTOS源码详解 xff08 二 xff09 任务管理 手把手教你FreeRTOS
  • 手把手教你FreeRTOS源码详解(四)——信号量、互斥量、递归互斥量

    FreeRTOS源码解析集合 xff08 全网最详细 xff09 手把手教你FreeRTOS源码解析 xff08 一 xff09 内存管理 手把手教你FreeRTOS源码详解 xff08 二 xff09 任务管理 手把手教你FreeRTOS
  • python 随机数 random 库的使用总结

    目录 1 random 库中的常用随机数生成函数 2 一些用法举例 3 随机数种子 seed a 的理解与使用 random 库的主要目的就是生成随机数 1 random 库中的常用随机数生成函数 from random import 1
  • JDBC 配置

    JDBC Java DataBase Connectivity 规范 JDBC是一套协议 xff08 规范 xff09 是java开发人员和数据库厂商达成的协议 是由sun定义一组接口 由数据库厂商来实现 并规定了java开发人员访问数据库