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. PHP获取当日或本月时间戳范围

    在mysql数据库中使用int类型保存时间戳时,一般在程序中可能会用到统计当日,当月的一些数据.那么可以用如下的方式限定时间范围:   //当日销售 $today_start = strtotime( ...

  2. mysql - 按条件统计

    在表中分别统计mt =0 和 mt>0 的个数 方法一:select count(if(mt=0,1,null)) as a,count(if(mt>0,1,null)) as b fro ...

  3. FastDFS是使用c语言编写的开源高性能分布式文件系统

    FastDFS是什么 FastDFS是使用c语言编写的开源高性能分布式文件系统 是由淘宝开发平台部资深架构师余庆开发,FastDFS孵化平台板块 他对文件进行管理,功能包括文件存储,文件同步,文件访问 ...

  4. python序列化proto时对repeated修饰数据进行赋值(常用类型和其他类型)

    说一下对proto文件中数据使用时的书写方法,因为笔者也经常弄混淆 一.repeated修饰符,该列表是常用类型,比如int message C2GS_GoodsList { repeated int ...

  5. 添加xxx到右键菜单

    1. 添加notepad++到右键菜单[1] 添加到 右键菜单 将以下内容保存为 OpenWithNotepad++.reg 文件,双击运行即可(其中可执行文件路径和菜单项名称请自行替换): 注: 下 ...

  6. 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)

    最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...

  7. YsoSerial 工具常用Payload分析之Common-Collections7(四)

    前言 YsoSerial Common-Collection3.2.1 反序列化利用链终于来到最后一个,回顾一下: 以InvokerTranformer为基础通过动态代理触发AnnotationInv ...

  8. Android 自定义属性(attrs)、样式(Style)、主题(Theme)

    Android 自定义属性(attrs).样式(Style).主题(Theme) https://www.cnblogs.com/dandre/p/4507024.html https://blog. ...

  9. ABC165C题解

    题目 看题目的时候一脸懵,直到看见数据范围 \[N \le 10,\; M \le 10,\; Q \le 50 \] 之后才意识到问题的严重性. 毕竟数据如此的小,我们完全可以用阶乘复杂度算法卡过去 ...

  10. JUC学习笔记(三)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...