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 =”的大小设置的大一些。