爱可深思▼ 2014▼ 内测 编码 Java 拼接

A002.内测.Java之拼装SQL

这是一个十分简单但不实用的编程练习,拼装SQL。
select一个表,where很多单纯的and条件。

作者:史荣久 日期:2014-11-26 许可:CC BY-SA 3.0

任务说明

实现以下接口,完成练习目标。

package com.moilioncircle.kiss;

public interface Sql {

    public Sql select(String... fields);

    public Sql from(String table);

    public Sql where(String fieldAndOperator, Object value);

    public Sql and(String fieldAndOperator, Object value);

    public String build();
}

任务目标

(1) 以下6个build()得出的sql,在MySql上执行,都返回1条记录。

Sql sql = new <your-Sql-impl>();
sql.select("id","birthday","homedir","description")
   .from("sqltest")
   .where("homedir=", "d:\\jonny\\")
   .build();

sql.select("count(*)")
   .from("sqltest")
   .where("id>", Integer.valueOf(1))
   .and("birthday=", Date.valueOf("1971-01-01"))
   .build();

sql.select("count(*)")
   .from("sqltest")
   .build();

sql.select("1").build();

sql.select("count(*)")
   .from("sqltest")
   .where("description=", "jonny's pet")
   .build();

sql.select("count(*)")
   .from("sqltest")
   .where("description=", "ben said \"hi tom!\"")
   .build();

(2) 以下3个build(),抛出异常(选择舒服的异常类型)

sql.select("").build();

sql.select(null).build();

sql.select("count(*)")
   .where("description=", "jonny's pet")
   .build();

测试数据

通过以下SQL创建表和数据。

CREATE TABLE `sqltest` (
`id` INT NOT NULL,
`birthday` DATE NULL,
`homedir` VARCHAR(45) NULL,
`description` VARCHAR(45) NULL,
PRIMARY KEY (`id`));

insert into sqltest(id,birthday,homedir,description) values
(1,'1971-01-01','d:\\jonny\\','jonny''s pet'),
(2,'1971-02-01','d:\\tom','tom is good'),
(3,'1972-03-01','d:\\ben','ben said "hi tom!"');
《A002.内测.Java之拼装SQL》 这是一个十分简单但不实用的编程练习,拼装SQL。select一个表,where很多单纯的and条件。
题图:两脚站在同一根高压电线上,电流基本上不从小鸟身上流过,小鸟是不会被电到的。