JDBC基础

一、JDBC与持久化

持久化(Persistence),是将数据保存到可永久保存的存储设备中。JDBC就是一种持久化机制,文件IO也是一种持久化机制

1.1、JDBC简介

DBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种数据库提供统一访问,它由一组用Java语言编写的类和接口组成

1.2、JDBC的作用

JDBC可以做三件事:

  1. 与数据库建立连接;
  2. 将Java中拼写的SQL语句发送到数据库中执行;
  3. 处理执行结果。

二、JDBC API

2.1、JDBC API简介

Java程序访问数据库,使用JDBC提供的一套标准API,这套API主要是接口

java连接数据库,配置Oracle的方法:

E:\databases\Oracle\app\oracle\product\11.2.0\server\jdbc\lib,复制该目录下的ojdbc6.jar文件到Java项目中与src平级的lib文件夹中

java提供了以下接口和类来支持和数据库之间的操作:

类或接口作用
java.sql.DriverManager表示数据库驱动包的管理对象
java.sql.Connection接口表示数据库的连接对象
java.sql.Statement接口表示执行sql语句的对象
java.sql.PreparedStatement接口java.sql.Statement的子接口,表示sql预编译对象
java.sql.ResultSet接口表示从数据库查询返回的结果数据

JDBC在运行时的大致步骤如下图所示,执行的顺序如下:

  1. DriverManager类驱动数据库;
  2. Connection接口负责将Java程序和数据库建立连接;
  3. Statement接口将SQL语句发送到数据库中;
  4. ResultSet接口处理数据库返回的结果集。

2.2、DriverManager类

DriverManager管理一组 JDBC 驱动程序的基本服务。可以通过该管理类来建立并获取和指定数据库之间的连接。

返回值方法名作用
ConnectiongetConnection(String url, String user, String password)使用账号user和密码password,建立到指定数据库url的连接,连接成功后返回新的数据库连接
ConnectiongetConnection(String url)建立并获取到指定url数据库的连接
  • 数据库连接字符串

    DriverManager类在加载数据库驱动时,需要指明url,这里的url通常称作数据库连接字符串。数据库连接字符串用于确定连接协议、连接的数据库服务器、端口号、数据库名称及其连接参数。

数据库连接字符串,其格式如下:

  • 主协议:子协议://数据库服务器:端口号/数据库名称?连接参数
    
  • 实例: jdbc:mysql://localhost:3306/company_info?user=root&password=root
    

2.3、Connection接口

Connection接口的作用让Java程序与数据库之间建立连接。只有在数据库连接后,才能将SQL语句发送到数据库中执行。Connection接口常用方法如下表:

返回值方法名作用
StatementcreateStatement()创建一个 Statement 对象来将 SQL 语句发送到数据库
PreparedStatementprepareStatement(String sql)创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
PreparedStatementprepareStatement(String sql, int autoGeneratedKeys)创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键
voidsetAutoCommit(Boolean autoCommit)将此连接的自动提交模式设置为给定状态。
voidcommit()使所有上一次提交/回滚后进行的更改成为持久更改,并释放此Connection对象当前持有的所有数据库锁。
voidrollback()取消在当前事务中进行的所有更改,并释放此Connection对象当前持有的所有数据库锁
booleanisClosed()查询此Connection对象是否已经被关闭。
voidclose()立即释放此Connection对象的数据库和 JDBC 资源,而不是等待它们被自动释放。

2.4、Statement接口

返回值方法名作用
booleanexecute(String sql)执行给定的 SQL 语句,该语句可能返回多个结果。
booleanexecute(String sql, int autoGeneratedKeys)执行给定的 SQL 语句(该语句可能返回多个结果),并通知驱动程序所有自动生成的键都可用于获取。
intexecuteUpdate(String sql)执行给定 SQL 语句,该语句可能为 INSERTUPDATEDELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
intexecuteUpdate(String sql, int autoGeneratedKeys)执行给定的 SQL 语句,并用给定标志通知驱动程序由此 Statement 生成的自动生成键是否可用于获取。
ResultSetexecuteQuery(String sql)执行给定的 SQL 语句,该语句返回单个ResultSet对象。
booleanisClosed()获取是否已关闭了此Statement对象。
voidclose()立即释放此Statement对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。

2.5、PreparedStatement接口

返回值方法名作用
booleanexecute()在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句
voidsetObject(int parameterIndex, Object x)使用给定对象设置指定参数的值
intexecuteUpdate()该语句必须是一个 SQL 数据操作语言(Data Manipulation LanguageDML)语句,比如 INSERTUPDATEDELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。
ResultSetexecuteQuery()在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象

2.6、ResultSet接口

返回值方法名作用
booleannext()将光标从当前位置向前移一行
ObjectgetObject(int columnIndex)以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值
ObjectgetObject(String columnLabel)以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值
booleanisClosed()获取此 ResultSet 对象是否已关闭
voidclose()立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作

2.7、ResultSetMetaData接口

返回值方法名作用
StringgetCatalogName(int column)获取指定列的表目录名称
StringgetColumnClassName(int column)如果调用方法 Resultset. getobiect从列中获取值,则返回构造其实例的Java类的完全限定名称
intgetColumnCount()返回此 Resultset对象中的列数
intgetColumnDisplaySize(int column)指示指定列的最大标准宽度,以字符为单位。
StringgetColumnLabel(int column)获取用于打印输出和显示的指定列的建议标题
StringgetColumnName(int column)获取指定列的名称
intgetColumnType(int column)获取指定列的SQL类型
StringgetColumnTypeName(int column)获取指定列的数据库特定的类型名称
intgetPrecision(int column)获取指定列的指定列宽
intgetScale(int column)获取指定列的小数点右边的位数
StringgetSchemaName(int column)获取指定列的表模式
StringgetTableName(int column)获取指定列的名称
booleanisAutoincrement(int column)指示是否自动为指定列进行编号
booleanisCaseSensitive(int column)指示列的大小写是否有关系
booleanisCurrency(int column)指示指定的列是否是一个哈希代码值
booleanisDefinitelyWritable(int column)指示在指定的列上进行写操作是否明确可以获得成功。
intisNullable(int column)指示指定列中的值是否可以为null
booleanisReadOnly(int column)指示指定的列是否明确不可写入
booleanisSearchable(int column)指示是否可以在 where子句中使用指定的列
booleanisSigned(int column)指示指定列中的值是否带正负号
booleanisWritable(int column)指示在指定的列上进行写操作是否可以获得成功

Oracle

监听配置文件目录:oracle\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora

java连接oracle配置文件目录:oracle\app\oracle\product\11.2.0\server\jdbc\lib

  • 先将配置文件导入项目文件夹中

jdbc:oracle:thin:@IP地址:1521(端口号):XE(oracle数据库版本)",“用户名”,“用户密码”

MySQL

jdbc:mysql://127.0.0.1:3306/kfm(数据库名)?serverTimezone=UTC

  • JDBC操作数据库步骤:
    • 加载数据库驱动
    • 连接数据库
    • 创建Statement对象
    • 执行SQL语句
    • 处理执行结果
    • 释放数据库资源(关闭数据库)

三、使用Statement

  • 对数据库中数据的增删改只需改变对应的sql语句即可
//加载数据库驱动
Class.forName("oracle.jdbc.OracleDriver");
//连接数据库("jdbc:oracle:thin:@IP地址:1521(端口号):XE(oracle数据库版本)","用户名","用户密码")
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger");
//创建statement对象
Statement state=conn.createStatement();
//执行sql'语句
String sql="insert into emp values(8000,'张三','MANAGER',7521,to_date('2000-01-05','yyyy-mm-                            d'),1500,null,10)";
int rows=state.executeUpdate(sql);
//处理执行结果
System.out.println(rows+"行数据被改变");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值