技术标签: python java 编程语言 jdbc mysql 数据库
JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!
JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!
JDBC API
提供者:Sun公司
内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如
1.DriverManager类 作用:管理各种不同的JDBC驱动
2.Connection接口
3.Statement接口
4.ResultSet接口
JDBC 驱动
提供者:数据库厂商
作用:负责连接各种不同的数据库
Java程序员
JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。
三方关系
SUN公司是规范制定者,制定了规范JDBC(连接数据库规范)
数据库厂商微软、甲骨文等分别提供实现JDBC接口的驱动jar包
程序员学习JDBC规范来应用这些jar包里的类。
简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
DriverManager :依据数据库的不同,管理JDBC驱动
Connection :负责连接数据库并担任传送数据的任务
Statement :由 Connection 产生、负责发送执行SQL语句
ResultSet:负责保存Statement执行后所产生的查询结果
1:加载一个Driver驱动
2:创建数据库连接(Connection)
3 : 创建SQL命令发送器Statement
4:通过Statement发送SQL命令并得到结果
5:处理SQL结果(select语句)
6:关闭数据库资源
ResultSet
Statement
Connection。
1.加载驱动
加载JDBC驱动是通过调用方法java.lang.Class.forName(),下面列出常用的几种数据库驱动程序加载语句的形式 :
Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驱动程序
Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱动程序
Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驱动程序
Class.forName(“com.mysql.JDBC.Driver”);//使用MySql的JDBC驱动程序
2.创建数据库连接
与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法
Connection conn=null;
String url=“jdbc:oracle:thin:@localhost:1521:orcl”;
String user=“scott";
String password=“tiger";
conn = DriverManager.getConnection(url, user, password);
3.创建Statement并发送命令
Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句
有三种 Statement对象:
Statement:用于执行不带参数的简单SQL语句;
PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;
CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。
4.处理ResultSet结果
ResultSet对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。
初始状态下记录指针指向第一条记录的前面,通过next()方法指向第一条记录。循环完毕后指向最后一条记录的后面。
5.关闭数据库资源
作为一种好的编程风格,应在不需要Statement对象和Connection对象时显式地关闭它们。关闭Statement对象和Connection对象的语法形式为:
public void close() throws SQLException
用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被自动关闭。
注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接是才可以使用的,所以在使用结束之后有可能其他的Statement还需要连接,所以不能先关闭Connection。
文章浏览阅读72次。leetcode每日一题之回文链表题目链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci/submissions/题目描述:编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false 示例 2:输入: 1->2->2->1输出: true 解法1:自己的解法首先声明,本人的解法是通过了的。思想:首先遍历链表记录链表中的元素个数然后开辟一个数组,空间
文章浏览阅读2k次。本文实例为大家分享了java实现动态时钟设置闹钟功能,供大家参考,具体内容如下显示如上图所示的动态时钟,并且可以设置闹钟,播放mp3。首先用到的是时钟(Timer)和日历(Calendar)得到系统的当前时间。代码如下:import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.geom.Ellipse2D;import ..._java 动态闹钟
文章浏览阅读700次。最近项目安全风险整改,目前项目里面使用的组件版本比较低,存在一些安全漏洞,需要升级第三方组件的版本。先贴一下我的报错,有三个组件的升级会涉及到这一类报错,区别是三个组件报错涉及的包名不一样,分别是 (1)Gson 升级到 2.8.6(2)OKhttp3 升级到 4.9.0(3)Rxjava 升级到 3.0.6百度上大多数的说法都是没有使用 java 8 导致的,于是我加上了这段配置compileOptions { sourceCompatibility JavaVers_com.android.builder.dexing.dexarchivebuildex index9 out of bounds
文章浏览阅读1.9k次。UPDATE table set name = trim(name);//用来删除数据前后的空格UPDATE table set name = rtrim(name);//用来删除数据前的空格UPDATE table set name = ltrim(name);//用来删除数据后的空格UPDATE table set name = REPLACE(name,' ','');//用来删除数据中的空格UPDATE table set name =REPLACE(name, CHR(10), ._postgres空格转换
文章浏览阅读386次。[机器学习&数据挖掘]机器学习实战决策树plotTree函数完全解析http://www.cnblogs.com/fantasy01/p/4595902.html点击打开链接import matplotlib.pyplot as plt#这里是对绘制是图形属性的一些定义,可以不用管,主要是后面的算法decisionNode = dict(boxstyle="sawto_"args.plottree=list(ftype=\"i\",fsize=1)"
文章浏览阅读811次。报错spring boot Configuration Annotation Proessor not found in classpath这是因为@ConfigurationProperties(prefix=”author”) 没有指定classpath时,IDEA提示没有找到classpath。而spring boot1.5以上版本@ConfigurationProperties..._springboot configuration annotation peocessor
文章浏览阅读8k次。kafka中topic操作,文件参数配置_kafka topic 根据变量读取不同配置文件下主题
文章浏览阅读88次。 日前,新加坡杭州科技园在上海世博园零碳馆签署了《长三角地区海归创新创业零碳宣言》,并与共同签署零碳宣言的园区代表一起参加“第三届长三角海归创新创业圆桌会议——2010长三角零碳科技论坛”,共同探讨低碳科技园区建设的理念和方向。 “第三届长三角海归创新创业圆桌会议——2010长三角零碳科技论坛”的地点分别是上海世博会零碳馆和杭州经济技术开发区。选择这两个地方举行长三角零..._零碳宣言
文章浏览阅读6.2k次,点赞7次,收藏26次。Anaconda Python版本对应Anaconda 2.0.1 对应 Python2.6Anaconda 2.0.1 对应 Python2.7Anaconda 2.0.1 对应 Python3.3Anaconda 2.0.1 对应 Python3.4Anaconda 2.1.0 对应 Python2.6Anaconda 2.1.0 对应 Python2.7Anaconda 2.1.0 对应 Python3.3Anaconda 2.1.0 对应 Python3.4Anaconda 2.2_anaconda对应python3.7
文章浏览阅读3.3k次,点赞8次,收藏52次。提出了一种对比表征嵌入的方法来来实现小样本目标检测,动机是观察到使用不同的 IoU 来检测物体与对比学习方法中对比不同“正对”和“负对”来实现检测有异曲同工之妙。本文实验证明模型的错误更有可能是误分类而不是定位,文本解决这一问题的方法是对“正对”和“负对”施加了对比嵌入损失(CPE loss),使“正对”的得分远大于“负对”的得分,在当时的 PASCAL VOC 和 COCO 数据集上均达到了 SOTA。“正对”“负对”示例..._fsce
文章浏览阅读2.7k次,点赞2次,收藏3次。标签:OJ是Online Judge系统的简称,用来在线检测程序源代码的正确性。著名的OJ有TYVJ、RQNOJ、URAL等。国内著名的题库有北京大学题库、浙江大学题库、电子科技大学题库、杭州电子科技大学等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。Online Judge系统最初使用于ACM-ICPC国际大学生程序设计竞赛和OI信息学奥林匹克竞赛中的自动判题和排名。现广泛应用于世界各地高校..._python oj文件评测
文章浏览阅读74次。好程序员大数据学习路线hive内部函数,持续为大家更新了大数据学习路线,希望对正在学习大数据的小伙伴有所帮助。1、取随机数函数:...