JDBC MySQL
1. SQL语句
美女小姐姐写的
SQL文件导入到数据库
mysql -uroot -p密码;
create database 数据库名称;
use 数据库名称;
source d:\文件名.sql;
其他导入的方法
SELECT 查询语句
查询所有列
SELECT * FROM 表名称;
查询指定列
SELECT 列名称 FROM 表名称;
WHERE 条件查询
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值;
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
DISTINCT 除去查询到的重复数据
SELECT DISTINCT 列名称 FROM 表名称;
AND & OR 条件查询
AND运算符
SELECT * FROM 表名称 WHERE 列 运算符 值 AND 列 运算符 值;
OR运算符
SELECT * FROM 表名称 WHERE 列 运算符 值 OR 列 运算符 值;
ESC & DESC 排序
- ESC : 升序排列
- DESC : 降序排列
SELECT * FROM 表名称 ORDER BY 列1,列2 DESC;
INSERT 插入语句
插入数据
INSERT INTO 表名称 VALUES (值1, 值2,....);
指定列插入数据
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);
UPDATE 更新语句
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
DELECT 删除语句
DELETE FROM 表名称 WHERE 列名称 = 值;
FOR UPDATE 行级锁(悲观锁 )
作用:在当前事务未完成之前,其他进程无法修改所查询到的行,也叫行级锁
SELECT * FROM 表名称 FOR UPDATE;
2. JDBC
动力节点JDBC视频
2.1 连接数据库
配置数据库连接所需的数据
在src
目录下创建:jdbc.properties
文件
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/“数据库名称”
user = root
pwd = 123456
import java.sql.*;
import java.util.ResourceBundle;public class JDBCConnection {public static void main(String[] args) {//从配置文件读取驱动,地址,用户名,密码的配置ResourceBundle bundle = ResourceBundle.getBundle("jdbc");String driver = bundle.getString("driver");String url = bundle.getString("url");String user = bundle.getString("user");String pwd = bundle.getString("pwd");Connection connection = null;Statement statement = null;ResultSet resultSet = null;try {// 加载驱动.使用反射机制让类加载,执行static代码Class.forName(driver);
// 获取数据库操作对象connection = DriverManager.getConnection(url, user, pwd);
// 创建SQL语句的执行对象statement = connection.createStatement();
// 执行SQL语句
// boolean execute = statement.execute("");//执行CREATE,返回是否成功
// int i = statement.executeUpdate("");//执行INSERT\UPDATA\DELETE,返回值表示该语句影响了多少条数据resultSet = statement.executeQuery("");//执行SELECT,返回查询的结果集
// resultSet.next()每执行一次都将指向下一行数据,如果返回值为false,表示下一行没有数据了while (resultSet.next()){String name = resultSet.getString("列名");}} catch (SQLException | ClassNotFoundException e) {System.out.println("连接失败");e.printStackTrace();} finally {//无论上述代码执行成功,都需要依次关闭if (resultSet != null)try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}if (statement != null)try {statement.close();} catch (SQLException e) {e.printStackTrace();}if (connection != null)try {connection.close();System.out.println("断开数据库连接成功");} catch (SQLException e) {System.out.println("断开数据库连接失败");e.printStackTrace();}}}
}
2.2 使用JDBC实现用户登录
使用下面的方法时用户使用sql注入任何人都可以登录
用户名:abc
密码:cba’ or ‘1’='1
当密码这段字符拼接到sql查询语句时,判断条件任何情况都是true,返回查询结果不为空。
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Scanner;public class LoginTest1 {public static void main(String[] args) {Map<String , String> userInfo = inputInfo();boolean login = DBconnction("jdbc", userInfo);System.out.println(login? "欢迎登录" : "用户名或密码错误");}/** 用户输入用户名和密码* */private static Map<String,String> inputInfo() {System.out.println("输入用户名:");Scanner scanner = new Scanner(System.in);String user = scanner.nextLine();System.out.println("输入密码:");String pwd = scanner.nextLine();Map<String ,String > userInfo = new HashMap<>();userInfo.put("userName", user);userInfo.put("pwd", pwd);return userInfo;}/*连接数据库查询用户和密码是否正确*/public static boolean DBconnction(String properties, Map<String, String> userInfo) {ResourceBundle bundle = ResourceBundle.getBundle(properties);//数据库连接需要的信息String driver = bundle.getString("driver");String url = bundle.getString("url");String user = bundle.getString("user");String pwd = bundle.getString("pwd");//用户输入的用户名和密码String userName = userInfo.get("userName");String userPwd = userInfo.get("pwd");Connection connection = null;Statement statement = null;ResultSet resultSet = null;boolean login = false;try {Class.forName(driver);connection = DriverManager.getConnection(url, user, pwd);statement = connection.createStatement();resultSet = statement.executeQuery("select * from user where loginname = '"+userName+"' and loginpwd='"+userPwd+"'");if (resultSet.next()) {System.out.println(resultSet.getString("loginname"));login = true;}} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} finally {if (resultSet != null)try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}if (statement!=null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection!=null){try{connection.close();}catch (SQLException e){e.printStackTrace();}}}return login;}
}
2.2.1 防止Sql注入PreparedStatement
通过对Sql语句预处理的方法,解决sql注入的问题。
- 先将sql语句编译,预处理时不带有用户输入的内容
- 通过
setString()
或者setInt()
等方法将用户输入的内容传入到已经处理过的sql语句- 用户输入的内容将不能再作为关键字参与到sql语句的执行
public static boolean DBconnction(String properties, Map<String, String> userInfo) {ResourceBundle bundle = ResourceBundle.getBundle(properties);//数据库连接需要的信息String driver = bundle.getString("driver");String url = bundle.getString("url");String user = bundle.getString("user");String pwd = bundle.getString("pwd");//用户输入的用户名和密码String userName = userInfo.get("userName");String userPwd = userInfo.get("pwd");Connection connection = null;// 1. 声明PreparedStatementPreparedStatement preparedStatement = null;ResultSet resultSet = null;boolean login = false;try {Class.forName(driver);connection = DriverManager.getConnection(url, user, pwd);// 2. sql语句中的外接字符全部用?占位符代替String sql = "select * from user where loginname = ? and loginpwd=?";// 3. 重点:在编译时就将sql语句预处理。通过占位符传入的值将不能作为sql语句的关键字//注意这连个单词:prepared处理过的;prepare预处理preparedStatement = connection.prepareStatement(sql);// 4. 给占位符传值,参数(第几个占位符,值)preparedStatement.setString(1, userName);preparedStatement.setString(2, userPwd);// 5. 执行预处理过的Sql语句resultSet = preparedStatement.executeQuery();if (resultSet.next()) {System.out.println(resultSet.getString("loginname"));login = true;}} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} return login;}
2.3 事务机制commit
JDBC在
.execute();
方法执行后会自动向数据库服务器提交事务。
有些场景是需要多条sql同时执行,例如:银行转账业务
实现:
- 关闭事务自动提交:
conn.setAutoCommit(false);
- 符合条件时手动提交事务:
conn.commit();
- 如果发生异常,在异常处理中回滚事务:
conn.rollback();
import java.sql.*;
import java.util.ResourceBundle;public class JDBCCommit {public static void main(String[] args) {Connection conn = null;PreparedStatement ppSttmt = null;try {ResourceBundle jdbcBundle = ResourceBundle.getBundle("jdbc");Class.forName(jdbcBundle.getString("driver"));conn = DriverManager.getConnection(jdbcBundle.getString("url"),jdbcBundle.getString("user"), jdbcBundle.getString("pwd"));String sql = "UPDATE bank set money=? where account=?";ppSttmt = conn.prepareStatement(sql);//假设这两次提交的updata修改数据是银行转账操作,如果两次提交事务中发生了故障,那么操作就是错误的。//这是因为JDBC是自动提交事务的,如果想让两个更新操作作为一个事务操作,那么要关闭自动提交事务conn.setAutoCommit(false);//1. 关闭事务自动提交ppSttmt.setDouble(1,10000);ppSttmt.setInt(2,111);int i = ppSttmt.executeUpdate();ppSttmt.setDouble(1,10000);ppSttmt.setInt(2,222);i = i + ppSttmt.executeUpdate();// 如果i==2,说明两次更新的操作已经准备好,等待向服务器提交if ( i== 2){conn.commit();//2. 符合条件,手动提交事务System.out.println("事务提交成功");}} catch (Exception e) {if ( conn != null) {try {conn.rollback();// 3. 如发生异常,事务回滚} catch (SQLException ex) {ex.printStackTrace();}}e.printStackTrace();}}
}
连接Access数据库
- MAVEN
<!-- https://mvnrepository.com/artifact/net.sf.ucanaccess/ucanaccess -->
<dependency><groupId>net.sf.ucanaccess</groupId><artifactId>ucanaccess</artifactId><version>5.0.1</version>
</dependency>
引用不成功,下载后安装到maven仓库
mvn install:install-file -Dfile=jar包的位置(参数一) -DgroupId=groupId(参数二) -DartifactId=artifactId(参数三) -Dversion=version(参数四) -Dpackaging=jar
连接数据库
public void accesstest(){try {//加载驱动Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");//建立连接,用户名和密码没有设置Connection connection = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\Documents\\java\\db\\report.accdb","","");// 查询数据
/* String sql = "select * from person_info";PreparedStatement ps = connection.prepareStatement(sql);ResultSet resultSet = ps.executeQuery();while (resultSet.next()){System.out.println(resultSet.getString(2));}*/// 插入数据String sql = "insert into person_info (person_name) values (?)";PreparedStatement ps = connection.prepareStatement(sql);ps.setString(1,"张三");int i = ps.executeUpdate();System.out.println(i);} catch (Exception e) {System.out.println("AccessDB connection fail");e.printStackTrace();}}
3.使用PowerDesigner创建数据库模型
下载PowerDesigner
保存为.sql文件
通过sql文件在数据库中创建表
4. MySQL 安装过程
没有提示的界面直接下一步
- 选择精简版
- 一路下一步
一直下一步
JDBC MySQL相关推荐
- jdbc mysql查询显示图片_在实现JDBC时如何显示存储引擎-MySQL CONNECTION查询?
使用SELECT ENGINE显示存储引擎名称.让我们首先创建一个表-create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREME ...
- jdbc mysql select_java连接mysql数据库并使用jdbc进行查询详解
public Connection getCon() { //数据库连接名称 String username="root"; //数据库连接密码 String password=& ...
- 在报No suitable driver found for jdbc:mysql情况下,我是如何一步一步实现jmeter成功连接mysql...
1.按照网上查的方法,将mysql-connector-java-5.1.42-bin.jar包copy在apache-jmeter-2.12\lib\ext下,执行测试计划,查看结果树,报 No s ...
- jdbc mysql 返回游标_使用JdbcTemplate流式(游标)读取数据库
前言 生产环境中经常使用数据库分页的方式来控制一次获取的数据量,而数据处理中经常会有另外一种场景: 从一个数据库表中读取所有数据进行处理并将结果保存在其他数据库或文件或NoSql数据库中. 这时候也可 ...
- jdbc mysql连接测试_JDBC测试计划-连接mysql
一.测试环境准备 mysql:5.5 JDBC驱动:mysql-connector-java-5.1.30.jar 文件复制到JMeter/lib目录下 JMeter:jmeter-3.2 二.设计测 ...
- spark并发读mysql_spark jdbc(mysql) 读取并发度优化
很多人在spark中使用默认提供的jdbc方法时,在数据库数据较大时经常发现任务 hang 住,其实是单线程任务过重导致,这时候需要提高读取的并发度. 下文以 mysql 为例进行说明. 在spark ...
- jdbc mysql 函数 慢_java jdbc addBatch()提交mysql速度过慢
我用的是java jdbc的addBatch批量插入数据,但是速度好慢有什么好的方案吗 差不多插入1000条数据需要30s,下面贴出代码大家看看哪里不规范,或者给个更快的方法 //jdbc构造的URL ...
- jdbc mysql 自动重连_Mysql中JDBC如何完成自动重连机制的案例
软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...
- jdbc mysql参数_Mysql JDBC URL中的重要参数有啊些
以下的文章主要介绍的是Mysql JDBC URL中几个比较重要参数的详细说明,我们大家都知道MySQL数据库中存在JDBC URL几个比较重要参数,此文还将对其具体实例进行介绍,希望大家通过本文能得 ...
- jdbc mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解
JDBC是Java程序连接和访问各种数据库的API,它可以提供Java程序和各种数据库之间的连接服务,下面是爱站技术频道小编为大家带来的JDBC实现Mysql自动重连机制的方法详解. 日志:using ...
最新文章
- jsonp 200 进去error_同样是专科,400分考上的和200分就能进的,差距其实挺明显
- 为什么textbox 得不到更改后的值
- go语言中没有隐藏的this指针
- JavaFX 2中的PopupMenu
- 以计算机谈人文科学,阅读下面一段文字,完成问题 自20世纪80年代以来,世界都在谈“软科学技术”,何谓软科学?经常听人说:“脑子不够使。”这其实就是对软科学的需求。于是,从古至今,...
- 2018谷歌学术影响因子发布:NIPS首次跃进Top 100,CVPR排名泛AI领域第一
- (TPC-H测试 SF=10,SF=200) PostgreSQL 11 vs 10 vs Deepgreen
- 机器学习—模型超参数调优之网格搜索与随机搜索
- 多实例学习PCNN在关系抽取中的应用
- win10专业版关闭Windows Defender Antivirus
- 1月16日服务器例行维护更新公告,1月16日9—11点例行更新维护公告
- APT样本分析 -plugx家族RAT⽊⻢
- 10分钟带你彻底搞懂微内核架构
- “飞檐走壁”的铁路“小黄人”:昼伏夜出护航春运
- android p 牛轧糖_如何启用Android牛轧糖的猫收集复活节彩蛋
- Flutter网络请求库DIO入门文档,实战案例
- 基于路灯控制系统的线缆防盗方案
- DFTIDFT学习笔记
- oracle存储过程在哪里找,oracle存储过程常用的技巧(详)
- sai动漫人物眼睛素描教程
热门文章
- 2024中山大学计算机考研信息汇总
- 给Android车载蓝牙音乐添加盘控控制功能
- 儿时的生活还记得吗?
- 腾讯云大数据流计算 Oceanus 在 MySQL CDC Connector 的核心优化
- Linux-如何查看进程和关闭进程
- Java整型变量和整型常量
- 重启计算机关闭账户,电脑开机重启提示您的账户已被停用怎么办
- xxx.pth或者xxx.pt is a zip archive(did you mean to use torch.jit.load()?问题解决
- ZLMediaKit源码分析 - NotifyCenter
- dllhell 听说过吗?_您已经听说过X25519,但是X448有何特别之处?