问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中怎么将string 转换为sql.date

发布网友 发布时间:2022-04-30 01:54

我来回答

3个回答

懂视网 时间:2022-04-09 09:58

在日志分析中,经常会对记录的sql进行分析,所以将一整行sql格式化,进行多行缩就显得很有必要,许多数据库客户端都提供sql的格式化功能,但复杂的多层嵌套sql往往格式化的l还不够友好,所以就自己造了个。

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import java.util.StringTokenizer;

public class BasicFormatterImpl {
	private static final Set<String> BEGIN_CLAUSES = new HashSet<String>();
	private static final Set<String> END_CLAUSES = new HashSet<String>();
	private static final Set<String> LOGICAL = new HashSet<String>();
	private static final Set<String> QUANTIFIERS = new HashSet<String>();
	private static final Set<String> DML = new HashSet<String>();
	private static final Set<String> MISC = new HashSet<String>();
	static final String indentString = " ";
	static final String initial = "
 ";

	public String format(String source) {
		return new FormatProcess(source).perform().trim();
	}

	static {
		BEGIN_CLAUSES.add("left");
		BEGIN_CLAUSES.add("right");
		BEGIN_CLAUSES.add("inner");
		BEGIN_CLAUSES.add("outer");
		BEGIN_CLAUSES.add("group");
		BEGIN_CLAUSES.add("order");

		END_CLAUSES.add("where");
		END_CLAUSES.add("set");
		END_CLAUSES.add("having");
		END_CLAUSES.add("join");
		END_CLAUSES.add("from");
		END_CLAUSES.add("by");
		END_CLAUSES.add("join");
		END_CLAUSES.add("into");
		END_CLAUSES.add("union");

		LOGICAL.add("and");
		LOGICAL.add("or");
		LOGICAL.add("when");
		LOGICAL.add("else");
		LOGICAL.add("end");

		QUANTIFIERS.add("in");
		QUANTIFIERS.add("all");
		QUANTIFIERS.add("exists");
		QUANTIFIERS.add("some");
		QUANTIFIERS.add("any");

		DML.add("insert");
		DML.add("update");
		DML.add("delete");

		MISC.add("select");
		MISC.add("on");
	}

	private static class FormatProcess {
		boolean beginLine = true;
		boolean afterBeginBeforeEnd = false;
		boolean afterByOrSetOrFromOrSelect = false;
		boolean afterValues = false;
		boolean afterOn = false;
		boolean afterBetween = false;
		boolean afterInsert = false;
		int inFunction = 0;
		int parensSinceSelect = 0;
		private LinkedList<Integer> parenCounts = new LinkedList<Integer>();
		private LinkedList<Boolean> afterByOrFromOrSelects = new LinkedList<Boolean>();

		int indent = 1;

		StringBuffer result = new StringBuffer();
		StringTokenizer tokens;
		String lastToken;
		String token;
		String lcToken;

		public FormatProcess(String sql) {
			this.tokens = new StringTokenizer(sql, "()+*/-=<>‘`"[], 

f	", true);
		}

		public String perform() {
			this.result.append("
 ");

			while (this.tokens.hasMoreTokens()) {
				this.token = this.tokens.nextToken();
				this.lcToken = this.token.toLowerCase();

				if ("‘".equals(this.token)) {
					String t;
					do {
						t = this.tokens.nextToken();
						this.token += t;
					} while ((!"‘".equals(t)) && (this.tokens.hasMoreTokens()));
				} else if (""".equals(this.token)) {
					String t;
					do {
						t = this.tokens.nextToken();
						this.token += t;
					} while (!""".equals(t));
				}

				if ((this.afterByOrSetOrFromOrSelect) && (",".equals(this.token))) {
					commaAfterByOrFromOrSelect();
				} else if ((this.afterOn) && (",".equals(this.token))) {
					commaAfterOn();
				} else if ("(".equals(this.token)) {
					openParen();
				} else if (")".equals(this.token)) {
					closeParen();
				} else if (BasicFormatterImpl.BEGIN_CLAUSES.contains(this.lcToken)) {
					beginNewClause();
				} else if (BasicFormatterImpl.END_CLAUSES.contains(this.lcToken)) {
					endNewClause();
				} else if ("select".equals(this.lcToken)) {
					select();
				} else if (BasicFormatterImpl.DML.contains(this.lcToken)) {
					updateOrInsertOrDelete();
				} else if ("values".equals(this.lcToken)) {
					values();
				} else if ("on".equals(this.lcToken)) {
					on();
				} else if ((this.afterBetween) && (this.lcToken.equals("and"))) {
					misc();
					this.afterBetween = false;
				} else if (BasicFormatterImpl.LOGICAL.contains(this.lcToken)) {
					logical();
				} else if (isWhitespace(this.token)) {
					white();
				} else {
					misc();
				}

				if (!isWhitespace(this.token)) {
					this.lastToken = this.lcToken;
				}
			}

			return this.result.toString();
		}

		private void commaAfterOn() {
			out();
			this.indent -= 1;
			newline();
			this.afterOn = false;
			this.afterByOrSetOrFromOrSelect = true;
		}

		private void commaAfterByOrFromOrSelect() {
			out();
			newline();
		}

		private void logical() {
			if ("end".equals(this.lcToken)) {
				this.indent -= 1;
			}
			newline();
			out();
			this.beginLine = false;
		}

		private void on() {
			this.indent += 1;
			this.afterOn = true;
			newline();
			out();
			this.beginLine = false;
		}

		private void misc() {
			out();
			if ("between".equals(this.lcToken)) {
				this.afterBetween = true;
			}
			if (this.afterInsert) {
				newline();
				this.afterInsert = false;
			} else {
				this.beginLine = false;
				if ("case".equals(this.lcToken))
					this.indent += 1;
			}
		}

		private void white() {
			if (!this.beginLine)
				this.result.append(" ");
		}

		private void updateOrInsertOrDelete() {
			out();
			this.indent += 1;
			this.beginLine = false;
			if ("update".equals(this.lcToken)) {
				newline();
			}
			if ("insert".equals(this.lcToken))
				this.afterInsert = true;
		}

		private void select() {
			out();
			this.indent += 1;
			newline();
			this.parenCounts.addLast(new Integer(this.parensSinceSelect));
			this.afterByOrFromOrSelects.addLast(Boolean.valueOf(this.afterByOrSetOrFromOrSelect));
			this.parensSinceSelect = 0;
			this.afterByOrSetOrFromOrSelect = true;
		}

		private void out() {
			this.result.append(this.token);
		}

		private void endNewClause() {
			if (!this.afterBeginBeforeEnd) {
				this.indent -= 1;
				if (this.afterOn) {
					this.indent -= 1;
					this.afterOn = false;
				}
				newline();
			}
			out();
			if (!"union".equals(this.lcToken)) {
				this.indent += 1;
			}
			newline();
			this.afterBeginBeforeEnd = false;
			this.afterByOrSetOrFromOrSelect = (("by".equals(this.lcToken)) || ("set".equals(this.lcToken))
					|| ("from".equals(this.lcToken)));
		}

		private void beginNewClause() {
			if (!this.afterBeginBeforeEnd) {
				if (this.afterOn) {
					this.indent -= 1;
					this.afterOn = false;
				}
				this.indent -= 1;
				newline();
			}
			out();
			this.beginLine = false;
			this.afterBeginBeforeEnd = true;
		}

		private void values() {
			this.indent -= 1;
			newline();
			out();
			this.indent += 1;
			newline();
			this.afterValues = true;
		}

		private void closeParen() {
			this.parensSinceSelect -= 1;
			if (this.parensSinceSelect < 0) {
				this.indent -= 1;
				this.parensSinceSelect = ((Integer) this.parenCounts.removeLast()).intValue();
				this.afterByOrSetOrFromOrSelect = ((Boolean) this.afterByOrFromOrSelects.removeLast()).booleanValue();
			}
			if (this.inFunction > 0) {
				this.inFunction -= 1;
				out();
			} else {
				if (!this.afterByOrSetOrFromOrSelect) {
					this.indent -= 1;
					newline();
				}
				out();
			}
			this.beginLine = false;
		}

		private void openParen() {
			if ((isFunctionName(this.lastToken)) || (this.inFunction > 0)) {
				this.inFunction += 1;
			}
			this.beginLine = false;
			if (this.inFunction > 0) {
				out();
			} else {
				out();
				if (!this.afterByOrSetOrFromOrSelect) {
					this.indent += 1;
					newline();
					this.beginLine = true;
				}
			}
			this.parensSinceSelect += 1;
		}

		private static boolean isFunctionName(String tok) {
			char begin = tok.charAt(0);
			boolean isIdentifier = (Character.isJavaIdentifierStart(begin)) || (‘"‘ == begin);
			return (isIdentifier) && (!BasicFormatterImpl.LOGICAL.contains(tok))
					&& (!BasicFormatterImpl.END_CLAUSES.contains(tok))
					&& (!BasicFormatterImpl.QUANTIFIERS.contains(tok)) && (!BasicFormatterImpl.DML.contains(tok))
					&& (!BasicFormatterImpl.MISC.contains(tok));
		}

		private static boolean isWhitespace(String token) {
			return " 

f	".indexOf(token) >= 0;
		}

		private void newline() {
			this.result.append("
");
			for (int i = 0; i < this.indent; i++) {
				this.result.append(" ");
			}
			this.beginLine = true;
		}
	}

	public static void main(String[] args) {
		System.out.println(new BasicFormatterImpl()
				.format("select aa,bb,cc,dd from ta1,(select ee,ff,gg from ta2 where ee=ff) ta3 where aa=bb and cc=dd group by dd order by createtime desc limit 3 "));
	}
}

  

运行结果:

技术分享

java格式化sql

标签:

热心网友 时间:2022-04-09 07:06

java中String和Date的互相转换使用SimpleDateFormat来完成。SimpleDateFormat使用记得 import java.text.SimpleDateFormat。
String -> Date

java.text.SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd ");
String s= "2011-07-09 ";
Date date = formatter.parse(s);
2. Date->String

java.text.SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd ");
String date = formatter.format(new Date());//格式化数据

当然SimpleDateFormat格式表示方法很多:
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
常见标准的写法"yyyy-MM-dd HH:mm:ss",注意大小写,时间是24小时制,24小时制转换成12小时制只需将HH改成hh,不需要另外的函数。

热心网友 时间:2022-04-09 08:24

使用simpledateformate的parse方法
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 限行时被交警拦下来违章网上怎么处理 民间故事巜明珠》缩写 违章停车没有贴条,路人告诉我:交警拍照了,让我带证去交警大队处理,怎么回事? 开车没系安全带 被交警拦下了 罚款50到银行去交 扣分吗? 违章被交警拦下是不是当场就扣分? 违章太多被扣行驶证,给我开了个强制执行单子叫我处理,是随便哪个交巡警支队都可以吗 开单位的车,在路口有交警在查车,把我拦下后说车上有个违章,现场拿我的驾驶证开了罚单。 《八仙过海》民间故事缩写怎么写? 我的车子有五条违章了、被交警拦下驾驶证被没收了、他让我15天内把违章处理了、2我这样还可以开车吗? 无证驾驶 机动车被交警拦下,登记了身份证,叫15天去处理,处理之后车能拿出来吗? 交警大队给我打电话让我带驾驶证行驶证去处理违章,不去可以吗? 你好,无证驾驶摩托车被交警拦下了,然后叫我15天去处理怎么办? 请问,交警是不是可以强制性处理违章,比如说一条违章。是一条不按道路行驶的违章。 我着扣了17分,每条违章都拍到我的,交警把行驶证收了,强制要求处理,怎么办 交通警察强行拦车处理违章的行为是否合理? 违章记录多交警上路拦车。让处理违章怎么办? 交警可以强制让我处理交通违章吗? 科达中韩F3磨砂机身双屏翻盖女款炒股功能手机 鸽子 百灵 春蚕 喜鹊 鹦鹉 萤火虫 分别象征什么 红米note手机屏幕上方出现f3是什么意思? java中sql的date怎么写 如果车被扣分没去扣 但又被交警拦住查出来会被强制扣分吗? 如果你违章被交警拦下,应该怎么办? return new java.sql.Date(format.parse(parameterValues[0]).getTi... 求救...java中对sql数据库操作 高速出口违章被交警拦下直接扣了3分,没罚款,还要去交警大队处理吗 sql语句如何把从Java中传过来的系统时间转换成自己想要的时间格式, 如何通过java对sql数据进行修改? 在java中怎么往SQL数据库里插入日期时分 java中操作sql语句的方法??? Java语言中sql语句?? java.sql.time将String转换time问题 Java如何对sql语句进行转义 Java如何美化sql语句,求算法或者就java实现 华为手机怎么调时间?? 求一张木槿花的彩铅手绘插画图片 java与sql怎么实现对接? Java中在Sql数据库中删除一个记录,delete from 表名 where id=变量名;id=后面的 格式怎么写? 乱花渐欲迷人眼,浅草才能没马蹄为主题 画手绘插画 Java对SQL违反了实体完整性,如何让程序依旧运行?