java.sql包

在使用jdbc之前,我们先看看有关操作jdbc会用到的几个类和接口,通过查看官方文档可知

  • DriverManager:用于管理一组JDBC驱动程序的基本服务,即管理数据库中的所有驱动程序
  • Connection:与特定数据库的连接(会话),执行SQL语句并在连接的上下文中返回结果,即用来建立数据库连接
  • ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成,该接口类似于临时表,暂时存放数据库查询的结果集
  • Statement:用于执行静态SQL语句并返回其生成的结果的对象,即管理sql语句,在已连接的基础上向数据发送sql语句
  • PreparedStatement:继承了Statement,区别在于父类执行的是不带参的sql语句,子类则执行动态的sql语句
  • CallableStatement:继承了PreparedStatement,用于执行SQL存储过程的界面

jdbc操作步骤

  1. 导入MySQL驱动
  2. 利用反射找到jar中的驱动
  3. 通过DriverManager获取connection连接对象来连接数据库
  4. 通过连接对象获取Statement对象,传入sql语句操作数据库
  5. 处理返回的结果集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(一)的更多相关文章

  1. JDBC操作MySQL数据库案例

    JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...

  2. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  3. jdbc操作mysql

    本文讲述2点: 一. jdbc 操作 MySQL .(封装一个JdbcUtils.java类,实现数据库表的增删改查) 1. 建立数据库连接 Class.forName(DRIVER); connec ...

  4. 原生Jdbc操作Mysql数据库开发步骤

    原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤:        1.导入数据库驱动包       ...

  5. [自动化专题]JDBC操作mysql时遇到的拦路虎

    在挫折中成长,在错误中学习.聊聊我们在Selenium自动化中使用JDBC操作mysql数据库中遇到的那些拦路虎: 错误一:Can not issue data manipulation statem ...

  6. java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据

    package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...

  7. JDBC操作MySQL(crud)

    这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...

  8. 使用JDBC操作MySQL

    使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...

  9. jdbc操作mysql(三):利用注解封装

    案例五:利用注解封装 重复步骤 我们使用jdbc操作mysql时发现,操作不同表中数据,所写的方法基本相同:比如我们根据id向用户表添加数据,根据id删除商品表的数据,或者查询所有数据并用list集合 ...

  10. JavaWeb用Jdbc操作MySql数据库(一)

    一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...

随机推荐

  1. 【Azure 应用服务】App Service服务无法启动,打开Kudu站点,App Service Editor 页面均抛出:The service is unavailable

    问题描述 App Service 服务URL无法访问,进入门户中的Advanced Tools(Kudu).App Service Editor (Preview)等页面无法打开, 打开就出现 The ...

  2. SpringCloud学习之【NACOS实现服务的注册与发现】

    根据nacos官方的介绍,Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. 具有服务发现和服务健康监 ...

  3. (opencv5)轮廓检测函数

    (opencv5)轮廓检测函数 contours, hierarchy = cv2.findContours(img, mode, method,[offset) 注意 : 1.输入为二值图像,黑色为 ...

  4. tomcat与springmvc 结合 之---第17篇 StandContext容器和SpringMVC的WebApplicationContext的联系

    writedby 张艳涛, 上一篇分析了,dispatcherservlet通过getServletConfig 方法获取了web.xml定义的<param-init>属性的过程 那么在如 ...

  5. Podman 快速入门

    今天在某云上新购一台云服务器,发现已经有了 CentOS8.2 官方镜像可选,出于对新鲜事物的好奇,我决定开始采用 CentOS8.2,即使我还没有为它的新特性做好准备. 我的应用主要以单机版容器为主 ...

  6. 3D网页小实验-基于多线程和精灵动画实现RTS式单位行为

    一.实验目的: 1.在上一篇的"RTS式单位控制"的基础上添加逻辑线程,为每个单位实现ai计算: 2.用精灵动画为单位的行为显示对应的动作效果. 二.运行效果: 1.场景中的单位分 ...

  7. C++STL—string类

    string容器 1.1 string容器的基本概念 string容器是一个类 这个容器中有一个指针,指针维护了一个数组 string容器提供copy.find.insert.replace等等功能 ...

  8. 关于Algorithm in Nutshell源代码

    获取源码包 "Algorithm in Nutshell"的源码包ADK-1.0.zip在这本书主页上"Download Example Code"页面的Rel ...

  9. 【原创】Java内存攻击技术漫谈

    前言 Java技术栈漏洞目前业已是web安全领域的主流战场,随着IPS.RASP等防御系统的更新迭代,Java攻防交战阵地已经从磁盘升级到了内存里面. 在今年7月份上海银针安全沙龙上,我分享了< ...

  10. SQL 练习12

    查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息 分析 如果某同学学的某一个课程和01同学所学的课程有对应,那么子查询返回false. 如果没有对应,子查询返回tru ...