2016年12月31日 星期六

JAVA-如何用JDBC存取資料庫(MySQL)

想必大家建立好資料庫後
一定存放大量資料等待存取管理吧
此篇是以基本的方法來教大家如何用 Java 來存取 DB 資料

首先要先來了解的是 : JDBC
如果看不懂以上連結的解釋
最簡單的敘述 : Java - JDBC( 之間溝通 ) - SQL ( DB )

我們要先了解您要是要連哪一種資料庫別
畢竟資料庫有很多廠商
我們這裡以 :MySQL 為範例

準備步驟 :
1 . 所以我們要來這下載 Jar  : The official JDBC driver for MySQL
2 . 確認 IP 位置以及資料庫名稱
3 . 確認連線權限以及帳號密碼
4 . 連線後要做的事情

package com.brian.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTest {

    // 資料庫別
    private static final String driver = "com.mysql.jdbc.Driver";
    // 連線資訊
    private static final String url = "jdbc:mysql://localhost:3306/";
    // DataBase
    private static final String DBName = "store";
    // 使用者帳號
    private static final String user = "root";
    // 使用者密碼
    private static final String password = "password";
    
    public static void main(String[] args) {
        Connection connection = null;
        try {
            Class.forName(driver);

            String DBUrl = url + DBName;
            connection = DriverManager.getConnection(DBUrl, user, password);
            System.out.println("成功連線至DB");

            Statement statement = connection.createStatement();
            String sql = "Select * From proudct";
            ResultSet resultSet = statement.getResultSet();
            while (resultSet.next()) {
                // Table 欄位名稱(產品編號)
                System.out.println(resultSet.getString("NO"));
            }
            
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


參考資料 : JAVA基础 之 Statement
參考資料 : 解决mysql“Access denied for user 'root'@'IP地址'
歡迎轉載,請註明出處.

2016年12月17日 星期六

JAVA-Servlet 常用的方法

此篇整理較常用到的方法
Request常用方法


客戶端連線資訊
編號Method說明
1getRequestURL客戶端發出請求完整的 URL
2getRequestURI客戶端發出請求的資源路徑
3getQueryString客戶端發出的參數資源
4getMethod客戶端請求的方式
5getRemoteAddr
6getRemoteHost
7getRemotePort
8getLocalAddr
9getLocalName


客戶端請求的開頭
編號Method說明
1getHead取得開頭特定參數
2getHeaders取得開頭所有參數
3getHeaderNames取得所有開頭名稱


客戶端請求的參數
編號Method說明
1getParameter取得特定名稱參數
2getParameterValues取得特定名稱參數( 複選表單/框)
3getParameterNames
4getParameterMap

參考資料 : HttpServletRequest、request常用方法

2016年12月8日 星期四

Android-Parcelable 的包裝

想必大家對 Serializable 不陌生吧

如果大家對以上的有一定的概念
那麼 Parcelable 就是 Android 專用的序列化協定
-------------------------------
Parcelable
public interface Parcelable

android.os.Parcelable
.
.
.
---------------------------------

最棒的是 Intent 也支援他

1 .實作介面 Parcelable
public class ItemBean implements Parcelable {
    .
    .
    .
}

2 .並且宣告對應的方法
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    // Parcel : 將指定的資料寫入包內( 您宣告的參數 )
}

3 . 最後 Parcelable 必須使用 Creator,把上述的參數再次裝填
public static final Parcelable.Creator<ItemBean> CREATOR = new Creator(){

    @Override
    public Object[] newArray(int size) {
        // Object 更改成您的 Class Name,並且將數量放置在生成的陣列數
        return new Object[size];
    }

    @Override
    public Object createFromParcel(Parcel parcel) {
        // Object 更改成您的 Class Name,Return 放置資料完成後的 Class
        // 將剛剛 writeToParcel 的內容包裝存放
        return null;
    }
};

4 . 範例 : 比如我們建立一個物品的 Bean
可能有物品名稱、物品重量..等
public class ItemBean implements Parcelable {

    private String strItemName;
    private int intItemWeight;

    @Override
    public int describeContents() {
        // 尚未很了解此用途,
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        // Parcel : 將指定的資料寫入包內( 您宣告的參數 )
        // 請依照順序擺放,不然無法對應到
        parcel.writeString(strItemName); // String 型別
        parcel.writeInt(intItemWeight); // int 型別
    }

    /**  Creator  **/
    public static final Parcelable.Creator<ItemBean> CREATOR = new Creator(){

        @Override
        public ItemBean[] newArray(int size) {
            // Object 更改成您的 Class Name,並且將數量放置在生成的陣列數
            return new ItemBean[size];
        }

        @Override
        public ItemBean createFromParcel(Parcel parcel) {
            // 請依照順序擺放,不然無法對應到
            ItemBean itemBean = new ItemBean();
            itemBean.setStrItemName(parcel.readString());
            itemBean.setIntItemWeight(parcel.readInt());
            return itemBean;
        }
    };
    
    /**  Get & Set  **/
    public String getStrItemName() {
        return strItemName;
    }

    public void setStrItemName(String strItemName) {
        this.strItemName = strItemName;
    }

    public int getIntItemWeight() {
        return intItemWeight;
    }

    public void setIntItemWeight(int intItemWeight) {
        this.intItemWeight = intItemWeight;
    }
}

6 .Intent 用法
A 頁面
Intent intent = new Intent(getActivity(), AppleActivity.class);
intent.putExtra("ItemInfo", itemBean);
startActivity(intent);

B 頁面
Intent i = getIntent();
ItemBean itemBean = (ItemBean) i.getParcelableExtra("ItemInfo");
if(itemBean != null) {
    .
    .
    .
}


參考資料 : Android_Parcelable

2016年12月4日 星期日

Android-GoogleMap 地圖開發

此篇為簡略流程,可以先參考,尚未整理。

想必隨著應用程式的多元
越來越多創新的應用程式也在 GoogleMap 添加新的色彩
例如 : 寶可夢 !!!

 這篇就教大家如何在專案內添加 GoogleMap
 並且能夠執行
首先在我們專案 Gradle 添加 Google Service
compile 'com.google.android.gms:play-services:7.0.0'

並且添加網路以及 GPS 相關權限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

再來記得去 : Google API 申請鑰匙

開啟專案底下 res -> values ->  google_maps_api.xml 新增
並且將您的 Key 放入指定位置內
以下是官方文件
<resources>
    <!--
    TODO: Before you run your application, you need a Google Maps API key.
    See this page for more information:
    https://developers.google.com/maps/documentation/android/start#get_an_android_certificate_and_the_google_maps_api_key
    Once you have your key (it starts with "AIza"), replace the "google_maps_key"
    string in this file.
    Note: This resource is used for the release build target. You likely only want to update the string
    in the debug/.../google_maps_api.xml instead if you just want to run this app.
    (This file is used for the release target that uses the release key store.)
    -->
    <!-- translatable 可以轉換任意語言 -->
    <string name="google_maps_key" translatable="false" templateMergeStrategy="preserve">
        YourApiKey
    </string>
</resources>

把版本代號以及 API Key放置對應位置
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    .
    .
    .
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key" />

    .
    .
    .
</application>


建立 XML 介面
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    tools:context=".activity.MapActivity" />

Activity 內容
package com.net.lightblue.gototaipei.activity;

import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;


public class MapActivity extends Activity 
                implements OnMapReadyCallback {

    private SupportMapFragment mapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(map);
        mapFragment.getMapAsync(this);

    }


    @Override
    public void onMapReady(GoogleMap map) {
        // Add a marker in Sydney, Australia, and move the camera.mera.
        LatLng sydney = new LatLng(-34, 151);
        map.addMarker(new MarkerOptions().position(sydney).title("Hello"));
        map.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }

}

參考資料 : Maps Android API 
參考資料 : GoogleMap 相機檢視
歡迎轉載,請註明出處。