jdbc操作mysql(一)
java.sql包
在使用jdbc之前,我们先看看有关操作jdbc会用到的几个类和接口,通过查看官方文档可知
- DriverManager:用于管理一组JDBC驱动程序的基本服务,即管理数据库中的所有驱动程序
- Connection:与特定数据库的连接(会话),执行SQL语句并在连接的上下文中返回结果,即用来建立数据库连接
- ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成,该接口类似于临时表,暂时存放数据库查询的结果集
- Statement:用于执行静态SQL语句并返回其生成的结果的对象,即管理sql语句,在已连接的基础上向数据发送sql语句
- PreparedStatement:继承了Statement,区别在于父类执行的是不带参的sql语句,子类则执行动态的sql语句
- CallableStatement:继承了PreparedStatement,用于执行SQL存储过程的界面
jdbc操作步骤
- 导入MySQL驱动
- 利用反射找到jar中的驱动
- 通过DriverManager获取connection连接对象来连接数据库
- 通过连接对象获取Statement对象,传入sql语句操作数据库
- 处理返回的结果集ResultSet
操作案例
新建一个数据库
- 这里我使用的navicat,数据库名jdbctest,表名t_user,id设置为自动增长
导入驱动
- 在IDEA中新建一个项目后,右键该项目 > Open Module Settings > Libraries > + > java
建一个实体类User
点击查看详细代码
import java.util.Date;
public class User {
private int id;
private int age;
private String username;
private String sex;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
案例一:原始操作
点击查看详细代码
/**
* 查询t_user表中的所有数据
*/
public void getList() {
try {
//导入MySQL驱动,利用反射机制加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
//通过DriverManager获取connection对象
String url = "jdbc:mysql://localhost/jdbctest?user=root&password=root";
Connection conn = DriverManager.getConnection(url);
//通过Connection对象获取Statement对象
Statement statement = conn.createStatement();
//通过Statement对象操作数据库
String sql = "select * from t_user";
ResultSet rs = statement.executeQuery(sql);
//处理结果集
while (rs.next()) {
int id = rs.getInt(1); // 获取第一列的int类型的值
String username = rs.getString(2);
int age = rs.getInt(3);
String sex = rs.getString(4);
Date birthday = rs.getDate(5);
System.out.println("id:" + id + ", username:" + username + ", age:" + age + ", sex:" + sex + ",birthday:" + birthday);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
案例二:提取共有对象
点击查看详细代码
/**
* 传入参数userid,获取id对应的list对象
* 将Connection Statement ResultSet作为局部变量,最后需关闭
*/
public static List<Map<String, Object>> getList(int userid) {
Connection conn = null;
Statement statement = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost/jdbctest?user=root&password=root";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
String sql = "select * from t_user where id=" + userid;
rs = statement.executeQuery(sql);
//处理结果集
List<Map<String, Object>> lists = new ArrayList<Map<String,Object>>();
while (rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
int age = rs.getInt("age");
String sex = rs.getString("sex");
Date birthday = rs.getDate("birthday");
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", id);
map.put("username", username);
map.put("age", age);
map.put("sex", sex);
map.put("birthday", birthday);
lists.add(map);
}
return lists;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return null;
}
案例三:防止SQL注入
点击查看详细代码
/**
* 按条件查询,
* 防止SQL注入,使用prepareStatement
* 传入两个参数,用prepareStatement的方法接受参数,操作MySQL
*/
public static List<Map<String, Object>> getList(int userid, String uname) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost/jdbctest?user=root&password=root";
conn = DriverManager.getConnection(url);
//通过prepareStatement对象操作数据库
String sql = "select * from t_user where id = ? and username = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, userid);
ps.setString(2, uname);
//返回结果集
rs = ps.executeQuery();
//处理结果集
List<Map<String, Object>> lists = new ArrayList<Map<String,Object>>();
while (rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
int age = rs.getInt("age");
String sex = rs.getString("sex");
Date birthday = rs.getDate("birthday");
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", id);
map.put("username", username);
map.put("age", age);
map.put("sex", sex);
map.put("birthday", birthday);
lists.add(map);
}
return lists;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return null;
}
jdbc操作mysql(一)的更多相关文章
- JDBC操作MySQL数据库案例
JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
- jdbc操作mysql
本文讲述2点: 一. jdbc 操作 MySQL .(封装一个JdbcUtils.java类,实现数据库表的增删改查) 1. 建立数据库连接 Class.forName(DRIVER); connec ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- [自动化专题]JDBC操作mysql时遇到的拦路虎
在挫折中成长,在错误中学习.聊聊我们在Selenium自动化中使用JDBC操作mysql数据库中遇到的那些拦路虎: 错误一:Can not issue data manipulation statem ...
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- JDBC操作MySQL(crud)
这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...
- 使用JDBC操作MySQL
使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...
- jdbc操作mysql(三):利用注解封装
案例五:利用注解封装 重复步骤 我们使用jdbc操作mysql时发现,操作不同表中数据,所写的方法基本相同:比如我们根据id向用户表添加数据,根据id删除商品表的数据,或者查询所有数据并用list集合 ...
- JavaWeb用Jdbc操作MySql数据库(一)
一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...
随机推荐
- gos-log高性能大日志检索中台
gos-log 基于Go语言的轻量级高性能的大日志检索系统 开源地址 gos-log https://gitee.com/dianjiu/gos-log https://github.com/dian ...
- odoo14里面的用户登录log记录
一.继承userlog,添加字段 # -*- coding: utf-8 -*- from odoo import models, fields, api from odoo.http import ...
- Spring Cloud专题之五:config
书接上回: SpringCloud专题之一:Eureka Spring Cloud专题之二:OpenFeign Spring Cloud专题之三:Hystrix Spring Cloud 专题之四:Z ...
- 【奇妙的JavaScript】# 1
奇妙的JavaScript 本专题整理了一些JavaScript的怪异行为,大部分都是选择题,题目都是简单的表达式.可以测试你有多了解 JavaScript,拓宽你的认知边界! 该专题计划每周更新1- ...
- 在Mac上安装Istio并使用,有丰富的监控Kiali、Grafana、Jaeger
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 之前在文章<服务网格Istio入门-详细记录Kubernetes安装Istio并使用 ...
- OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Javas数组03——数组的使用
Javas数组--数组的使用 1.普通的for循环 2.for-each循环 3.数组做方法入参 4.数组做返回值 例子1--普通for循环 package array; public clas ...
- Docker命令图
attach #当前shell下 attach连接指定运行镜像 build #通过DockerFile 定制镜像 commit #提交当前容器为新的镜像 cp #从容器中拷贝指定文件或者目录到宿主机中 ...
- 跟我一起写 Makefile(十)
四.foreach 函数 foreach函数和别的函数非常的不一样.因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语 ...
- Linux进程理解与实践(一)基本概念和编程概述(fork,vfork,cow)
进程 and 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...