2016年2月28日 星期日

MySQL SQLite-How use "SELECT" in the sql?

上一篇 : How insert into data in table?

上一篇簡單介紹有關如何將資料寫入
接下來就準備從上百筆、上千筆的資料表取資料囉

使用的方法我們慢慢的簡介

1 . 顯示所有的資料欄
SELECT * 
FROM table_name;
















2 . 顯示特定的資料欄
SELECT column1,column2... 
FROM table_name;
















3 . 顯示特定的資料欄,並且加入篩選的條件( 以下簡略集中說明 )
SELECT column1,column2... 
FROM table_name
// 等於
WHERE column1 = 3;
// 大於
WHERE column1 > 3;
// 等於_文字
WHERE column1 = 'A';
// 欄位等於 NULL
WHERE column1 = 'NULL';
// IS NULL 要全大寫
WHERE column1 IS NULL;
















4 . 篩選過濾文字(  % 、 _  )
SELECT column1,column2... 
FROM table_name
// 篩選目標字尾為 CS : SDVCS、YEKCS、51584CS
WHERE column1 LIKE '%CS';
// 篩選目標字尾為 CS 附帶前一字元 : ACS、UCS
WHERE column1 LIKE '_CS';






















5 . 多筆條件 ( OR 、 AND )
SELECT column1,column2... 
FROM table_name
// 及
WHERE column2 = 3 AND column3 < 5;
// 或 
WHERE column2 = 3 OR column3 < 5;























6 . 同欄位範圍值( BETWEEN )
SELECT column1,column2... 
FROM table_name
// 3 ~ 10
WHERE column2 BETWEEN 3 AND 10;
// B ~ H
WHERE column2 BETWEEN 'B' AND 'H';
// 10 ~ 3 順序不對
WHERE column2 BETWEEN 10 AND 3;
EX : 3 ~ 10、B ~ H

7 . 同欄位特定值( IN )
SELECT column1,column2... 
FROM table_name
// 欄位包含
WHERE column2 IN('Tom', "Peter", "May");
// 反之,欄位不可包含
WHERE column2 NOT IN('Tom', "Peter", "May");

8 . 不可、反
SELECT column1,column2... 
FROM table_name
WHERE NOT column1 = 3;
類似 Java 的 " ! "

歡迎轉載,請註明出處


MySQL SQLite-How insert into data in table?

上一篇 : Create Table in the DataBase

之前我們有提到如何創立資料表
那我們依照語法生成資料表後
我們要如何將資料置入到資料表內?

有三種方法 :
1 . 將參數放置對應欄位
INSERT INTO table_name(column1, column2...)
VALUES(value1, value2...);

2 . 依照欄位順序放置參數
INSERT INTO table_name
VALUES(value1, value2...);

3 . 指定欄位放置參數,有可能直接跳過不設置
INSERT INTO table_name(column3, column5...)
VALUES(value3, value5...);


以下是範例程式 :
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
)

Insert into :
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );
































參考資料 : SQLite - INSERT Query

歡迎轉載,請註明出處。

2016年2月27日 星期六

MySQL SQLite-Create Table in the DataBase

我們在前一篇 : What's Column、Row、Table、DataBase?

我們如何使用語法新建資料表?
會很複雜嗎?

就目前最複雜的是 :
你的需求是甚麼?你有哪些資料要放!!!
你的需求是甚麼?你有哪些資料要放!!!
你的需求是甚麼?你有哪些資料要放!!!

以上的問題思考分析完就可以將內容放置進去
CREATE TABLE table_name(
    欄位名稱_1 型別_1,
    欄位名稱_2 型別_2
    .
    .
    .
);

那資料欄的內容要怎麼設定?
CREATE TABLE products1(
    name VARCHAR(10),
    type INT NOT NULL,
    cost DEC(3, 2) NOT NULL DEFAULT 1.0
);

我們用表格來說明

欄位名稱欄位型別是否能為空值初始定義初始定義參數
nameVARCHAR(10)
typeINTNOT NULL
costDEC(3, 2)NOT NULLDEFAULT1.0

欄位要用 : "," 分隔。
















接下來,我們針對欄位型別做簡單的說明

型別範例
CHAR(5)'Tom'
VARCHAR(5)'Tom'
INT123
DEC(6,2)1234,56
DATE27/02/2016
DATETIME

CHAR(5) vs VARCHAR(5) 差異?

型別CHAR(5)VARCHAR(5)
內容TomTom
長度(length)53

如果每筆資料量遠小於預設字元
使用 CHAR 就會造成空間的浪費



歡迎轉載,請註明出處。

2016年2月26日 星期五

MySQL SQLite-What's Column、Row、Table、DataBase?

相信大家對以上名詞再熟悉不過了
如果還是不太了解
此篇以最簡單的圖解來解釋以上的名詞

1 .  Column 欄位 資料欄









2 . Row 列 資料列









3 . Table 表格 資料表




















4 . DataBase 資料庫



















歡迎轉載,請註明出處。

2016年2月24日 星期三

Android-AES 加密

通常再傳送資料的過程中
為了資料的保密
我們會使用多種加密方式來保障我們的資料


import android.annotation.SuppressLint;
import android.util.Base64;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AESClass {

    // Your key 
    private static final String seed = "ADNSJSNGLKNDLKFNLDKNFKLDSLKJ";

    // Char Encodind
    private static final String characterEncoding = "UTF-8";
    // AES formation
    private static final String cipherTransformation = "AES/CBC/PKCS5Padding";
    private static final String aesEncryptionAlgorithm = "AES";

    public static byte[] decrypt(byte[] cipherText, byte[] key,
                                 byte[] initialVector) throws NoSuchAlgorithmException,
            NoSuchPaddingException, InvalidKeyException,
            InvalidAlgorithmParameterException, IllegalBlockSizeException,
            BadPaddingException {
        Cipher cipher = Cipher.getInstance(cipherTransformation);
        SecretKeySpec secretKeySpecy = new SecretKeySpec(key,
                aesEncryptionAlgorithm);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpecy, ivParameterSpec);
        cipherText = cipher.doFinal(cipherText);
        return cipherText;
    }

    public static byte[] encrypt(byte[] plainText, byte[] key,
                                 byte[] initialVector) throws NoSuchAlgorithmException,
            NoSuchPaddingException, InvalidKeyException,
            InvalidAlgorithmParameterException, IllegalBlockSizeException,
            BadPaddingException {
        Cipher cipher = Cipher.getInstance(cipherTransformation);
        SecretKeySpec secretKeySpec = new SecretKeySpec(key,
                aesEncryptionAlgorithm);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        plainText = cipher.doFinal(plainText);
        return plainText;
    }

    private static byte[] getKeyBytes(String key)
            throws UnsupportedEncodingException {
        byte[] keyBytes = new byte[16];
        byte[] parameterKeyBytes = key.getBytes(characterEncoding);
        System.arraycopy(parameterKeyBytes, 0, keyBytes, 0,
                Math.min(parameterKeyBytes.length, keyBytes.length));
        return keyBytes;
    }

    // 加密
    public static String encrypt(String plainText)
            throws UnsupportedEncodingException, InvalidKeyException,
            NoSuchAlgorithmException, NoSuchPaddingException,
            InvalidAlgorithmParameterException, IllegalBlockSizeException,
            BadPaddingException {
        byte[] plainTextbytes = plainText.getBytes(characterEncoding);
        byte[] keyBytes = getKeyBytes(seed);
        return filter(Base64.encodeToString(
                encrypt(plainTextbytes, keyBytes, keyBytes), Base64.DEFAULT));
    }

    // 解密
    public static String decrypt(String encryptedText)
            throws KeyException, GeneralSecurityException,
            GeneralSecurityException, InvalidAlgorithmParameterException,
            IllegalBlockSizeException, BadPaddingException, IOException {
        byte[] cipheredBytes = Base64.decode(encryptedText, Base64.DEFAULT);
        byte[] keyBytes = getKeyBytes(seed);
        return new String(decrypt(cipheredBytes, keyBytes, keyBytes),
                characterEncoding);
    }

    /**
     * 去掉加密字符串换行符
     *
     * @param str
     * @return
     */
    public static String filter(String str) {
        String output = "";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < str.length(); i++) {
            int asc = str.charAt(i);
            if (asc != 10 && asc != 13) {
                sb.append(str.subSequence(i, i + 1));
            }
        }
        output = new String(sb);
        return output;
    }
}


參考資料 : android AES加密
參考資料 : .NET/android/java/iOS AES通用加密解密
參考資料 : AES加密并经过Base64编码,安卓php通用

歡迎轉載,請註明出處。

Android-英文 數字 亂數生成


/**
 * 英數亂數
 * @param len
 * @return
 */
public static String randomString(int len) { 
    String str = "0123456789abcdefghijklmnopqrstuvwxyz"; 
    StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < len; i++) { 
        int idx = (int)(Math.random() * str.length()); 
        sb.append(str.charAt(idx)); 
    } 
    return sb.toString(); 
} 

歡迎轉載,請註明出處。

2016年2月22日 星期一

SQLite-新增、修改、刪除 SELECT, INSERT, DELETE, UPDATE,WHERE

上一篇 :

上一篇有簡單介紹如何建立資料
接下來我們要來介紹
用語法執行 : 篩選( Select )、新增( Insert )、修改( Update )、刪除( Delete )

篩選
// 所有欄位
SELECT * FROM products;

// Name 和 Price 欄位
SELECT Name,Price FROM products;


2016年2月20日 星期六

SQLite-創立表格 Create Table (UI

上一篇 : SQLite-創立資料庫 Create DataBase

創立完資料庫後
我們就要開始建立表格
1 . 創立表格

















2 . 設立欄位型態

















3 . 可以複製他生成的語法或者直接幫你創立

















4 . 檢查您剛剛生成的表格及欄位

















5 . 請先新增幾筆資料以便於後續流程















6 . 參考圖樣















歡迎轉載,請註明出處。

SQLite-創立資料庫 Create DataBase

前一章 : 

有了應用程式和工具
接下來開始創立新的資料庫
首先開啟 FireFox 附加工具

畫面


















1 . 創立新的 DataBase

















2 . DataBase 名稱

















3 . 儲存位置 

4 . 確認是否創立成功


















歡迎轉載,請註明出處。

SQLite-下載 安裝 工具

SQLite 是一個小型的資料庫
非常適合用於行動裝置上
接下來我們要簡單介紹怎麼在 Window 中執行
最後我們使用 FireFox 提供的應用程式編輯

1 . 到官方下載應用程式SQLite Download





























2 . 將檔案解壓縮完,並且放置( sqlite3.ext )到好管理的位置





















3 . 開啟 FireFox 瀏覽器 並且輸入 : Firefox Database Management






























4 . 加入 FireFox 工具列表中














5 . 安裝完後,開啟 FireFox 瀏覽器
按下 Alt 按鍵 !!!
按下 Alt 按鍵 !!!
按下 Alt 按鍵 !!!
點選應用程式















以上就是我們之後用來編輯的工具。

歡迎轉載,請註明出處。

2016年2月19日 星期五

Android-MD5 加密


public static String md5(String s){
    MessageDigest digest;
    try
    {
        digest = MessageDigest.getInstance("MD5");
        digest.update(s.getBytes(Charset.forName("US-ASCII")),0,s.length());
        byte[] magnitude = digest.digest();
        BigInteger bi = new BigInteger(1, magnitude);
        String hash = String.format("%0" + (magnitude.length << 1) + "x", bi);
        return hash;
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
    return "";
}


歡迎轉載,請註明出處。

Android-ImageView url

參考資料 : 【Android】ImageView顯示網路圖片(Converting Image URL to Bitmap)
參考資料 : Windows用戶別錯過!原價39.9美金的WinUtilities Pro系統優化軟體限免下載中

2016年2月12日 星期五

MySQL-基本資料型別_整數( 一 )

數據類型範圍
TINYINT有符號值 : -128 ~ 127
無符號值 : 0 ~ 255
SMALLINT有符號值 : -32768 ~ 32767
無符號值 : 0 ~ 65535
MEDIUMINT有符號值 : -2^23 ~ 2^23-1
無符號值 : 0 ~ 2^24
INT有符號值 : -2^31 ~ 2^31-1
無符號值 : 0 ~ 2^32-1
BIGINT有符號值 : -2^63 ~ 2^63-1
無符號值 : 0 ~ 2^64-1

為什麼不直接用調置最大儲存?
如果儲存內容為班級身高那這不是殺雞焉用牛刀,一打鉛筆用卡車載送!!!
那10打鉛筆不就要用到10輛卡車,那浪費一堆資源卻得不到好處!!!

歡迎轉載,請註明出處。

2016年2月10日 星期三

MySQL-登入與登出( 三 )

參數說明
-D, --database=name打開指定資料庫
--delimiter=name指定分隔符號
-h, --host=name伺服器名稱
-p, --password[=name]密碼
-P, --port=#端口
--prompt=name設置提示符號
-u, --user=name使用者名稱
-V, --version版本
















mysql -uroot -p -P3306 -h127.0.0.1

歡迎轉載,請註明出處。

2016年2月6日 星期六

MySQL-安裝與執行( 二 )

上一篇 : MySQL-安裝與執行( 一 )

接下來我們就來確認剛剛的安裝是否真正成功
首先我們點選電腦管理的介面
確認我們剛剛建立的 MySQL Server 是否啟動














並且在環境變數新增






















再次到命令提示字元確認
請輸入 : net start mysql

如果 Respone : 系統發生 5 錯誤
代表權限未開啟

這時比較建議直接用管理者開啟命令提示字元
請輸入 : net user administrator /active:yes

參考資料 : 想開啟administrator可是卻發生 系統發生5錯誤 存取被拒絕

歡迎轉載,請註明出處。

2016年2月4日 星期四

MySQL-安裝與執行( 一 )

此教學目的是如何安裝 MySQL 
圖多,但基本上會把重點做標記

1 . 下載官方安裝檔案
連結 : MySQL on Windows















2 . 點擊安裝





















3 . 設定管理者密碼









想開啟administrator可是卻發生 系統發生5錯誤 存取被拒絕

下一篇 : MySQL-安裝與執行( 二 )

參考資料 : Install MySQL On Mac
歡迎轉載,請註明出處。