代码块

  我在写markdown时,发现代码块有三种表示方法:

1.用于段落中有几句代码,不需要建立块,直接用``进行标识。
2.常用标识:使用三个```开头,最后使用```结束,可以指定哪种语言。
3.在代码之前另起一行,输入四个空格作为代码段标识。

Read More

删除表

  删除表有三种方式:

1.删除表
    DROP TABLE 表名;
2.删除表数据,而不是删除表结构,不能使用where指定具体内容。
    TRUNCATE TABLE 表名;
3.删除表数据,可与where搭配使用,删除指定内容。
    DELETE FROM 表名 WHERE 或者DELETE FROM 表名。

不同点:
    1.DROP 与 TRUNCATE 为数据库定义语言DDL,执行后自动提交,DELETE为数据库操作语言。
    2.truncate和delete 只删除数据不删除表结构,truncate 删除后将重建索引(新插入数据后id从0开始记起),而 delete不会删除索引 (新插入的数据将在删除数据的索引后继续增加),drop语句将删除表的结构包括依赖的约束,触发器,索引等;
    3.drop和truncate删除时不记录MySQL日志,不能回滚,delete删除会记录MySQL日志,可以回滚;
    4.返回值:delete 操作后返回删除的记录数,而 truncate 返回的是0或者-1(成功则返回0,失败返回-1)

Read More

sql注入

  sql注入是常见的攻击形式,通过注入sql语句,导致程序的安全以及数据库安全。
  sql注入一般见效于拼接sql语句中,通过破坏输入规则,插入期望的sql语句,以此达到所要达到的目的。
  两个例子:

1.查找sql注入,一般用于登录界面。
拼接sql语句:
    String sql = "SELECT * FROM student where username ='"+username+"' AND password = '"+password+"';" 
//AND 运行优先级高于 OR
注入sql语句:
    username = "123";
    password = "'or '1'='1";
SQL最终语句: 
    SELECT * FROM student where username ='123' AND password = '' or '1'='1';
因而可以将所有数据查出,造成登录成功。
2.在查询操作中插入删除操作。
拼接sql语句:
    String sql = "SELECT * FROM student where username ='"+username+"' AND password = '"+password+"';" 

注入sql语句:
    username = "123";
    password = "'; DELETE FROM student where '1'='1"
SQL最终语句:
    SELECT * FROM student where username ='123' AND password =''; DELETE FROM student where '1'='1';
注:该操作是批处理操作,但是java 中mysql执行方法execute不支持此操作。

  因此为了避免sql注入,我们需要使用参数化sql语句,即预编译好的sql语句,除此之外做好用户输入数据的验证与过滤操作,以及最小化用户权限。即使是参数化sql语句,我们也要避免拼接sql语句,否则依旧会有被sql注入的可能。
  这里主要是学习参数化sql语句,其他的会在后面项目中学习。
  参数化sql语句就是使用占位符?代替部分参数,通过prepareStatement(String sql),创建一个preparedStatement,随后使用不带参数的execute/executeUpdate/executeQuery命令执行操作,不过在这之前通过preparedStatement对象的setInt与setString方法对?占位参数赋值,其中第一个参数为int型,表示第几个占位符,后面则为要赋的值。下面展示一个例子:

Connection conn = DriverManager.getConnection(url,username,password);
String sql = "INSERT INTO student(name,id_card) VALUES(?,?);";
PreparedStatement pstm = conn.prepareStatemnet(sql);
pstm.setString(1,"1234");
pstm.setString(2,"1234");
pstm.executeUpdate();
ResultSetMetaData rsmd = rs.getMetaData();int columnCount = rsmd.getColumnCount();这个可以获取字段数目,当我们忘记原本的数据库字段数时使用。

Read More

插入数据

  插入单行数据命令:

INSERT INTO 表名(字段名1,字段名2...) VALUES(值1,值2...);

  插入多行数据命令:

INSERT INTO 表名(字段名1,字段名2...) VALUES(a1,a2...),(b1,b2...),...;

Read More

诗决

  写诗,一分靠文学素养,二分需细心观察,三分是否真心实意,剩余四分则是丰富想象力。所以一个好的诗词作者,需要拥有强大的想象力,目有极而心无极,观狭隘之一隅,表无限之宇宙。

Read More

《晚雨》

《晚雨》
红熒
劲风吹草折,云雾覆霞天。
光闪催龙声,豆雨直窗落。
云过天渐晴,净窗悬珠帘。
霁雨星云落,明迹淡蛇痕。

Read More

《月儿圆》

《月儿圆》
红熒
  月儿圆,月儿圆,古往人,今何在;今何在,在何方,涛涛江水无处寻;无处寻,寻何处,寻那满天繁花尘。   星无踪,踪无影,人生何时是归期,期何许,许何求,春秋覆水何如旧。少家离,老大回,日月换天情如故。   在何时,在何地,家如故,亲如旧,多珍惜,多珍重,霜华染尽温心存,温心存,存于心,愿你洗却满身尘。   纵身粉,纵骨碎,吟初音,鸣心乐,看霞升,看云去,乐逍遥,做浮梦。   悠悠华夏浮生梦,醉眼轻看霞云升,身粉骨碎吟初音,千百锤凿鸣心乐。

Read More

《碧浴行》

《碧浴行》
红熒
碧浴银珠敷玉体,云雾仙境落池天。
飞花直下水弦鸣,尘舟拂水身轻燕。
冰汽润鼻泣如泪,水露凝心雪霜烟。
洗却尘染春昔梦,悦看羞体散千金。
  心懔懔以怀霜,志眇眇而临云。——晋· 陆机《文赋》

Read More