JDBC (29)
1、JDBC:就是一套API,由sun公司定义类或者定义的接口。(全称 java database connectivity:是Java访问数据库的标准规范),Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动。
2、预处理对象executeUpdate方法,作用:完成记录的insert\update\delete语句的执行。操作格式统一如下:
1. 注册驱动
2. 获取连接
3. 获取预处理对象
4. SQL语句占位符设置实际参数
5. 执行SQL语句
6. 释放资源
注:Statement stat = con.createStatement();//createStatement 创建语句 //statement接口实现类,执行sql语句,返回结果集,PrepareStatement是其子接口(高效,防止sql attack)。接口和实现类都是数据库驱动里的东西。
3、插入记录:insert // 实现向分类表中插入指定的新分类
public void demo01() throws Exception {
// 1注册驱动,利用反射技术,将驱动加入内存
Class.forName("com.mysql.jdbc.Driver"); // driverName:驱动程序的名称
// 2获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root",
"root"); // 3获得预处理对象 String sql = "insert into sort(sname) values(?)"; PreparedStatement stat = conn.prepareStatement(sql); // 解决SQL注入攻击问题 // 4 SQL语句占位符设置实际参数 stat.setString(1, "奢侈品"); // 5执行SQL语句 int line = stat.executeUpdate(); //执行更新,返回值是更新的条数 System.out.println("新添加记录数:" + line); // 6释放资源 stat.close(); conn.close(); }
4、更新记录:update // 实现更新分类表中指定分类ID所对应记录的分类名称
public void demo02() throws Exception {
// 1注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
// 3获得预处理对象中
String sql = "update sort set sname=? where sid=?";
PreparedStatement stat = conn.prepareStatement(sql);
// 4 SQL语句占位符设置实际参数
stat.setString(1, "数码产品");
stat.setInt(2, 1);
// 5执行SQL语句
int line = stat.executeUpdate();
System.out.println("更新记录数:" + line);
// 6释放资源
stat.close();
conn.close();
}
5、删除记录:delete // 实现删除分类表中指定分类ID的记录
public void demo03() throws Exception {
// 1注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
// 3获得预处理对象
String sql = "delete from sort where sid=?";
PreparedStatement stat = conn.prepareStatement(sql);
// 4 SQL语句占位符设置实际参数 <不懂>
stat.setInt(1, 1);
// 5执行SQL语句
int line = stat.executeUpdate();
System.out.println("删除记录数:" + line);
// 6释放资源
stat.close();
conn.close();
}
6、预处理对象executeQuery方法 ,作用:完成记录的select语句的执行。操作格式统一如下:
1. 注册驱动
2. 获取连接
3. 获取预处理对象
4. SQL语句占位符设置实际参数
5. 执行SQL语句
6. 释放资源
7、 查询记录:select // 实现查询分类表所有记录
public void demo04() throws Exception {
// 1注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
// 3获得预处理对象
String sql = "select * from sort";
PreparedStatement stat = conn.prepareStatement(sql);
// 4 SQL语句占位符设置实际参数
// 5执行SQL语句
ResultSet rs = stat.executeQuery();
// 6处理结果集(遍历结果集合)
while( rs.next() ){
//获取当前行的分类ID
String sid = rs.getString("sid");//方法参数为数据库表中的列名
//获取当前行的分类名称
String sname = rs.getString("sname");
//显示数据
System.out.println(sid+"-----"+sname);
}
// 7释放资源
rs.close();
stat.close();
conn.close();
}
8、查询记录:实现查询分类表中指定分类名称的记录
public void demo05() throws Exception {
// 1注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root",
"root");
// 3获得预处理对象
String sql = "select * from sort where sname=?";
PreparedStatement stat = conn.prepareStatement(sql);
// 4 SQL语句占位符设置实际参数
stat.setString(1, "奢侈品");
// 5执行SQL语句
ResultSet rs = stat.executeQuery();
// 6处理结果集(遍历结果集合)
while( rs.next() ){
//获取当前行的分类ID
String sid = rs.getString("sid");//方法参数为数据库表中的列名
//获取当前行的分类名称
String sname = rs.getString("sname");
//显示数据
System.out.println(sid+"-----"+sname);
}
// 7释放资源
rs.close();
stat.close();
conn.close();
}
9、JDBC工具类:获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils。提供获取连接对象的方法,从而达到代码的重复利用。
该工具类提供方法:public static Connection getConn ()。代码如下:
/*
* JDBC工具类
*/
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 PASSWORD = "root"; static {
try {
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
System.out.println("数据库驱动注册失败!");
}
}
//提供获取连接的方法
public static Connection getConn() throws Exception {
// 2. 获得连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 返回连接
return conn;
}
}
10、 创建使用properties配置文件 (4个参数:驱动、URL、用户名、密码) 作用:方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可。
#文件:db.properties driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
user=root
password=root
11、加载配置文件:Properties对象
// 对应properties文件处理,开发中也使用Properties对象进行。我们将采用加载properties文件获得流,然后使用Properties对象进行处理。
// JDBCUtils.java中编写代码
public class JDBCUtils { private static String driver;
private static String url;
private static String user;
private static String password;
// 静态代码块
static {
try {
// 1 使用Properties处理流
// 使用load()方法加载指定的流
Properties props = new Properties();
Reader is = new FileReader("db.properties");
props.load(is);
// 2 使用getProperty(key),通过key获得需要的值,
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
} catch (Exception e) {
throw new RuntimeException(e);
}
} /**
* 获得连接
*/
public static Connection getConnection() {
try {
// 1 注册驱动
Class.forName(driver);
// 2 获得连接
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
12、使用JDBCUtils工具类
// 测试类
public class Demo {
@Test
public void insert(){
try{
//1,获取连接对象
Connection conn = JDBCUtils.getConnection();
//2,指定要执行的SQL语句
String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)";
//4,获取SQL语句的执行对象 PreparedStatement
PreparedStatement ppstat = conn.prepareStatement(sql);
//5,执行SQL语句
ppstat.setString(1, "股票收入");
ppstat.setDouble(2, 5000);
ppstat.setString(3, "收入");
int line = ppstat.executeUpdate();
//6,处理结果集
System.out.println("line=" + line);
//7,关闭连接
ppstat.close();
conn.close();
} catch(SQLException e){
throw new RuntimeException(e);
}
}
}
JDBC (29)的更多相关文章
- 关于Java面试
Java基础知识复习 1. 简单讲一下Java跨平台的原理 由于操作系统(Windows.Linux)支持的指令集,不是完全一致的.就会让我们程序在不同的操作系统上执行不同的代码.Java开发了不同操 ...
- 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】
疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...
- 29_Java_数据库_第29天(JDBC、DBUtils)_讲义
今日内容介绍 1.JDBC 2.DBUtils 01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Conne ...
- java基础(29):JDBC、DBUtils
1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- Jmeter系列(29)- 详解 JDBC Connection Configuration
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 发起 jdbc 请求前,需要有 ...
- MyBatis通过JDBC生成的执行语句问题
我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JDBC的支持.虽然使用起来很方便,但是碰到一些问题确实很棘手, ...
- java web学习总结(二十三) -------------------编写自己的JDBC框架
一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...
- JDBC驱动自身问题引发的FullGC
公众号HelloJava刊出一篇<MySQL Statement cancellation timer 故障排查分享>,作者的某服务的线上机器报 502(502是 nginx 做后端健康检 ...
- [bigdata] 启动CM出现 “JDBC Driver class not found: com.mysql.jdbc.Driver” 以及“Error creating bean with name 'serverLogFetcherImpl'”问题的解决方法
问题:“JDBC Driver class not found: com.mysql.jdbc.Driver” 通过以下命令启动cm [root@hadoop1 ~]# /etc/init.d/cl ...
随机推荐
- mmu裸机程序
硬件平台:JZ2440 init.c --> 初始化sdram,创建页表 leds.c --> 使用init.c初始化的VA地址控制led start.s --> ...
- Java 堆外内存
入口ByteBuffer.allocateDirect public static ByteBuffer allocateDirect(int capacity) { return new Direc ...
- 20170929 微信小程序项目开发
1. 微信小程序环境搭建 请参考官网,哈哈! 2. 微信小程序基础学习 文件结构: 3. 微信小程序实战 4. 目前的逻辑,是从微信小程序的界面和服务器的Web API 进行交互, 有个注意事项就是W ...
- what's the 跨期套利
出自 MBA智库百科(https://wiki.mbalib.com/) 跨期套利的定义 跨期套利是套利交易中最普遍的一种,是股指期货的跨期套利(Calendar Spread Arbitrage)即 ...
- 腾讯游戏DBA团队的发展自白
BA这个岗位跟仓管员很像,就是每天给别人发点货,别人在你这儿放点货,DBA工作就是把货尽快给送出去或者让人家尽快放进来.当然,还有一份重要的工作,就是让仓库里摆放的货物尽可能整齐,这也是仓管员的本职工 ...
- vue中让input框自动聚焦
created(){ this.changfouce(); }, methods: { //在vue生命周期的created()钩子函数进行的DOM操作要放在Vue.nextTick()的回调函数中, ...
- Html-根据不同的分辨率设置不同的背景图片
@media only screen and (min-width: 1024px) //当分辨率width >= 1024px 时使用1.jpg作为背景图片 { ...
- component 理解
1: sap中的component理解 component分为 genil component 和ui component component相当于整个应用中某一小块的前台/后台所有的东西都包括进去. ...
- mac本的环境基本完成大部分了
1.禅道的部署,技术上最难搞 session 目录存储目录不存在的处理 终端:open /et 前往——>前往文件夹——〉/资源库/WebServer/Documents/ 在tem目录下新建文 ...
- [LeetCode] 35. Search Insert Position_Easy tag: Binary Search
Given a sorted array and a target value, return the index if the target is found. If not, return the ...