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();
				}
		}
	}
	
}

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab中fmincon函数的使用

    matlab中fmincon函数的使用fmincon是用于求解非线性多元函数最小值的matlab函数。其语法格式比较多,参数也是各有各的意思,我就举几个例子,大家可从代码中去体会其使用方法。示例一%%只是大概写个板式,这里的fun2和fun3要自己去定义,这里就不写出来了,前面%有介绍过clcclearA=[321;123;200;030;002]b=[120;80;96;102;40]lb=zero

    2022年4月28日
    129
  • WPF 精修篇 Winform 嵌入WPF控件「建议收藏」

    首先创建WPF控件库这样就有了一个WPF界面在wpf中增加界面等在winform中增加WPFDLL重新生成解决方案在左侧工具栏出现WPF控件拖到窗体效果…

    2022年4月12日
    41
  • idea打包web项目 部署到tomcat_web项目打包成jar包

    idea打包web项目 部署到tomcat_web项目打包成jar包背景:因为普通的web项目无法用maven命令进行打包,所以怎样打成war包发布呢?1.进入项目的结构配置在【ProjectStructure】中选择左侧的【Artifacts】页签,点击中间上面的,选择【WebApplication:Archive】->【Empty】2.添加war包的配置点击+号,选择【DirectoryContent】将项目的classes的文件配…

    2022年10月3日
    2
  • WPF基础五:UI①布局元素WrapPanel[通俗易懂]

    WPF基础五:UI①布局元素WrapPanel[通俗易懂]目录WrapPanelWrapPanel类XAML范例:C#代码WrapPanel按从左到右的顺序位置定位子元素,在包含框的边缘处将内容切换到下一行。后续排序按照从上至下或从右至左的顺序进行,具体取决于Orientation属性的值。WrapPanel包含UIElement对象的集合,这些对象位于Children属性中。WrapPanel的所有子元素都接收ItemWidth与ItemHeight大小相乘的布局分区。WrapPanel类名称…

    2022年7月22日
    12
  • C# 数组截取

    C# 数组截取这段时间常常需要对数据的数据进行截取,以方便解析。原来一直用的Array.ConstrainedCopy();以及 Array.Copy();来进行数组复制截取 先看Array.ConstrainedCopy():其说明如下 publicstaticvoidConstrainedCopy(ArraysourceArray,intsourceIndex,Arraydes…

    2022年6月8日
    153
  • 用C语言来分割字符串

    相关:http://www.cnblogs.com/roucheng/p/cfenge.html

    2021年12月27日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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