2022-11-04

一、元数据

1、元数据的说明:

  元数据就是指描述数据的数据,例如:数据有多少列、数据的列名称等。

2、使用的代码:

1 ResultSetMetaData metaData = rs.getMetaData();
2 int columnCount = metaData.getColumnCount();

    说明:第1行中的rs表示结果集

二、sql的注入

说明:在sql语句中查询具有某个工号的员工的详细信息时,需要在sql语句中使用占位符。之后再使用“setObject”为里面的内容赋值。

public void test02() throws SQLException {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入你要查询的员工的编号:");
    String id = input.nextLine();
    input.close();
    String url = "jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC";
    Connection conn = DriverManager.getConnection(url, "数据库用户名", "数据库密码");
    String sql = "SELECT * FROM t_employee WHERE eid= ?";
    PreparedStatement pst = conn.prepareStatement(sql);
    pst.setObject(1,id);
    ResultSet rs = pst.executeQuery();
    ResultSetMetaData metaData = rs.getMetaData();
    int columnCount = metaData.getColumnCount();
    //遍历结果集
    while (rs.next()){
        for (int i = 1; i <= columnCount; i++) {
            System.out.print(rs.getObject(i)+"\t");
        }
        System.out.println();
    }
    rs.close();
    pst.close();
    conn.close();
}

2022-11-05

二、blob数据类型

1、blob数据类型说明:

   blob数据类型是用来存放图片信息的。

2、使用实例:

  (1)在数据库中创建一个表,设置表中的字段有(username,password,photo),将其中的"photo"的类型设置为“blob”.在IDEA中创建java项目,设置一个模块,在该项目下添加资源。涉及到的资源有“MySQL与java向连接的接口”,为“mysql-connector-java-8.0.19.jar”。创建一个java类。

  (2)在创建的java类中,首先输入要在数据库中添加的信息。使用输入流(Scanner)。之后建立与数据库的连接,设置url。使用“驱动管理类(DriverManager)”的“getConnection”方法将路由、用户名、密码三个参数传入,使MySQL与java建立连接。

  (3)之后,设置对应的sql语句将键盘输入的数据存储到数据库中。传入的数据在sql语句中首先用占位符(?)来占位。之后将建立好的连接进行预编译(预编译的目的是降低DBMS运行的时间,即它不用编译了,直接执行sql语句即可)。之后设置占位符的参数,使用的是预编译对象的setObject函数。将传入的数据放置到数据库中,设置的是预编译对象的executeUpdate函数,它返回的是一个整数,用来表示受影响的行数。之后将流对象关闭(有预编译对象、连接对象)。

详细的代码如下:

package com.haha.problem;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Problem3 {
    @Test
    public void test03() throws SQLException, FileNotFoundException {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = input.next();
        System.out.println("请输入密码:");
        String password = input.next();
        System.out.println("请输入图片:");
        String path = input.next(); //先使用路径表示
        input.close();
        String url = "jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC";
        Connection conn = DriverManager.getConnection(url, "数据库的用户名", "数据库密码");
        String sql = "INSERT INTO t_user VALUES (?,md5(?),?)";
        PreparedStatement pst = conn.prepareStatement(sql);
        //设置参数的内容
        pst.setObject(1,username);
        pst.setObject(2,password);
        pst.setObject(3,new FileInputStream(path));
        int len = pst.executeUpdate();
        System.out.println(len>0?"添加成功":"添加失败");
        pst.close();
        conn.close();
    }
}

    说明:上述的代码中使用了一个“test”,是一个“junit”测试工具。在sql语句添加数据中,第二个占位符使用的是“md5(?)”,这里表示将输入的数据(password)进行加密,设置为密文。

      之后在运行代码时,第三个这里输入的图片存放的路径。

    注意:如果存入的图片的大小太大的话,应该将在数据库中设置的“photo”的类型进行转换,可以设置为“mediumblob”或者是“longblob”。

      在服务器端和客户端中的blob是有大小限制的,默认的是max_allowed_packet = 4M。可以根据业务将sql中的配置文件中的“max_allowed_packet =”的大小设置的大一些。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。