java解析sql語句
這個需要用到編譯原理的知識,理論上,既然dbms可以解析,那我們當然可以實現。
不過比較、很、太難實現而已。
並且不同資料庫、不同版本的語法結構還不一樣,又進一步增加了難度
② java 怎麼獲取原生sql語句
java 獲取原生sql語句:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- 配置filters -->
<property name="proxyFilters">
<list>
<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
<property name="statementLogEnabled" value="false" />
<property name="" value="true" />
</bean>
</list>
</property>
</bean>
③ java將json數據解析為sql語句
importjava.util.Iterator;
importjava.util.Set;
importjava.util.Map.Entry;
importcom.google.gson.JsonArray;
importcom.google.gson.JsonElement;
importcom.google.gson.JsonObject;
importcom.google.gson.JsonParser;
publicclassSql
{
publicstaticStringparseSQL(Stringjson)
{
JsonParserparser=newJsonParser();
JsonObjectobj=(JsonObject)parser.parse(json);;
Stringtable=obj.get("table").getAsString();
Stringop_type=obj.get("op_type").getAsString();
Stringsql="";
if("I".equals(op_type))
{
sql+="INSERTINTO"+table+"(";
JsonObjectafter=(JsonObject)obj.get("after");
Set<Entry<String,JsonElement>>entry=after.entrySet();
Iterator<Entry<String,JsonElement>>it=entry.iterator();
Stringvs="values(";
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+",";
vs+=val+",";
}
sql=sql.replaceAll(",\s*$","");
vs=vs.replaceAll(",\s*$","");
sql+=")"+vs+")";
}
elseif("U".equals(op_type))
{
sql+="UPDATE"+table+"SET";
JsonObjectafter=(JsonObject)obj.get("after");
Set<Entry<String,JsonElement>>entry=after.entrySet();
Iterator<Entry<String,JsonElement>>it=entry.iterator();
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+"="+val+",";
}
sql=sql.replaceAll(",\s*$","");
sql+="WHERE";
after=(JsonObject)obj.get("before");
entry=after.entrySet();
it=entry.iterator();
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+"="+val+"AND";
}
sql=sql.replaceAll("\s*AND\s*$","");
}
elseif("D".equals(op_type))
{
sql+="DELETEFROM"+table+"WHERE";
JsonObjectafter=(JsonObject)obj.get("before");
Set<Entry<String,JsonElement>>entry=after.entrySet();
Iterator<Entry<String,JsonElement>>it=entry.iterator();
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+"="+val+"AND";
}
sql=sql.replaceAll("\s*AND\s*$","");
}
returnsql;
}
publicstaticvoidmain(String[]args)
{
Stringinsert=
"{"table":"GG.TCUSTORD","op_type":"I","op_ts":"2013-06-0222:14:36.000000","current_ts":"2015-09-18T13:39:35.447000","pos":"00000000000000001444","tokens":{"R":"AADPkvAAEAAEqL2AAA"},"after":{"CUST_CODE":"WILL","ORDER_DATE":"1994-09-30:15:33:00","PRODUCT_CODE":"CAR","ORDER_ID":"144","PRODUCT_PRICE":17520.00,"PRODUCT_AMOUNT":3,"TRANSACTION_ID":"100"}}";
Stringupdate=
"{"table":"GG.TCUSTORD","op_type":"U","op_ts":"2013-06-0222:14:41.000000","current_ts":"2015-09-18T13:39:35.748000","pos":"00000000000000002891","tokens":{"L":"206080450","6":"9.0.80330","R":"AADPkvAAEAAEqLzAAC"},"before":{"CUST_CODE":"BILL","ORDER_DATE":"1995-12-31:15:00:00","PRODUCT_CODE":"CAR","ORDER_ID":"765","PRODUCT_PRICE":15000.00,"PRODUCT_AMOUNT":3,"TRANSACTION_ID":"100"},"after":{"CUST_CODE":"BILL","ORDER_DATE":"1995-12-31:15:00:00","PRODUCT_CODE":"CAR","ORDER_ID":"765","PRODUCT_PRICE":14000.00,"PRODUCT_AMOUNT":3,"TRANSCATION_ID":"100"}}";
Stringdelete=
"{"table":"GG.TCUSTORD","op_type":"D","op_ts":"2013-06-0222:14:41.000000","current_ts":"2015-09-18T13:39:35.766000","pos":"00000000000000004338","tokens":{"L":"206080450","6":"9.0.80330","R":"AADPkvAAEAAEqLzAAC"},"before":{"CUST_CODE":"DAVE","ORDER_DATE":"1993-11-03:07:51:35","PRODUCT_CODE":"PLANE","ORDER_ID":"600"}}";
System.out.println(parseSQL(insert));
System.out.println(parseSQL(update));
System.out.println(parseSQL(delete));
}
}
④ 關於java中訪問MySql資料庫執行SQL語句的問題!!show tables~
select table_name from information_schema.tables
這條sql可以獲取當前資料庫中所有表名。
information_schema.tables 存放當前資料庫中所有表名。
後面可以加條件選擇需要查詢的表。
這樣查詢出來的就可以通過遍歷輸出。
希望對你有幫助!!
⑤ java解析字元串(解析sql語句,得到需要查詢顯示的欄位名)。
在Sql語句前加上SET FMTONLY ON,再執行Sql語句,該設置只將元數據返回給客戶端,可以用於測試響應的格式,而不必實際執行查詢.有了返回的表結構,還怕得到不到要查詢的欄位
例:
SET FMTONLY ON;
SELECT f_spbm,f_spmc as '名稱' FROM 表1;
SET FMTONLY OFF;
⑥ java 驗證字元串是否為sql語句 並且是否包含 select 關鍵字
java驗證字元串是否為sql語句,是否包含select關鍵字,主要使用的是正則表達式來進行驗證,如下:
importjava.util.*;
importjava.text.*;
classsqltest
{
publicstaticvoidmain(String[]args)
{
Stringspan="selectaaaa.idname,hello,typet,hfromdatasaaaa,citybwherea.id=b.idandclike'e%'andnameisnull";
span=span.toUpperCase();//測試用sql語句
System.out.println(span);
Stringcolumn="(\w+\s*(\w+\s*){0,1})";//一列的正則表達式匹配如proctp
Stringcolumns=column+"(,\s*"+column+")*";//多列正則表達式匹配如proctp,categoryc,warehousew
Stringownerenable="((\w+\.){0,1}\w+\s*(\w+\s*){0,1})";//一列的正則表達式匹配如a.proctp
Stringownerenables=ownerenable+"(,\s*"+ownerenable+")*";//多列正則表達式匹配如a.proctp,a.categoryc,b.warehousew
Stringfrom="FROM\s+"+columns;
Stringcondition="(\w+\.){0,1}\w+\s*(=|LIKE|IS)\s*'?(\w+\.){0,1}[\w%]+'?";//條件的正則表達式匹配如a=b或aisb..
Stringconditions=condition+"(\s+(AND|OR)\s*"+condition+"\s*)*";//多個條件匹配如a=bandclike'r%'ordisnull
Stringwhere="(WHERE\s+"+conditions+"){0,1}";
Stringpattern="SELECT\s+(\*|"+ownerenables+"\s+"+from+")\s+"+where+"\s*";//匹配最終sql的正則表達式
System.out.println(pattern);//輸出正則表達式
System.out.println(span.matches(pattern));//是否比配
}
}
⑦ java中如何通過xml配置文件來操作sql語句
xml本來就是為定義數據服務的,在解析xml的時候,可以按照預定義的規則進行解析。具體的格式可以由自己來定義,但是這種格式涵蓋的內容必須包含構建這個表(實現某一數據結構)的必須條件。 這樣定義好xml之後,在解析的時候可以根據給定規則,解析出具體的某個表(某一數據結構)。 對於你的這段xml也就是這樣的。具體的解析方法,可以看dom解析 sax解析 ==
⑧ java如何執行sql語句
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class xxxx {
public static void main(String[] args) {
Connection con = null ;
Statement stmt = null ;
try {
Class.forName("com.mysql.jdbc.Driver"); //mysql為例 不一樣的資料庫所需的驅動包不一樣 連接語句略有不同
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/資料庫名", "root", "密碼");
stmt = con.createStatement();
String sql = "insert into info values ('用戶', 'mima', 'piapiapia~')";
stmt.executeUpdate(sql);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(stmt != null) {
stmt.close();
stmt = null;
}
if (con != null) {
con.close();
con = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
⑨ 大數據分析師面試必備:java與mysql解析
【導讀】作為大數據工程師,其必須要掌握的基礎知識就是java與mysql的關系、交互和連接,作為基礎,也是面試考官經常會考的內容,為了幫助大家都能順利通過考試,今天小編就來和大家嘮一嘮java與mysql的關系、交互和連接,好了,開始今天的內容大數據分析師面試必備:java與mysql解析。
1. SQL語言四大類:
DQL 數據查詢語言 select
DML 數據操作語言 insert、update、delete
DDL 數據界說語言 create、alter
DCL 數據控制語言 grant許可權
2. mysql資料庫中的decimal類型(是數值型,不能存放字元串):
舉例:decimal(18,0) 常用於身份證號碼,但是帶x的不可以。
舉例:decimal(5,2)
狀況一:假設小數點前面是3位,後邊是2位,正常狀況。
狀況二:5指的是小數點前後不能超過5位,小數點後有必要是2位。
3. mysql中InnoDB和MyISAM引擎的差異:
innodb支撐:事務和主外鍵
myisam不支撐:事務和主外鍵
4. 【不需要背誦,選擇題考點】向mysql中,a向表中添加數據的幾種寫法,題目:id int 主鍵自增,name varchar(11)
不為空。
5. 操作mysql資料庫表有兩種方式,第一種:點八點吧;第二種:寫代碼。【不需要背誦,只需要了解,考試選擇題會出】
6. 在Java中,簡述面向對象三大特徵。
7. 在Java中,常用關鍵字:
1. 定義類的關鍵字是什麼? class
2. 繼承的關鍵字是什麼? extends
3. 定義介面的關鍵字是什麼? interface
4. 實現介面的關鍵字是什麼? implements
5. 抽象類的關鍵字是什麼? abstract
8. 在Java中,抽象類和介面的區別:
1. 抽象類中可以包含普通方法和抽象方法,介面中只能包含抽象方法
2. 抽象類中可以有構造方法,介面中沒有構造方法
3. 抽象類只能單繼承,可以實現多個介面
9. Java介面中有哪些成員?
1. 構造方法,沒有
2. 常量,默認訪問修飾符public static final,沒有變數
3. 抽象方法,默認訪問修飾符public abstract
10. 在Java中,抽象類和抽象方法的關系:
1. 抽象類中可以包含普通方法和抽象方法,抽象方法一定存在抽象類中。
2. 子類繼承抽象父類,必須實現|重寫抽象方法,除非子類也是抽象類。
3. 【判斷題】抽象類中必須包含抽象方法?【錯誤×】
4. 【判斷題】抽象方法一定存在抽象類中?【正確√】
11. Java重載的特點:
1. 在同一個類中
2. 方法名相同
3. 參數列表(個數、類型、順序)不同
4. 與返回值類型和訪問修飾符無關
12. Java重寫的特點:
1. 在父子類中
2. 方法名相同
3. 參數列表相同
4. 返回值類型相同,或是其子類
5. 訪問修飾符相同,或不能嚴於父類
13. 列舉幾種Java實現多態的形式:
1. 繼承的存在
2. 父類引用指向子類對象 | 向上轉型
3. 父類作為方法的返回值類型,父類作為方法的參數
14. Java介面的特性:單根性和傳遞性
15. 在Java中,throws和throw的區別:
1. throws 聲明異常,用在定義方法小括弧的後面
2. throw 拋出異常,寫在方法體內
以上就是小編今天給大家整理發送的關於大數據分析師面試必備:java與mysql解析的相關內容,希望對各位考生有所幫助,想知道更多關於數據分析師的基本要求有哪些,關注小編持續更新數據分析師崗位解析。
⑩ JAVA中的SQL語句請解釋一下
別名,這個欄位的別名,用coid來代替pt_company 意思是一樣的,換一個名字而已,沒影響。
他做了一個日期上的轉換與賦值。把pt_datein按照%Y-%m-%d %k的格式轉化為時間類型,然後加上了幾個小時