public static void main(String args[]){ }
2018年9月27日 星期四
2018年9月12日 星期三
[Oracle DB] PL/SQL
甲骨文資料庫特別有名的功能,在寫Procedure時經常會用到
不適用於Query出資料,若試圖使用SELECT列出資料就會出現錯誤,只能透過DBMS的方式在DBMS Log面板上印出 。另外,在truncate table相關指令時也會失效 。
1、基本架構:
DECLARE
--變數宣告區域
BEGIN
--SQL語句
END;
2、宣告變數的方式
格式:
variable_name Type;
範例:
qty NUMBER(5);
flag BOOLEAN;
2-2、賦值
格式:
variable_name := var;
範例:
qty := 100;
3、DBMS
DBMS_OUTPUT.PUT_LINE('...........');
4、字串
必須使用單引號包住字串,使用雙引號會出錯
5、日期
to_date('1990/01/23', 'yyyy/mm/dd')
6、常用函數
(1). substr(字串, 位置, 個數);
位置的索引值起始為1,例如apple則index=1的值為a。
substr('apple',1,3); -- 傳回app
(2). in('a','b','c'....)
符合in中的資料,傳回boolean型態
(3). decode()
2018年9月10日 星期一
[JS] github棄用jquery
https://githubengineering.com/removing-jquery-from-github-frontend/
原生JS逐漸取代了jquery所提供的功能,而老舊的IE無法使用這些新生的JS功能,已不堪使用,在這個時代逐漸被廢棄,根據github文章,紀錄一些JS新功能的筆記
(1) Dom操作
document.querySelectorAll()
(2) class操作
document.getElementById("xxx").classList.add("myclassname")
document.getElementById("xxx").classList.remove("myclassname")
(3) AJAX
fetch or XHR
比較舊的瀏覽器用XHR
* fetch
fetch('http://xxxx', {method:'get'}).then(function(resp){
.....
// resp.status
}).catch(function(err){
.....
})
(5) Animation
使用CSS
(6) addEventListener()
https://developer.mozilla.org/zh-TW/docs/Web/API/EventTarget/addEventListener
el.addEventListener("click", function(){.....}, false);
原生JS逐漸取代了jquery所提供的功能,而老舊的IE無法使用這些新生的JS功能,已不堪使用,在這個時代逐漸被廢棄,根據github文章,紀錄一些JS新功能的筆記
(1) Dom操作
document.querySelectorAll()
(2) class操作
document.getElementById("xxx").classList.add("myclassname")
document.getElementById("xxx").classList.remove("myclassname")
(3) AJAX
fetch or XHR
比較舊的瀏覽器用XHR
* fetch
fetch('http://xxxx', {method:'get'}).then(function(resp){
.....
// resp.status
}).catch(function(err){
.....
})
(5) Animation
使用CSS
(6) addEventListener()
https://developer.mozilla.org/zh-TW/docs/Web/API/EventTarget/addEventListener
el.addEventListener("click", function(){.....}, false);
[Kotlin] 筆記
其用法和java相似,一樣有package、import,比較特別的地方是宣告的方式與資料型態還有function定義模式改變。
定義變數需下關鍵字var,若一開始不賦值須加上特殊的關鍵字lateinit進行宣告,並且它是採用名字在前面,型態在後面的方式去定義變數。而function的部分關鍵字簡短為fun,回傳的型態放置於括號後方。在Android的應用上listener的宣告方式變得更簡短。
var 之後可以變動
val 初始化後只能讀取 (Val cannot be reassigned)
2、字串中取用變數
println("oooxxx${string}")
3、
val只有getter
var有getter 及 setter
getter與setter的改寫 : 使用關鍵字field
class Say{
var msg:String = "hello"
get() = field
set(val){
field = val
}
}
Say say = new Say()
println(say.msg) // world
定義變數需下關鍵字var,若一開始不賦值須加上特殊的關鍵字lateinit進行宣告,並且它是採用名字在前面,型態在後面的方式去定義變數。而function的部分關鍵字簡短為fun,回傳的型態放置於括號後方。在Android的應用上listener的宣告方式變得更簡短。
import android.support.v7.app.AppCompatActivity1、宣告關鍵字
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
class MainActivity : AppCompatActivity() {
lateinit var btn_1:Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val txt: TextView = findViewById(R.id.txt_1);
txt.setText(fun1())
btn_1 = findViewById(R.id.btn_1)
btn_1.setOnClickListener{
fun2()
}
}
fun fun1():String{
return "ya"
}
fun fun2(){
btn_1.setText("click!!!!!!");
}
}
var 之後可以變動
val 初始化後只能讀取 (Val cannot be reassigned)
2、字串中取用變數
println("oooxxx${string}")
3、
val只有getter
var有getter 及 setter
getter與setter的改寫 : 使用關鍵字field
class Say{
var msg:String = "hello"
get() = field
set(val){
field = val
}
}
Say say = new Say()
println(say.msg) // world
say.msg = "hi"
println(say.msg) // hi
println(say.msg) // hi
2018年9月9日 星期日
[SQLite] 安裝&基本操作
輕型的sql database,很適合ror練習時使用
1、安裝
Mac
下載snapshots,自行compile
./configure --prefix=/usr/local
make
make install
Windows
下載 tools & dll 解壓縮後,將路徑加入環境變數path中
測試是否安裝成功
cmd或terminal直接key上sqlite3
1、安裝
Mac
下載snapshots,自行compile
./configure --prefix=/usr/local
make
make install
Windows
下載 tools & dll 解壓縮後,將路徑加入環境變數path中
測試是否安裝成功
cmd或terminal直接key上sqlite3
2、操作
(1) 建立database
在還沒進入sqlite前,在cmd中下指令:
sqlite3 test.db
代表創建test並且使用這個DB
(2) 離開sqlite命令列
.quit
(3) 導出完整的資料庫
.dump
sqlite3 test.db .dump > test.sql
[Android] Android Studio搬移SDK位置
Android sdk佔用了不少硬碟空間,實測在新安裝的Android Studio下只下載了5.0的sdk和模擬器的img,就耗用了9GB,在ssd硬碟空間不多的情況下若後續再安裝了其他sdk,空間爆掉機率極高
1、開啟Android Studio,若直接進入專案則Close Project
2、右下角點選Configure / Project Defaults / Project Structure
3、取得 SDK Location 的位置,將該資料夾搬移到其他位置後,再設定到新位置
1、開啟Android Studio,若直接進入專案則Close Project
2、右下角點選Configure / Project Defaults / Project Structure
3、取得 SDK Location 的位置,將該資料夾搬移到其他位置後,再設定到新位置
[RoR] Model - Validation
Model是用於與DB進行資料交互的物件,為了維護資料的安全及完整,往往需要建立基本的資料驗證,而這樣的需求可以針對在models中的model檔案撰寫Validation,當model的資料進行更動時(例如save)會自動觸發
1、官方列出的trigger時機:
create
create!
save
save!
update
update_attributes
update_attributes!
2、跳過驗證
decrement!
decrement_counter
increment!
increment_counter
toggle!
update_all
update_attribute
update_counters
或者,當你在save時不希望驗證也可以傳送false值的方式讓它不要觸發save(false)
3、可使用的method
(1) valid?
觸發驗證,若沒有errors時會傳回true
(2) invalid?
與(1)相反
(3) new_record?
在丟入DB前,確認該資料是否已經存在,若已經存在會傳回false
4、驗證的方式
(1) 驗證必填 - validates_presence_of
範例:username及password須為必填
validates_presence_of :username, :password
(2) 驗證長度 - validates_length_of
範例:username必須大於8個字元
validates_length_of :username, minimum=>8
(3) 自訂驗證:
validate :validation_name #表示採用這個自訂的function去驗證
private #將function設定在private下
def validation_name
if age < 0
errors.add(:age, ".......")
elsif age>999
errors.add(:age, ".......")
end
(4) 其他
* 參考資料
https://guides.rubyonrails.org/v2.3/activerecord_validations_callbacks.html
訂閱:
文章 (Atom)