MySQL学习(一)——Java连接MySql数据库
MySQL学习(一)——Java连接MySql数据库
API详解: 获得语句执行
String sql = "Insert into category(cid, cname) values('c007', '分类')";
Statement 语句执行者代码: Statement stmt = con.createStatement();
常用方法:
执行SQL语句
int executeUpdate(String sql): ——执行insert, update delete 语句.(DML语句)
ResultSet executeQuery(String sql);——执行select语句. (DQL语句)
boolean execute(String sql);——执行select返回true执行其他的语句返回false
返回true, 需要使用getResultSet()获得查询结果
返回false, 需要使用getUpdateCount() 获得影响行数
执行批处理:
addBatch(String sql);
clearBatch();
executeBatch();
API详解: 处理结果集
rs.next(); //光标移动到下一个行
rs.getInt(1); //获取第几列
API详解: 释放资源
rs.close();
rtmt.close();
con.close();
登录实例
package cn.Douzi.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
public class TestLogin {
/**
* 用户登录方法
* @param username
* @param password
* @throws ClassNotFoundException
* @throws SQLException
*/
public void login(String username, String password) throws ClassNotFoundException, SQLException
{
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/books", "root", "sky");
//3.创建执行sql语句对象
Statement stmt = conn.createStatement();
//4.书写一个sql语句
String sql = "select * from user where "+"username='"+username+"' and password='"+password+"'";
//5.执行sql语句
ResultSet rs = stmt.executeQuery(sql);
//6.对结果集进行处理
if (rs.next()) {
System.out.println("恭喜你," + username + ", 登录成功!");
}
else {
System.out.println("账号或密码错误");
} if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close(); } @Test
public void testLogin() {
try {
login("Douzi", "skylove1230");
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
SQL注入问题
下面这个也可以执行成功
因为执行的时候,sql语句是拼接进去的
@Test
public void testLogin() {
try {
login("douzi' or 'jdouzi", "skylove1230");
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
防止SQL攻击
过滤用户输入的数据中释放包含非法字符;
分步校验! 先使用用户名来查询用户, 如果找到了,再比较密码;
使用 PreparedStatement
PreparedStatement
叫做 预处理声明
PreparedStatement是Statement的子接口
防止SQL攻击
提高代码的可读性,以可维护性;
提高效率
PreparedStatement的使用(解决Sql注入问题)
public void login1(String username, String password) throws ClassNotFoundException, SQLException
{
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/books", "root", "skylove1230");
//3.编写sql语句
String sql = "select * from user where username=? and password=?";
//4.创建预处理对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//5.设置参数(给占位符)
pstmt.setString(1, username);
pstmt.setString(2, password);
//6.执行查询
ResultSet rs = pstmt.executeQuery(); //6.对结果集进行处理
if (rs.next()) {
System.out.println("恭喜你," + username + ", 登录成功!");
}
else {
System.out.println("账号或密码错误");
} if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
下面语句则不能通过
@Test
public void testLogin() {
try {
login1("douzi' or 'jdouzi", "sky");
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
MySQL学习(一)——Java连接MySql数据库的更多相关文章
- MySQL学习(三)——Java连接MySQL数据库
1.什么是JDBC? JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据 ...
- Java 连接 MySQL 数据库
最近想学习一下 Java 连接 MySQL 数据库,于是有了这样的一些问题&解决办法. 首先是解决 JDBC(Java Data Base Connectivity)驱动问题,因为默认安装的J ...
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- Java连接MySQL数据库及简单操作代码
1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...
- 转载:Java连接MySQL 数据库的正确操作流程
转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html 以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类
一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
- java连接MySql数据库 zeroDateTimeBehavior
JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常, 就是所见的:java.sql.SQLException: Cannot convert va ...
随机推荐
- mysql hibernate 关于默认值
字段的默认值 写 NOT NULL DEFAULT 0 等等 一直不行, 算了 干脆在创建的时候 在代码set好了 版权声明:本文为博主原创文章,未经博主允许不得转载.
- POJ 1112 Team Them Up! 二分图判定+01背包
题目链接: http://poj.org/problem?id=1112 Team Them Up! Time Limit: 1000MSMemory Limit: 10000K 问题描述 Your ...
- (一)Jmeter 简单的录制
JMeter介绍 1.JMeter,一个100%的纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态资源的性能(文件.Servle ...
- 多校联赛7 1001 hdu 4666(最远哈曼顿距离+优先队列)
吐个糟,尼玛今天被虐成狗了,一题都没搞出来,这题搞了N久居然还是搞不出来,一直TLE,最后还是参考别人代码才领悟的,思路就这么简单, 就是不会转弯,看着模板却不会改,艹,真怀疑自己是不是个笨蛋题意:求 ...
- path变量修改后无法保存
Eclipse启动时出现错误: A Java Runtime Environment (JRE) or Java Development Kit(JDK) must be available in o ...
- 超计算(Hyper computation)模型
超计算(Hyper computation)模型 作者:Xyan Xcllet链接:https://www.zhihu.com/question/21579465/answer/106995708来源 ...
- MT【161】韦恩图
(清华2017.4.29标准学术能力测试25) 若$N$的三个子集$A,B,C$满足$|A\cap B|=|B\cap C|=|C\cap A|=1$,且$A\cap B\cap C=\varnoth ...
- BZOJ 1013 | 一份写了一堆注释的高斯消元题解
题意 给出\(n\)维直角坐标系中\(n + 1\)个点的坐标,它们都在一个\(n\)维球面上,求球心坐标. 题解 设球面上某两个点坐标为\((a_1, a_2, ... a_n)\)和\((b_1, ...
- 51nod 1766 树上的最远点对 | LCA ST表 线段树 树的直径
51nod 1766 树上的最远点对 | LCA ST表 线段树 树的直径 题面 n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个区间内各选一点之间的最大距离,即 ...
- Android Studio多Module使用 aar 依赖包 丢包解决
FAQ: AAR打包引用丢包问题, jar, aar, dependency 嵌套层级依赖的丢失 问: aar包中,如何包含第三方依赖库? 如果直接作为module 依赖是没有问题的,但是如果打包成a ...