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)
blank

相关推荐

  • 错误406(接口报406是什么原因)

    406错误错误提示:根据请求中接收的主动协商头字段,目标资源没有用户代理可接受的当前表示,并且服务器不愿意提供默认表示。出现的原因:1.请求地址的后缀问题不要些成.html不写或写词.json2.@设置了ResponseBody要把对象转换成json格式,但是缺少转换依赖的Jackson包SpringMVC默认依赖Jackson包,需要加一个Jackson包。$.ajax({url:’/topic/delete’,//后缀写词.json或者不写

  • pycharm提示代码功能问题「建议收藏」

    pycharm提示代码功能问题「建议收藏」在使用pycharm写python代码时,对于tensorflow模块,不能显示代码提示内容。在project中设置解释器地址后, 要等待下面列出的package包全部扫描完,显示完当前版本和最新版本完,再点OK按钮。在代码区输入相关类的点后,要稍微等一会,才会出现代码提示的信息。…

  • ES安装教程详解_wampserver安装教程

    ES安装教程详解_wampserver安装教程0.安装前准备 centos7+ java8+ elastic6.2.4+2.在官方网站下载ESwgethttp://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz3.安装JDK(必须JDK1.8+)rpm-ivhjdk-8u181-linux-x64.rpm /*注意:默认安装位置/usr/java/jdk1.8.0_171-amd64*/4.配置环境变量vi

  • Exception in thread “main” AxisFault

    Exception in thread “main” AxisFaultAxisFaultfaultCode:{http://xml.apache.org/axis/}HTTPfaultSubcode:faultString:(400)BadRequestfaultActor:faultNode:faultDetail: {}:returncode:400 {http://xml.apache.org

  • python的赋值功能很强大_python中赋值

    python的赋值功能很强大_python中赋值前言增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i+=1的效率往往要比i=i+1更高一些(这里以+=为例,实际上增强型赋值语句不仅限于此)。所以我们会乐此不

  • 国外那些优秀的 Drupal 教程博客

    国外那些优秀的 Drupal 教程博客使用开源软件的巨大好处之一,就是能够参与到它们强大的交流社区中。作为开源CMS的领军人物,Drupal社区就是很好的例子。随着 Drupal 不断地发展变化,社区里的成员每天也都在进行着各种交流,例如Drupal 的新特性、如何使用现有的功能、怎样能够让这个平台变得更好等等。“分享”是开源的核心精神,因此很多人也会将自己的经验、心得以及各种相关的内容记录到博客中。  如果你想加强对 

发表回复

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

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