JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】

什么是JDBC

JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API

为什么我们要用JDBC

  • 市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,定义了JDBC API【接口】
  • sun公司只是提供了JDBC API【接口】,数据库厂商负责实现。
  • 对于我们来说,操作数据库都是在JDBC API【接口】上,使用不同的数据库,只要用数据库厂商提供的数据库驱动程序即可
  • 这大大简化了我们的学习成本

简单操作JDBC

步骤:

  1. 导入MySQL或者Oracle驱动包
  2. 装载数据库驱动程序
  3. 获取到与数据库连接
  4. 获取可以执行SQL语句的对象
  5. 执行SQL语句
  6. 关闭连接
Connection connection = null;Statement statement = null;ResultSet resultSet = null;try {/** 加载驱动有两种方式** 1:会导致驱动会注册两次,过度依赖于mysql的api,脱离的mysql的开发包,程序则无法编译* 2:驱动只会加载一次,不需要依赖具体的驱动,灵活性高** 我们一般都是使用第二种方式* *///1.//DriverManager.registerDriver(new com.mysql.jdbc.Driver());//2.Class.forName("com.mysql.jdbc.Driver");//获取与数据库连接的对象-Connetcionconnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");//获取执行sql语句的statement对象statement = connection.createStatement();//执行sql语句,拿到结果集resultSet = statement.executeQuery("SELECT * FROM users");//遍历结果集,得到数据while (resultSet.next()) {System.out.println(resultSet.getString(1));System.out.println(resultSet.getString(2));}} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} finally {/** 关闭资源,后调用的先关闭** 关闭之前,要判断对象是否存在* */if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}

上面我们已经简单使用JDBC去查询数据库的数据了,接下来我们去了解一下上面代码用到的对象


Connection对象

客户端与数据库所有的交互都是通过Connection来完成的。

常用的方法:


//创建向数据库发送sql的statement对象。createcreateStatement()//创建向数据库发送预编译sql的PrepareSatement对象。prepareStatement(sql) //创建执行存储过程的callableStatement对象prepareCall(sql)//设置事务自动提交setAutoCommit(boolean autoCommit)//提交事务commit()//回滚事务rollback()

Statement对象

Statement对象用于向数据库发送Sql语句,对数据库的增删改查都可以通过此对象发送sql语句完成。

Statement对象的常用方法:


//查询executeQuery(String sql)//增删改executeUpdate(String sql)//任意sql语句都可以,但是目标不明确,很少用execute(String sql)//把多条的sql语句放进同一个批处理中addBatch(String sql)//向数据库发送一批sql语句执行executeBatch()

ResultSet对象

ResultSet对象代表Sql语句的执行结果,当Statement对象执行executeQuery()时,会返回一个ResultSet对象

ResultSet对象维护了一个数据行的游标【简单理解成指针】,调用ResultSet.next()方法,可以让游标指向具体的数据行,进行获取该行的数据

常用方法:


//获取任意类型的数据getObject(String columnName)//获取指定类型的数据【各种类型,查看API】getString(String columnName)//对结果集进行滚动查看的方法next()Previous()absolute(int row)beforeFirst()afterLast()

写一个简单工具类

通过上面的理解,我们已经能够使用JDBC对数据库的数据进行增删改查了,我们发现,无论增删改查都需要连接数据库,关闭资源,所以我们把连接数据库,释放资源的操作抽取到一个工具类

/** 连接数据库的driver,url,username,password通过配置文件来配置,可以增加灵活性* 当我们需要切换数据库的时候,只需要在配置文件中改以上的信息即可** */private static String  driver = null;private static String  url = null;private static String  username = null;private static String password = null;static {try {//获取配置文件的读入流InputStream inputStream = UtilsDemo.class.getClassLoader().getResourceAsStream("db.properties");Properties properties = new Properties();properties.load(inputStream);//获取配置文件的信息driver = properties.getProperty("driver");url = properties.getProperty("url");username = properties.getProperty("username");password = properties.getProperty("password");//加载驱动类Class.forName(driver);} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url,username,password);}public static void release(Connection connection, Statement statement, ResultSet resultSet) {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章的同学,可以关注微信公众号:Java3y


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql binlog空间维护

默认情况下,mysql主从同步的binlog日志,会一直保存。 对于如果已同步好的数据,这显然比较浪费资源。 且如果生产环境磁盘太小,随时还会爆掉,所以很有必要作好binlog的空间维护。 以下操作,直接在master上操…

UVA 10604 Chemical Reaction

UVA_10604 一开始看错题了,以为化学物质最多会有10个,所以定义不了10维的去跑,便用了类似状态压缩的方式,把化学物质的状态压缩成一个整数,然后用哈希表建立一个索引,再用记忆化搜素去处理就可以了。 之所以…

一键发布到Maven Central的方法

当我向Maven Central发布Java开源库jcabi-aspects的新版本时,我花费了30秒钟的时间。 甚至更少。 最近,我发布了0.17.2版本。 您可以在Github第80期中看到所有情况: 如您所见,我向Rultor发出了命令,它向Maven Central…

vue组件详解(一)——组件与复用

一、什么是组件 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。 二、组件用法 组件需要注册后才可以使用,注册有全局注册和局部注册两种方式。 2.1 全局注册后,任何V ue 实例都可以使用。如&am…

fatal error LNK1120: 1 unresolved externals

出现这个错误可能原因很多,我的问题是来自于把template写在了cpp文件中template 有弊端 就是 他的实现部分必须和声明部分在一起 你声明在一个头文件 定义在另一个头文件 编译器好笨!!!!!!!!!,它根本就找不到 ///只要你把实现部分拷贝到你声明的头文件,就没有错…

sed命令学习

sed编辑器,处理文本过程如下: sed把当前处理的行保存在一个临时缓冲区中,然后处理缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后下一行读入,处理和显示。处理完输入…

在Spring Boot应用程序中测试邮件代码

在构建Spring Boot应用程序时,您可能会需要添加邮件配置。 实际上,在Spring Boot中配置邮件与在Spring Bootless应用程序中配置邮件没有太大区别。 但是,如何测试邮件配置和提交工作正常? 我们来看一下。 我假设我们有一个引导的…

CSS基础语法(三) CSS的6种特性

样式表常用写法及特性(组合、继承、关联性、权值性、层叠性、重要性) 1.样式的组合:把具有相同声明定义的选择符组合在一起,并用逗号隔开。-例如:段落元素p、单元格元素td和类c1可以使用相同样式&#xff…

卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义

卷积: 冲击信号会对线性系统产生冲击响应。 冲击信号可分解为平移度和幅度。其对线性系统的冲击响应可以分解为点点间的经平移和缩放的各个冲击响应的累加,通过卷积的表达式表示。 所谓的冲击响应,就是线性系统对任何输入信号的响应&#xff…

洛谷P2822 组合数问题

分析&#xff1a; 首先预处理出来&#xff0c;杨辉三角二维前缀和 代码&#xff1a; #include<cstdio> using namespace std; long long f[2005][2005],sum[2005][2005]; int main() {long long T,k;scanf("%lld%lld",&T,&k);for(long long i0;i<20…

es6笔记

es6对象浅复制&#xff1a; 字符串大小比较&#xff1a; 如果是汉字&#xff1a;a.charCodeAt() > b.charCodeAt() //使用carCodeAt将器转为asci码&#xff0c;在进行比较 如果是非汉字的字符串&#xff1a;直接比较或者使用上面的转码比较都可以。 如果是日期比较&#xff…

毕业设计上线啦!----跳蚤部落与基于Comet的WebIM系统开发

我不清楚把我的毕业设计的东西放上来之后&#xff0c;毕业论文答辩的时候会不会说我是在网上抄袭的&#xff0c;不过我还是果断的发上来与大家分享了&#xff01;&#xff01;呵呵&#xff0c;请大家支持&#xff01;高手就绕道吧&#xff01; 现在已经放到公网上&#xff0c;并…

poj2032Square Carpets(IDA* + dancing links)

题目请戳这里 题目大意:给一个H行W列的01矩阵,求最少用多少个正方形框住所有的1. 题目分析:又是一个红果果的重复覆盖模型.DLX搞之! 枚举矩阵所有的子正方形,全1的话建图.判断全1的时候,用了一个递推,dp[i][j][w][h]表示左上角(i,j)的位置开始长h宽w的矩形中1的个数,这样后面可…

使用Spring Security保护REST服务

总览 最近&#xff0c;我正在一个使用REST服务层与客户端应用程序&#xff08;GWT应用程序&#xff09;进行通信的项目中。 因此&#xff0c;我花了很多时间来弄清楚如何使用Spring Security保护REST服务。 本文介绍了我找到的解决方案&#xff0c;并已实现。 我希望此解决方案…

http请求post,返回excel文件,并接收

1.post的方法里要加responseType: arraybuffer参数&#xff0c;不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel"}的写法&#xff0c;可以保存为xls格式的excel文件&#xff08;兼容老版本&#xff09;。而使用“application/vnd.openxmlformats-off…

linux图形开发工具

请见:http://hi.baidu.com/jjzhang166/blog/item/b8dfb6ecd5fc6e2d62d09f9e.html 转载于:https://www.cnblogs.com/vilyLei/archive/2011/12/12/2284869.html

具有Overlord的WildFly 8.1中的API管理

昨天&#xff0c;我简要介绍了霸王项目家族。 今天该试驾了。 API管理子项目两天前发布了1.0.0.Alpha1&#xff0c;并根据18个月的路线图介绍了第一组功能。 APIMan到底是什么&#xff1f; 它是一个API管理系统&#xff0c;可以嵌入现有框架或应用程序中&#xff0c;甚至可以作…

设计模式学习笔记-代理模式

1. 概述 为其它对象提供一种代理以控制对这个对象的访问。 解决的问题&#xff1a;如果直接访问对象比较困难&#xff0c;或直接访问会给使用者或系统带来一系列问题。这样对于客户端&#xff08;调用者&#xff09;来说&#xff0c;就不需要直接与真实对象进行交互&#xff0c…

Tomcat配置自签名https

从JDK中找到keytool.exe&#xff0c;随便复制到一个方便的目录&#xff0c;在命令行中进入这个目录。 第一步&#xff1a;为服务器生成证书 tomcat.keystore&#xff0c;名字就是域名&#xff0c;其他的看着写。 keytool -genkey -v -alias tomcat -keyalg RSA -validity 3650…

MFC学习之路之多媒体 --(1) DirectShow

可以说整个Windows的多媒体编程都是以DirectShow为基础&#xff0c;那好&#xff0c;来吧&#xff0c;我们直接看DirectShow的一段基础代码。 bool Mp3::Load(LPCWSTR szFile) {Cleanup();ready false;if (SUCCEEDED(CoCreateInstance( CLSID_FilterGraph,NULL,CLSCTX_INPROC_…