mysql的JDBC连接
程序是通过DriverManager注册驱动,所以加载之后可以直接使用DriverMannager
mysql中的多态:
不仅是赋值的时候使用了多态,返回的时候都是返回的借口(不是返回的子类对象),所以如果不使用多态需要强转通过Java代码去操作数据库
JDBC ----- Java 数据库 连接 JDBC是java提供的数据库连接规范
J ----- Java
DB ----- DataBase
C ----- Connectivity
使用JDBC
A.JDK 本身没有实现数据库连接的功能
第三方实现了MySQL与Java的连接,并且打包成jar包
我们要下载jar包,并且将jar包导入到当前项目
B.获取连接 数据库连接的原理就是一个Socket
在Eclipse的Java程序与MySQL之间创建一个管道
注册驱动:Class.forName("com.mycql.jdbc.Driver") 最常用的方法
获得连接:
Connection con = DriverManager.getConnection(url,"账号","密码")
这是个面向接口的编程,返回的是java中的父类Connection,创建的是mysql中实现类的对象
url 作用:用来定位数据库
jdbc:mysql://localhost:3306/database
jdbc:mysql: mysql数据库协议
localhost IP地址,定位一台电脑
3306 端口号:定位MySQL程序
database 定位MySQL的一个数据库
C.在连接上创建代理对象
Statement sta = con.createStatement();
编写SQL语句并执行
sta.executeXxx("SQL语句")
处理执行结果
D.释放资源 程序与外部交互都需要关闭资源,关闭资源之后数据库的数据才能进行其它操作
关闭顺序,后创建的先关闭
rs.close()
sta.close()
con.close()
加载驱动的方式 将驱动类加载进内存
1.Class.forName("驱动名")
2.new Driver() 需要导包
3.DriverManager.registerDriver(new Driver()) 需要导包
4.System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver")
2.3两种方式不常用
原因1:
类加载时,会自己使用方式3进行注册(Driver类中的静态代码块)
方式2额外创建了一个无用对象
方式3重复加载驱动
原因2:
常见的情况是,开发使用MySQL数据库,部署使用Oracle数据库
如果是方式2.3,需要频繁改变导入的包名
方式1可以将驱动名配置进配置文件 //返回的都是java中本身的接口规范,所以不需要导包
Statement 执行代理对象的使用(用于代理固定了的SQL语句)
A.ResultSet rs = Statement.executeQuery("select * form ...") 执行查询的语句,返回一个查询到的结果集
ResultSet 封装了查询到的若干条数据
用法:
while(rs.next()){
rs.getObject("字段名");
rs.getObject(int indext); 字段索引,从第一行第一列开始
}
注意:Java中的索引一般从0开始,但是JDBC中的索引从1开始
B. int line = Statement.executeUpdate("insert into 表名 字段=值 where...")
用于执行增删改操作的SQL语句,返回的是此操作改变了多少条数据
C. execute方法可以区别是查询还是修改语句
返回值是true则是select语句,否则是修改语句
PrepareStatement 是Statement的子类
SQL语句的预处理对象
在SQL语句中可以用 ? 作为占位符,之后补齐(站位符只能用于属性值的地方,会逐个分析传入字符,转义非法字符,去掉最外层单引号)
1.获取执行对象
PrepareStatement pst = con.prepareStatement(SQL语句)
2.补齐占位符
pst.setObject(int indext, value)
Object的类型要和value的类型保持一致
3.执行SQL语句
pst.executeQuery()
pst.executeUpdate()
优点:
A.功能更强大,比如可以插入一些特殊字符
B.执行效率更高,因此称之为预定义的Statement (在获得连接的时候就已经准备执行了)
注册驱动,获得连接,关闭资源代码重复,封装
JDBCUtils
public class JDBCUtils {
//注册驱动只需要注册一次
static {
Class.forName("com.mysql.jdbc.Driver")
}
//封装获得连接
public static Connection getCon(){
Connection con = null;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database",账户,密码);
} catch (Exception e) {
//发生了异常一定让程序停止,因为没有获得连接(抛运行时异常结束java虚拟机)
e.printStackTrace();
throw new RuntimeException();
}
return con;
}
public static void close(ResultSet rs,Statement sta,Connection con){
//要打印自定义信息,在异常的构造方法中的有参构造,创建异常对象的时候就给出信息,catch到处理的时候打印
//判断是不是不等于空,避免空指针,没有对象的时候不需要关闭,一定要释放资源,不然会影响数据的操作
if(rs != null){
try{
rs.close();
} catch (Exception e) {
System.out.println(e.getMessage);
}
}
sta.close();
con.close(); //同理try\catch关闭资源
}
}
JDK 中的 JDBC 设计
A:JDBC 中大量的使用了多态
全是接口,就是定义了规则,供各种数据库实现此规则,但都是接口层次,不用改源码
Connection 使用
Statement 使用
ResultSet 使用
B:真正的实现全在各种数据库自己封装的jar包中
不使用多态的时候:
1.程序一样运行
2.缺点:更换jar包是,所有对应的导包实现都得修改
多态体现在Jar包更换上,使用了多态,实现了一种可插拔设计
接口相当于是一种规范,jar包中类实现了接口,遵守规范完成某种操作
mysql的JDBC连接的更多相关文章
- 【MySQL】JDBC连接MySQL的一些问题以及解决办法
[MySQL]JDBC连接MySQL的一些问题以及解决办法 http://blog.csdn.net/baofeidyz/article/details/52017047
- Oracle Mysql的jdbc连接
Oracle和MySql的jdbc或连接池中的连接,写下来以便随时参考 Oracle: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc ...
- MySQL分布式jdbc连接
参考文档: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-multi-host-connections.html 服务器故障转移 连 ...
- 【添加最新版本的mysql的jdbc连接jar包】java.math.BigInteger cannot be cast to java.lang.Long异常
[问题描述] 从我的电脑把项目拷贝到guo小中的win8电脑,but出现了那个错误,估计他的mysql是最新版本的. [如何下载连接jar包] 链接:https://pan.baidu.com/s/1 ...
- Java使用JDBC连接MySQL数据库
1.引用 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...
- JDBC连接MySQL与Oracle
JDBC连接MySQL .JDBC连接Oracle (跳转) JDBC连接MySQL import org.junit.Test; import java.sql.*; /** * JDBC连接MyS ...
- mysql中,由于JDBC连接限制了最大包长度1024B,即1KB,报错“max_allowed_packet' ”
报错:org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INS ...
- JDBC连接MySQL数据库代码模板
下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...
- JDBC连接MySQL 方法 实例及资料收集
JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...
随机推荐
- struct and union example
1. StructHandler.c: /* * StructHandler.c * * Created on: Jul 6, 2013 * Author: wangle */#inclu ...
- go语言将函数作为参数传递
Go语言函数作为参数传递,目前给我的感觉几乎和C/C++一致.非常的灵活. import "fmt" import "time" func goFunc1(f ...
- CSS:CSS 分组 和 嵌套 选择器
ylbtech-CSS:CSS 分组 和 嵌套 选择器 1.返回顶部 1. CSS 分组 和 嵌套 选择器 Grouping Selectors 在样式表中有很多具有相同样式的元素. h1 { col ...
- docker常用
1. docker 查看正在运行 2. docker 查看所有 3. docker 查看镜像 4. docker 运行使用 docker run --name 镜像名(自己起的镜像名字)-d(后台) ...
- static变量、static函数与普通变量、普通函数的区别
转自:http://blog.163.com/sunshine_linting/blog/static/44893323201191294825184/ 全局变量(外部变量)的说明之前再冠以stati ...
- swiper 窗口宽度变化,页面宽度高度变化 导致自动滑动 解决方案
又又又又是swiper问题 背景: pc端项目,rem布局,swiper作为步骤条(上一步,下一步)的功能. 发现在屏幕拖动,宽高的变化,窗口大小的变化 会引起swiper自动滑动(到下一步). 在下 ...
- pcA降维 SVD
前言: PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的.在上篇文章中便是基于特征值分解的一种解释.特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线 ...
- hdu6350 /// tarjan+并查集+组合+最大流思想
题目大意: 给定n个点 m条边没有重边的仙人掌图(没有一条边会同时存在与两个环 也就是环都是相互独立的) 求任意两点间 i^j^maxflow(i,j)的总和 maxflow为两点间最大流 题解:ht ...
- 如何用json 与jsonp 的区别去回答你的面试官?
常常 有面试官这样问我们,虽然用过无数次,但是回答不上岂不是尴尬,那我们浅析一下它们的区别? 1. json JSON是一种基于文本的数据交换格式,用于描述复杂的数据,举个例子: var nax=[ ...
- idea一直在copying resources或者一直在build,卡住不动,问题已解决
IDE在启动项目的过程中,一直copying,或者是build一直卡住,需要在modules中配置下,把target文件夹移出resource folder 同时,在此之前,我还屏蔽了项目中pom.x ...