MySQL学习(一)——Java连接MySql数据库

  • API详解: 获得语句执行

  1. String sql = "Insert into category(cid, cname) values('c007', '分类')";
  2. 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详解: 处理结果集

  1. rs.next(); //光标移动到下一个行
  2. rs.getInt(1); //获取第几列
  • API详解: 释放资源

  1. rs.close();
  2. rtmt.close();
  3. con.close();
  • 登录实例

  1. package cn.Douzi.test;

  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;

  7. import org.junit.Test;


  8. public class TestLogin {

  9. /**
  10. * 用户登录方法
  11. * @param username
  12. * @param password
  13. * @throws ClassNotFoundException
  14. * @throws SQLException
  15. */
  16. public void login(String username, String password) throws ClassNotFoundException, SQLException
  17. {
  18. //1.注册驱动
  19. Class.forName("com.mysql.jdbc.Driver");
  20. //2. 获取连接
  21. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/books", "root", "sky");
  22. //3.创建执行sql语句对象
  23. Statement stmt = conn.createStatement();
  24. //4.书写一个sql语句
  25. String sql = "select * from user where "+"username='"+username+"' and password='"+password+"'";
  26. //5.执行sql语句
  27. ResultSet rs = stmt.executeQuery(sql);
  28. //6.对结果集进行处理
  29. if (rs.next()) {
  30. System.out.println("恭喜你," + username + ", 登录成功!");
  31. }
  32. else {
  33. System.out.println("账号或密码错误");
  34. }
  35.  
  36. if (rs != null) rs.close();
  37. if (stmt != null) stmt.close();
  38. if (conn != null) conn.close();
  39.  
  40. }
  41.  
  42. @Test
  43. public void testLogin() {
  44. try {
  45. login("Douzi", "skylove1230");
  46. } catch (ClassNotFoundException | SQLException e) {
  47. // TODO Auto-generated catch block
  48. e.printStackTrace();
  49. }
  50. }
  51. }

SQL注入问题

下面这个也可以执行成功

因为执行的时候,sql语句是拼接进去的

  1. @Test
  2. public void testLogin() {
  3. try {
  4. login("douzi' or 'jdouzi", "skylove1230");
  5. } catch (ClassNotFoundException | SQLException e) {
  6. // TODO Auto-generated catch block
  7. e.printStackTrace();
  8. }
  9. }
  • 防止SQL攻击

  • 过滤用户输入的数据中释放包含非法字符;

  • 分步校验! 先使用用户名来查询用户, 如果找到了,再比较密码;

  • 使用 PreparedStatement

  • PreparedStatement

叫做 预处理声明

PreparedStatement是Statement的子接口

  • 防止SQL攻击

  • 提高代码的可读性,以可维护性;

  • 提高效率

  • PreparedStatement的使用(解决Sql注入问题)

  1. public void login1(String username, String password) throws ClassNotFoundException, SQLException
  2. {
  3. //1.注册驱动
  4. Class.forName("com.mysql.jdbc.Driver");
  5. //2.获取连接
  6. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/books", "root", "skylove1230");
  7. //3.编写sql语句
  8. String sql = "select * from user where username=? and password=?";
  9. //4.创建预处理对象
  10. PreparedStatement pstmt = conn.prepareStatement(sql);
  11. //5.设置参数(给占位符)
  12. pstmt.setString(1, username);
  13. pstmt.setString(2, password);
  14. //6.执行查询
  15. ResultSet rs = pstmt.executeQuery();
  16. //6.对结果集进行处理
  17. if (rs.next()) {
  18. System.out.println("恭喜你," + username + ", 登录成功!");
  19. }
  20. else {
  21. System.out.println("账号或密码错误");
  22. }
  23. if (rs != null) rs.close();
  24. if (pstmt != null) pstmt.close();
  25. if (conn != null) conn.close();
  26. }

下面语句则不能通过

  1. @Test
  2. public void testLogin() {
  3. try {
  4. login1("douzi' or 'jdouzi", "sky");
  5. } catch (ClassNotFoundException | SQLException e) {
  6. // TODO Auto-generated catch block
  7. e.printStackTrace();
  8. }
  9.  
  10. }

MySQL学习(一)——Java连接MySql数据库的更多相关文章

  1. MySQL学习(三)——Java连接MySQL数据库

    1.什么是JDBC? JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据 ...

  2. Java 连接 MySQL 数据库

    最近想学习一下 Java 连接 MySQL 数据库,于是有了这样的一些问题&解决办法. 首先是解决 JDBC(Java Data Base Connectivity)驱动问题,因为默认安装的J ...

  3. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

  4. Java连接MySQL数据库及简单操作代码

    1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...

  5. 转载:Java连接MySQL 数据库的正确操作流程

    转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html       以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...

  6. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  7. 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类

    一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...

  8. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  9. java连接MySql数据库 zeroDateTimeBehavior

    JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常, 就是所见的:java.sql.SQLException: Cannot convert va ...

随机推荐

  1. Head First Java & 异常

     

  2. Head First Java & final

  3. AWS EC2安装docker时的问题

    在AWS EC2的实例(Ubuntu)里面安装docker时,使用通常的安装步骤 :~$ sudo apt-get update :~$ sudo apt-get install docker 安装完 ...

  4. Spring 2.0

    ProductBacklog:继续向下细化; 1.界面美化,统一界面风格,以简洁美观为主: 2.丰富版面的内容,吸引用户: 3.尝试增加新的版面: Sprint 计划会议:确定此次冲刺要完成的目标 1 ...

  5. Scrum会议

    小组名称:天天向上 项目名称:连连看 成员:王森(Master) 张金生 张政 栾骄阳 时间:2016.10.18 会议内容: 已完成的内容: 张政排除连续点击Button会自动消失的Bug,张金生收 ...

  6. (一)Jmeter 简单的录制

    JMeter介绍 1.JMeter,一个100%的纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态资源的性能(文件.Servle ...

  7. requests爬取知乎话题和子话题

    zhihu.py # *_*coding:utf-8 *_* import pymysql import requests from lxml import etree from requests_t ...

  8. [微软官网]SQLSERVER的版本信息

    来源:https://docs.microsoft.com/zh-cn/sql/sql-server/editions-and-components-of-sql-server-2017?view=s ...

  9. 微信小程序 功能函数picker-view的弹出模态

    <view class="list"> <form bindsubmit="formSubmit"> <view class=&q ...

  10. SQL中字符串截取、连接、替换等函数的用法

    一.SQL中SUBSTRING函数的用法1.功能:返回字符.二进制.文本或图像表达式的一部分2.语法:SUBSTRING ( expression, start, length )3.QL 中的 su ...