Java Data Base Connection(JDBC)
用于执行SQL语句的Java API,可为多种关系数据库提供统一访问。
它由一组用Java语言编写的类和接口组成,是Java访问数据库的标准规范。
JDBC需连接驱动。
- 驱动:两个设备要进行通信时需满足的一定的通信数据格式。
- 数据格式由设备供应商规定
- 设备供应商提供驱动软件,通过软件可以与该设备进行通信。
- JDBC是接口
- 驱动是接口的实现
1.JDBC开发步骤
1.1导入驱动jar包
创建lib目录,用于存放当前项目需要的所有jar包。
选择jar包,右键执行build path/Add to Build Path
1.2注册驱动
Class.forName("com.mysql.jdbc.Driver");
- java.sql.Driver:JDBC规范定义驱动接口;
- com.mysql.jdbc.Driver:MySQL包提供的实现类;
- Class.forName():加载一个使用空字符串描述的驱动类
- static Class<?> forName(String classname):返回与带有给定字符串名的类或接口相关联的Class对象。
- Driver类主动将自己注册。
1.3获得连接
Connection cn=DriverManager.getConnection("jdbc:mysql"//localhost:3306/mydb","root","root");
1.3.1DriverManager
在调用 getConnection
方法时,DriverManager
会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。
DriverManager.getConnection(String url,String username,String pw):试图建立到给定数据库 URL 的连接。
三个参数:
- 需要连接数据库的位置
- 用户名
- 密码
JDBC规定url格式:
- jdbc固定
- 数据路名称(mysql)
- 数据库厂商规定
- 数据库IP地址:localhost
- 端口号:3366
- DATABASE名称:mydb
1.4获得语句执行平台
String sql="某sql语句";
Statement stmt=con.createStatement();
获得Statement语句执行平台。
1.4.1Statement
用于执行静态 SQL 语句并返回它所生成结果的对象。
在默认情况下,同一时间每个 Statement对象在只能打开一个 ResultSet对象。
因此,如果读取一个 ResultSet对象与读取另一个交叉,则这两个对象必须是由不同的 Statement对象生成的。
如果存在某个语句的打开的当前ResultSet对象,则 Statement接口中的所有执行方法都会隐式关闭它。
常用方法:
int executeUpdate(String sql):执行insert、update、delete语句
ResultSet executeQuery(String sql):执行select语句
boolean execute(sql):执行select返回true,执行其他语句,返回false
1.5处理结果集
ResultSet是一个二维表格。
boolean next():执行下一条记录。
getXXX(int col):列从1开始。
- 获得对象:Object getObject(int index)、Object getObject(String name)
- 获得字符串:String getString(index)、Object getObject(String name)
- 获得整型:int getInt(index)、Object getObject(String name)
- 获得双精度浮点型:double getDouble(int index)、Object getObject(String name)
1.6释放资源
关闭的顺序:先得到的后关闭
rs.close();
stmet.close();
con.close();
2.SQL注入
输入的口令为:
则进入系统会,判断语句会为:password='xxx'OR'a'='a',通过验证。
用PreparedStatement解决
3.PreparedStatement
建议每条SQL语句的所有实际参数都用逗号分隔。
String sql="insert into user(id,name) values (?,?)";PreparedStatement psmt=conn.preparedStatement(sql);
preparedStatement(String sql):创建一个preparedStatement对象来将参数化的 SQL 语句发送到数据库。
带有 IN 参数或不带有 IN 参数的 SQL 语句都可以被预编译并存储在preparedStatement对象中。然后可以有效地使用此对象来多次执行该语句。
sql
- 可能包含一个或多个 '?' IN 参数占位符的 SQL 语句
3.1常用方法
int executeUpdate()
ResultSet executeQuery()
boolean execute()
3.2设置实际参数
void setXXX(int index, XXX xx)
将指定参数设置为给定的Java值。
将此值发给数据库时,驱动程序将它转换为一个SQL xxx类型值。
setString(2,"张三");
把SQL语句中的第2个占位符'?'替换为“张三“。
3.3预处理对象executeUpdate方法
3.3.1 操作格式
- 注册驱动
- 获取连接
- 获取预处理对象
- SQL语句占位符设置实际参数
- 执行SQL语句
- 释放资源
3.3.2 insert
Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="insert into user(name) values (?)";PreparedStatement pstmt=conn.preparedStatement(sql);stmt.setString(1,"李四");int line=stmt.executeUpdate();System.out.println("新添加的行数:"+line);stmt.close();
conn.close();
3.3.3update
Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="update user set name=? where id=?";PreparedStatement pstmt=conn.preparedStatement(sql);stmt.setString(1,"李四");
stmt.setString(2,1);stmt.close();
conn.close();
3.3.4delete
Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="delete from user where id=?";PreparedStatement pstmt=conn.preparedStatement(sql);stmt.setString(1,1);stmt.close();
conn.close();
3.4预处理对象executeQuery方法
3.4.1 操作格式
- 注册驱动
- 获取连接
- 获取预处理对象
- SQL语句占位符设置实际参数
- 执行SQL语句
- 处理结果集(遍历结果集合)
- 释放资源
3.4.2 select
Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="select * from user";PreparedStatement pstmt=conn.preparedStatement(sql);ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){String id=rs.getInt("id");String name=rs.getString("name);System.out.println(id+"---"+name);}rs.close();
stmt.close();
conn.close();
4. JDBC工具类
可将“获得数据库连接”操作封装为工具类JDBCUtils
提供获取连接对象的方法,从而达到代码复用
提供方法:public static Connection getConn();
public class JDBCUtils{public static final String DRIVERNAME="com.mysql.jdbc.Driver";public static final String URL="JDBC:MYSQL://LOCALHOST:3306/mydb";public static final String USER="root";public static final String PAEEWORD="root";static{try{Class.forName(DRIVERNAME);}catch(ClassNotFoundException e){System.out.println("数据库驱动注册失败!");}}public static Connection getConn() throws Exception{Connection conn=DriverManager.getConnection(URL,USER,PAEEWORD);return conn;}
}
5.Properties配置文件
获得的连接的4个参数(驱动、URL、用户名、密码)通常在配置文件中保存,方便后期维护。
层序如果需要更换数据库,只需要改配置文件即可。
习惯使用Properties文件,要求如下;
- 文件位置:任意,建议src下
- 文件名称:任意,扩展名为.properties
- 文件内容:一行一组数据,格式为"key=value"
- key命名自定义,多个单词用点分隔,jdbc.driver
- value不支持中文,如果非要用非中文,需unicode转换
文件名db.properties
driver=com.mysql.jdbc.Driver;
url=jdbc:mysql://localhost:3306/mydb;
user=root;
password=root
JDBCUtils更改为:
public class JDBCUtils{public static String driver;public static String url;public static String user;public static String password;static{try{Properties props=new Properties();Reader is=new FileReader("db.properties");props.load(is);driver=props.getProperties("deriver");url=props.getProperties("url");user=props.getProperties("user");password=props.getProperties("pwssword");}catch(ClassNotFoundException e){throw new RuntimeException(e);}}public static Connection getConn() throws Exception{try{Class.forName(driver);Connection conn=DriverManager.getConnection(url,user,password);return conn;}catch(Exception e){throw new RuntimeException(e);}}
}
Java Data Base Connection(JDBC)相关推荐
- JDBC(Java Data Base Connectivity,java数据库连接)
2019独角兽企业重金招聘Python工程师标准>>> JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 ...
- JDBC(Java Data Base Connectivity)基本用法
一.什么是JDBC JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准APl ...
- JDBC(Java Data Base Connectivity)高级用法
一.批处理 Batch 对于大量的批处理,建议使用statement,因为PreparedStatement的预编译空间有限,当数据量特别大时,会发生异常. 示例 package com.lgd.jd ...
- Java学习十四,JDBC,反射
目录 1.JDBC入门 1.1.JDBC的概念 1.1 JDBC的基本操作 1.2 JDBC的API 1.3 JDBC的CRUD操作(createStatement类) 1.4 JDBC防sql注入( ...
- 【Java基础知识】JDBC基本操作
Jdbc简介 JDBC(Java Data Base Connectivity )(java 数据库连接) 可以为多种数据库提供统一的数据库访问. JDBC使用详解 JDBC编程步骤 1. ...
- mysql java驱动 ibm_Java 通过JDBC连接Mysql数据库
JDBC(java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- java学习笔记21——JDBC
文章目录 日报 11.11 JDBC 学习内容 JDBC JDBC 的核心 API DriverManager 类 Connection 接口 : Statement接口: PreparedState ...
- 基于Java( Spring+SpringMVC+JDBC)+MySQL实现(Web)家电售后服务系统【100010064】
一.家电售后服务系统 1.1 背景 随着生活质量的提高,现在各家各户都在使用家电,但是在家电被购买之后,免不了会出现一些问题,需要厂家提供一些技术支持等,家电售后服务就成了厂家和用户之间一个重要的交流 ...
- java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
1.本问题出现在动力节点crm项目中的p85-p88 2.出现问题时applicationContext-datasource的配置 3.报出的异常(里面有只读异常,还有就是sql中接收的id是?) ...
最新文章
- 在事务方法中调用另外一个事务方法,被调用方法的事务没起作用
- php web 简单的系统,Slim 简单而强大的 PHP 微型 Web 开发框架 - 资源分享
- zabbix配置微信报警
- ❤️《IOC理论推导》
- 项目在云服务器上的绝对路径,项目在云服务器上的绝对路径
- igm焊接机器人基本操作_焊接机器人编程与操作
- 物联网控制的智能LED灯带(1):WS2812灯带控制(WS2812/2811,ESP32,NODE-RED)
- 《等级保护二级基本要求》
- 【无标题】 R语言下载keras最新方法
- vue 3.0 使用ref获取dom元素
- 流量分析实战(1⃣️)_2014_11_16
- Python数据分析笔记----第六章pandas文件操作
- 饿汉单例、懒汉单例类
- 系统分析师 pdf_2021年CFA机考系统操作指南,收藏看三遍!
- 开源软件许可协议MIT、BSD、Apache、LPGL、Mozilla、GPL的区别
- 流浪地球到底能到哪:云计算告诉你
- 使用内连接查询选修了Java程序基础_使用内连接 查询选修了“java程序基础”课程的学生学号、姓名、课程号、课程名和期末成绩_学小易找答案...
- linux 文本编辑器_Linux排名前7位的最佳文本编辑器
- cowboy的get和post的例子
- 人员不足、供应链断裂,危机之下制造业该如何自救?
热门文章
- 报名 | 想在硅谷近距离接触蚂蚁金服的CTO和一众技术高管?这个机会一定不能错过!...
- 菜鸟学Linux命令:端口查看和操作命令
- Unable to simultaneously satisfy constraints.
- JS怎样捕获浏览器关闭时间弹出自定义对话框
- LVS+DR源码安装
- 14招保你ERP选型成功
- 【帖子收藏】ansible 中的循环:with_file 和 with_fileglob
- Livy安装使用(Spark rest接口服务工具)
- xshell 5如何选中即复制,右键即粘贴
- linux kernl网址