JDBC 1 day 简介及常用接口、类介绍

JDBC 1 day 简介及常用接口、类介绍

JBDC简介

JDBC(java Database Connectivity)从物理结构上说,就是java语言访问数据库的一套API应用程序编程接口。从本质上说,就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API使得开发人员可以使用纯java的方式来连接数据库,并进行操作。

 JDBC常用接口、类介绍

JDBC提供对独立于数据库统一的API,用以执行SQL命令。API常用的类、接口如下:

 

1、DriverManager

管理JDBC驱动的服务类,主要通过它获取Connection数据库链接,常用方法如下:

public static synchronized Connection getConnection(String url, String user, String password) throws Exception;

该方法获得url对应的数据库的连接。

 

2、Connection常用数据库操作方法:

Statement createStatement throws SQLException: 该方法返回一个Statement对象。

PreparedStatement prepareStatement(String sql) throws SQLException;该方法返回预编译的Statement对象,

    即将SQL语句提交到数据库进行预编译。

CallableStatement prepareCall(String sql) throws SQLException:该方法返回CallableStatement对象,

    该对象用于存储过程的调用。

上面的三个方法都是返回执行SQL语句的Statement对象,PreparedStatement、CallableStatement的对象是Statement的子类,

只有获得Statement之后才可以执行SQL语句。

 

关于Connection控制事务的方法:

 

Savepoint setSavepoint(): 创建一个保存点

Savepoint setSavepoint(String name):创建一个带有名称的保存点

void setTransactionIsolation(int level):设置事务隔离级别

void rollback():回滚事务

void rollback(Savepoint savepoint):回滚到指定保存点

void setAutoCommit(boolean autoCommit): 关闭自动提交,打开事务

void commit():提交事务

3、Statement

用于执行SQL语句的API接口,该对象可以执行DDL、DCL语句,也可以执行DML语句,

还可以执行SQL查询语句,当执行查询语句是返回结果集,常用方法如下:

ResultSet executeQuery(String sql) throws SQLException:该方法用于执行查询语句,并返回查询结果对应的ResultSet对象,

        该方法只用于查询语句。

int executeUpdate(String sql) throws SQLException:该方法用于执行DML语句,并返回受影响的行数;

        该方法也可以执行DDL,执行DDL返回0;

boolean execute(String sql) throws SQLException:该方法可以执行任何SQL语句,如果执行后第一个结果是ResultSet对象,

        则返回true;如果执行后第一个结果为受影响的行数或没有任何结果,则返回false;

 

4、PreparedStatement

预编译的statement对象,PreparedStatement是Statement的子接口,它允许数据库预编译SQL(通常指带参数SQL)语句,

以后每次只改变SQL命令参数,避免数据库每次都编译SQL语句,这样性能就比较好。而相对于Statement而言,

使用PreparedStatement执行SQL语句时,无需重新传入SQL语句,因为它已经预编译了SQL语句。

但是PreparedStatement需要为编译的SQL语句传入参数值,所以它比了如下方法:

void setXxx(int index, value)根据该方法传入的参数值的类型不同,需要使用不同的方法。

传入的值的类型根据传入的SQL语句参数而定。

 

5、ResultSet

void close() throws SQLException:释放、关闭ResultSet对象

boolean absolute(int row):将结果集移动到第几行,如果row是负数,则移动到倒数第几行。

        如果移动到的记录指针指向一条有效记录,则该方法返回true;

void beforeFisrt(): 将ResultSet的记录指针定位到首行之前,这是ResultSet结果集记录指针的

        初始状态:记录指针的起始位置位于第一行之前。

boolean first():将ResultSet的记录指针定位到首行。如果移动后的记录指针指向一条有效记录,则该方法返回true。

boolean previous():将ResultSet的记录指针定位到上一行,如果移动后的记录指针指向一条有效记录,则该方法返回true。

boolean next():将ResultSet的记录指针定位到下一行。如果移动后的记录指针指向一条有效记录,则返回true。

boolean last():将ResultSet的记录指针定位到最后一行。如果移动后的记录指针指向一条有效记录,则返回true。

void afterLast():将ResultSet的记录指针定位到最后一行之后。

注意:在JDK1.4以前只支持next移动,且每次移动一个位置。到JDK1.5就可以随意定位。

jdbc的编程步骤

进行jdbc编程步骤大致如下:

1、加载数据库驱动

Class.forName(driverClass)

上面的dirverClass就是数据库驱动类所对应的类路径字符串,根据不同数据库厂商提供的驱动也不同。

 

进行jdbc编程步骤大致如下:

1、加载数据库驱动

Class.forName(driverClass)

上面的dirverClass就是数据库驱动类所对应的类路径字符串,根据不同数据库厂商提供的驱动也不同。

 

2、通过DriverManager获取数据库的链接

DriverManager.getConnection(String url, Stirng user, String pass)

当使用DriverManager来获取链接,需要传入三个参数:分别是数据量的url、用户名、密码。

 

3、通过Connection对象创建Statement对象,Connection创建Statement的方法如下三个:

createStatement()创建基本的Statement对象。

prepareStatement(String sql):根据传入的sql语句创建预编译的Statement对象。

prepareCall(String sql):根据传入的sql语句创建CallableStatement对象

 

4、Statement执行SQL语句,Statement有三大方法来执行SQL语句:

execute:可以执行任何SQL语句,单比较麻烦

executeUpdate:可以执行DML、DDL语句。执行DML返回受影响的SQL语句行数,执行DDL返回0;

executeQuery:只能执行查询语句,执行后返回代表查询结果的ResultSet对象。

 

5、操作结果集,针对ResultSet

主要移动指针和获得值

next、previous、first、last、beforeFrist、afterLast、absolute等移动指针的方法。

getXxx获得移动指针指向行,特定列、索引的值。使用列名作为获取值的参数可读性好、使用索引作为获取参数性能好。

 JDBC 1 day 简介及常用接口、类介绍

 

package jdbc;

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




public class TestStatement {
	public static void main(String[] args) {
		//1 加载驱动
			 Connection conn = null;
			 Statement stm = null;
			 ResultSet rs = null;
			try {
				Class.forName("com.mysql.jdbc.Driver");
				//2 获取连接
				 String url = "jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf-8";
		    	 String user = "root";
		    	 String password = "root123"; 
		    //ctrl + 2
		     conn = DriverManager.getConnection(url, user, password); 
				//3  创建statement的对象
		     stm = conn.createStatement();
				//4  执行sql语句
		     String sql = "select * from test";
		     rs = stm.executeQuery(sql);
		     
		     
		     
		     /*操作数据库 statement.executeUpdate(增删改sql)*/
			 //String sql = "insert into test (ename,job,deptno) values('小d弟','clerk',20)";
			 //String sql = "delete from test where ename='大哥'";  
//		     String sql = "update test set job ='dagege' where ename='小d弟'";
//		     
//		     int lines = stm.executeUpdate(sql);
//			 System.out.println("影响行数"+lines);
			 //5 处理结果集
		     while(rs.next()){
		    	 int empno = rs.getInt(1);
		    	 String ename = rs.getString(2);
		    	 String job = rs.getString(3);
		    	 int mgr = rs.getInt(4);
		    	 Date hiredate = rs.getDate(5);
		    	 double sal = rs.getDouble(6);
		    	 double comm = rs.getDouble(7);
		    	 int deptno = rs.getInt(8);
		    	 System.out.println(empno + " " + ename+" "+job+" "+mgr+" "+hiredate+" "+sal+" "+comm+" "+deptno);
		    	 
		     }		     		   		 
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				//6. 关闭连接
				try {
					rs.close();
					stm.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}
	
}

 

 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114785.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • .NET/C#发起GET和POST请求的几种方法

    .NET/C#发起GET和POST请求的几种方法

  • bootstrap table表格分页样式问题[通俗易懂]

    bootstrap table表格分页样式问题[通俗易懂]bootstraptable表格分页样式问题今天项目里用到bootstrap做列表,数据展示没问题但是分页样式一直出不来,找了半天发现是因为没有引入css文件的问题<head><metacharset="UTF-8"><title>Titl

  • 102 二叉树层序遍历

    102 二叉树层序遍历层序遍历,每次层的输出是是一个一维数组,整个二叉树的输出结果是二维数组BFS遍历,依托于队列结构,每次在根节点出栈的时候,将其值加在结果列表中,然后将他的左右孩子节点入队列。层序遍历相对于BFS,需要知道每一层有多少个节点。因此,我们需要稍微修改一下代码,在每一层遍历开始前,先记录队列中的结点数量nn(也就是这一层的结点数量),然后一口气处理完这一层的n个结点。classSolution:deflevelOrder(self,root:TreeNode):.

  • 移动硬盘提示格式化解决的方法,未正确删除导致不能读取文件提示格式化解决方式

    移动硬盘提示格式化解决的方法,未正确删除导致不能读取文件提示格式化解决方式

    2021年12月14日
  • 归并排序算法详细图解_归并排序算法详解

    归并排序算法详细图解_归并排序算法详解一、什么是归并排序1.概念归并排序(Mergesort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的2.算法原理这是一个无序数列:4、5、8、1、7、2、6、3,我们要将它按从小到大排序。按照归并排序的思想,我们要把序列逐层进行拆分序列逐层拆分如下然后从下往上逐层合并,首先对第一层序列1(只包含元素4)和序列2(只包含元素5)进行合并创建一个大序列,序列长度为两个小序列长度

    2022年10月20日
  • 学习笔记 – Unix命令大全

    学习笔记 – Unix命令大全Unix命令大全

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号