最近在做一个mybatis的sql审计,所有需要原生的使用一下jdbc,基于次,复习一下自己的基础知识

github 地址: https://github.com/warriorg/nodes/tree/master/java/basic/src/main/java/me/warriorg/jdbc

package test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.lang.invoke.MethodHandles;
import java.sql.*;
import java.util.Properties;
import java.util.UUID; public class CRUD {
private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final String dbURL = "jdbc:h2:~/test";
private final String dbDriver = "org.h2.Driver";
private final String dbUsername = "sa";
private final String dbPassword = ""; private final String tableSql = "CREATE TABLE IF NOT EXISTS Users\n" +
"(\n" +
" id varchar(40),\n" +
" account varchar(20),\n" +
" password varchar(40),\n" +
" name varchar(20),\n" +
" create_date timestamp,\n" +
" disable boolean\n" +
");"; public CRUD() {
try {
Class.forName(dbDriver);
} catch (ClassNotFoundException e) {
logger.error("初始化驱动: " + e.getMessage(), e);
}
} private Connection getConnection() throws SQLException {
Properties props = new Properties();
props.setProperty("user", dbUsername);
props.setProperty("password", dbPassword);
return DriverManager.getConnection(dbURL, props);
} private void createTable() {
try (Connection conn = getConnection()) {
logger.debug("数据库连接状态: {}", conn);
try (Statement statement = conn.createStatement()) {
statement.execute(tableSql);
logger.debug("数据库创建表成功");
}
} catch (SQLException ex) {
logger.error("数据库连接错误: " + ex.getMessage(), ex);
}
} private void select() {
String sql = "SELECT * FROM Users"; try (Connection conn = getConnection()) {
Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet result = statement.executeQuery(sql); int rowcount = 0;
if (result.last()) {
rowcount = result.getRow();
result.beforeFirst();
}
logger.debug("获取{}数据总数:{}", result.getMetaData().getTableName(1), rowcount); while (result.next()) {
String id = result.getString("id");
String account = result.getString(2);
String password = result.getString(3);
String name = result.getString("name");
Object createDate = result.getObject(5);
Object disable = result.getObject(6); logger.debug("获取{}数据 row:{} id:{} account:{} password:{} name:{} createDate:{} disable:{}",
result.getMetaData().getTableName(1), result.getRow(), id, account, password, name, createDate, disable);
}
result.close();
statement.close(); } catch (SQLException ex) {
logger.error("数据库连接错误: " + ex.getMessage(), ex);
} } private void insert() {
String sql = "INSERT INTO Users (id, account, password, name, create_date, disable) VALUES (?, ?, ?, ?, ?, ?)";
try (Connection conn = getConnection()) {
logger.debug("数据库连接状态: {}", conn);
try (PreparedStatement statement = conn.prepareStatement(sql)) {
statement.setObject(1, UUID.randomUUID().toString());
statement.setObject(2, "admin");
statement.setObject(3, "123456");
statement.setObject(4, "admin");
statement.setTimestamp(5, new Timestamp(System.currentTimeMillis()));
statement.setBoolean(6, false);
int rowsInserted = statement.executeUpdate();
if (rowsInserted > 0) {
logger.debug("插入数据成功");
}
}
} catch (SQLException ex) {
logger.error("数据库连接错误: " + ex.getMessage(), ex);
}
} private void update() {
String sql = "UPDATE Users SET name = ? WHERE account = ?";
try (Connection conn = getConnection()) {
logger.debug("数据库连接状态: {}", conn);
try (PreparedStatement statement = conn.prepareStatement(sql)) {
statement.setObject(1, "不想当管理");
statement.setObject(2, "admin");
int rowsInserted = statement.executeUpdate();
if (rowsInserted > 0) {
logger.debug("更新数据成功");
}
}
} catch (SQLException ex) {
logger.error("数据库连接错误: " + ex.getMessage(), ex);
}
} private void delete() {
String sql = "DELETE FROM Users WHERE account=?"; try (Connection conn = getConnection()) {
logger.debug("数据库连接状态: {}", conn);
try (PreparedStatement statement = conn.prepareStatement(sql)) {
statement.setObject(1, "admin");
int rowsInserted = statement.executeUpdate();
if (rowsInserted > 0) {
logger.debug("删除数据成功");
}
}
} catch (SQLException ex) {
logger.error("数据库连接错误: " + ex.getMessage(), ex);
}
} public static void main(String[] args) throws ClassNotFoundException {
CRUD crud = new CRUD();
crud.createTable();
crud.insert();
crud.select();
crud.update();
crud.select();
crud.delete();
crud.select();
} }

jdbc crud的更多相关文章

  1. JDBC第一次学习

     JDBC(Java Data Base Connectivity,java数据库连接),由一些类和接口构成的API,它是J2SE的一部分,由java.sql,javax.sql包组成. 应用程序.J ...

  2. springboot08 jdbc

    一.JDBC&连接池 1. jdbc介绍 ​ JDBC(Java DataBase Connectivity ,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数 ...

  3. JAVA企业级开发-jdbc入门(09)

    一. jdbc介绍 JDBC全称为:Java DataBase Connectivity(java数据库连接). SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JD ...

  4. Spring Boot 系列教程4-JDBC

    JDBC Java Data Base Connectivity,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.不管是Hibe ...

  5. 第70节:Java中xml和tomcat

    第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...

  6. Hbase 系统架构(zhuan)

    一.系统架构 客户端连接hbase依赖于zookeeper,hbase存储依赖于hadoop client: 1.包含访问 hbase 的接口, client 维护着一些 cache(缓存) 来加快对 ...

  7. phoenix技术(安装部署和基本使用)讲解

    1.phoenix简介 Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问.Apache Phoenix会将用户编写 ...

  8. Hbase(五) hbase内部原理

    一.系统架构 客户端连接hbase依赖于zookeeper,hbase存储依赖于hadoop client: 1.包含访问 hbase 的接口, client 维护着一些 cache(缓存) 来加快对 ...

  9. Hadoop 面试总结

    1.简要描述如何安装配置一个开源的hadoop,只描述即可,列出完整步骤. a.创建一个用户和用户组,用来管理hadoop项目 b.修改确定ip地址:vim /etc/sysconfig/networ ...

随机推荐

  1. Java复习总结——String

    概览 String被声明为final,因此它不可被继承. public final class String implements java.io.Serializable, Comparable&l ...

  2. k8s list

    https://mp.weixin.qq.com/s?__biz=MzI5ODQ2MzI3NQ==&mid=2247486341&idx=1&sn=53b0c92deb0cb8 ...

  3. apue——无缓冲读写操作

    stdrw.c文件 #include "apue.h" #define BUFFSIZE 4096 #include <stdio.h> int main(int ar ...

  4. Kubernetes之canal的网络策略(NetworkPolicy)

    安装要求: 1.我们这里安装的是3.3的版本.kubernetes的要求: 支持的版本 1.10 1.11 1.12 2.CNI插件需要启用,Calico安装为CNI插件.必须通过传递--networ ...

  5. hadoop记录-浅析Hadoop中的DistCp和FastCopy(转载)

    DistCp(Distributed Copy)是用于大规模集群内部或者集群之间的高性能拷贝工具. 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成. 它把文件和目录的列表作为ma ...

  6. python基础学习小结

    Python是一门面向对象的解释性语言(脚本语言),这一类语言的特点就是不用编译,程序在运行的过程中,由对应的解释器向CPU进行翻译,个人理解就是一边编译一边执行.而JAVA这一类语言是需要预先编译的 ...

  7. Aras 发布Web Services

    https://blog.csdn.net/plm888/article/details/10890173

  8. luogu P5324 [BJOI2019]删数

    传送门 不如先考虑暴力,能删的序列首先有\(1,2,3...n\),还有就是升序排序后从后往前放数,第\(i\)位要么放\(i\),要么放\(i+1\)位置的数,例如\(1,2,4,4,5,6,9,9 ...

  9. python使用pip 18以上版本离线安装package

    在内网办公环境,常常需要使用离线安装python的软件包. 一般都会先在互联网的电脑上下载,再拷贝到内网办公机器上进行离线安装. 一般来说,我是这样做的: 1.拷贝和外网电脑上版本一致,且32位或64 ...

  10. pptpd免radius限速、限连接+自由定制功能脚本

    因为就几个用户懒得上radius,所以手写了一个用户管理脚本. 脚本很简单,具体直接看repo吧. https://github.com/esxgx/pptpd-exscripts