顯示具有 JAVA學習筆記 標籤的文章。 顯示所有文章
顯示具有 JAVA學習筆記 標籤的文章。 顯示所有文章

2017年11月28日 星期二

JAVA連接MySQL資料庫

下載並匯入外部JAR


https://drive.google.com/file/d/1dXW-ADaK-hJ4L7mMyrdvKMKuvIGahKd-/view?usp=sharing

程式碼


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JavaToMySQLTest 
{
    public static void main(String[] args) throws ClassNotFoundException 
    {
        Connection conn = null;
        try
        {
            //連接MySQL
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("連接成功MySQLToJava");
            //建立讀取資料庫 (test 為資料庫名稱; user 為MySQL使用者名稱; passwrod 為MySQL使用者密碼)
            String datasource = "jdbc:mysql://localhost/test?user=user&password=passwrod";
            //以下為資料庫操作
            conn = DriverManager.getConnection(datasource);
            System.out.println("連接成功MySQL");
            Statement st = conn.createStatement();
            //撈出剛剛新增的資料
            st.execute("SELECT * FROM member");
            ResultSet rs = st.getResultSet();
            while(rs.next())
            {
                System.out.println(rs.getString("account")+" "+rs.getString("pwd"));
            }
        }catch(Exception e)
        {
            System.out.println("?");
        }
    }
}

2017年11月26日 星期日

JAVA程式的確認視窗

JAVA程式關閉視窗時,顯示確認訊息

class WindowHandler extends WindowAdapter {
  JFrame f;
  public WindowHandler(JFrame f) {this.f=f;}
  public void windowClosing(WindowEvent e) {
    int result=JOptionPane.showConfirmDialog(f,
               "確定要結束程式嗎?",
               "確認訊息",
               JOptionPane.YES_NO_OPTION,
               JOptionPane.WARNING_MESSAGE);
    if (result==JOptionPane.YES_OPTION) {System.exit(0);}
    } 
  }


呼叫方法

frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowHandler(frame));



JAVA程式的確認視窗

int opt=JOptionPane.showConfirmDialog(frame,"確定要儲存?","確認",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE);

if (opt==JOptionPane.YES_OPTION) {
st.execute(Y);
JOptionPane.showMessageDialog(frame,"儲存成功 ");
}
else if (opt==JOptionPane.NO_OPTION) {
JOptionPane.showMessageDialog(frame,"您按了 NO (否) " );
}
else if (opt==JOptionPane.CANCEL_OPTION) {
JOptionPane.showMessageDialog(frame,"您按了 CANCEL (取消) " );
}
else if (opt==JOptionPane.CLOSED_OPTION) {
JOptionPane.showMessageDialog(frame,"您按了 CLOSE (關閉) " );
}

2017年11月23日 星期四

JAVA取得日期

//==格式化
SimpleDateFormat nowdate = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

//==GMT標準時間往後加八小時
nowdate.setTimeZone(TimeZone.getTimeZone("GMT+8"));

//==取得目前時間
String sdate = nowdate.format(new java.util.Date());

2017年11月22日 星期三

JAVA按鈕事件範例

del_button.addMouseListener(new MouseAdapter() { //按鈕事件
public void mouseClicked(MouseEvent e) {
//要做的事情寫在這邊
}
});

2017年11月14日 星期二

讓comboBox 顯示值與回傳值不同的做法

先前準備
注意class的名稱
class ComboItem
{
    private String key;
    private String value;

    public ComboItem(String key, String value)
    {
        this.key = key;
        this.value = value;
    }

    @Override
    public String toString()
    {
        return key;
    }

    public String getKey()
    {
        return key;
    }

    public String getValue()
    {
        return value;
    }
}
將顯示值和回傳值add到comboBox
comboBox.addItem(new ComboItem("Visible String 1", "Value 1"));
comboBox.addItem(new ComboItem("Visible String 2", "Value 2"));
comboBox.addItem(new ComboItem("Visible String 3", "Value 3"));
把值讀出來

Object item = comboBox.getSelectedItem();
String value = ((ComboItem)item).getValue();

2017年11月7日 星期二

用函式的方式讀取ACCESS資料庫,並顯示在視窗上

學習筆記


1.用函式的方式讀取ACCESS資料庫,並顯示在視窗上
2.使用JScrollPane讓textArea可以顯示捲軸
3.scrollPane捲軸的設定,橫向與縱向是否要使用捲軸
4.按鈕事件後,讓textArea去讀取函式抓新的值 (try語法)

import java.awt.EventQueue;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.WindowListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class onioni{

private JFrame frame;

/**
* Launch the application.
* @throws SQLException 
*/
public static void main(String[] args) throws SQLException {

EventQueue.invokeLater(new Runnable() {
public void run() {
try {
onioni window = new onioni();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the application.
*/
public onioni() throws SQLException{
initialize();
output_list();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() throws SQLException{
frame = new JFrame();
frame.setBounds(100, 100, 536, 514);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);




}
public static String output_text(int id) throws SQLException{ //輸出文字
        Connection connDB = null;
        String X=null;
        try
        {
            //建立驅動程式,連結odbc至Microsoft Access
         Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        }catch(ClassNotFoundException e)
        {
            System.out.println("Driver loading failed!");
        }  
        //連結資料庫
        connDB = DriverManager.getConnection("jdbc:ucanaccess://f:/text.mdb");
        Statement st = connDB.createStatement();        
        st.execute("SELECT * FROM 文章 where 識別碼="+id);
        ResultSet rs = st.getResultSet();
        while(rs.next()) //將數據讀出來
        {
        X=rs.getString("內容");
        }        
        return X; //轉出
}


private void output_list() throws SQLException{

//下拉式選單
JComboBox comboBox = new JComboBox();
comboBox.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(comboBox.getSelectedItem().toString());
}
});
comboBox.setBounds(61, 36, 100, 21);
frame.getContentPane().add(comboBox);

//表單內容
JTextArea textArea = new JTextArea();
textArea.setLineWrap(true);  //設定自動換行
final JScrollPane scrollPane = new JScrollPane(textArea);
// textArea.setBounds(107, 100, 270, 286); //不可以設定textArea的大小,不然無法顯示捲軸
frame.getContentPane().add(scrollPane); //這邊要設定add(scrollPane),不是add(textArea)
scrollPane.setBounds(50, 100, 400, 300);

scrollPane.setHorizontalScrollBarPolicy( //橫向的不出現捲軸
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);   
scrollPane.setVerticalScrollBarPolicy(      //縱向的有需要再出現捲軸
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

textArea.setText(output_text(228));

//按鈕事件
JButton btnNewButton = new JButton("\u78BA\u5B9A");
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {

int i= Integer.parseInt(comboBox.getSelectedItem().toString()); //強制轉成數字
try { //要用try才可以
textArea.setText(output_text(i));
} catch (SQLException e1) {
// TODO 自動產生的 catch 區塊
e1.printStackTrace();
}
}
});
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnNewButton.setBounds(171, 35, 87, 23);
frame.getContentPane().add(btnNewButton);


//連結資料庫的程式
        Connection connDB = null;
        try
        {
            //建立驅動程式,連結odbc至Microsoft Access
         Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        }catch(ClassNotFoundException e)
        {
            System.out.println("Driver loading failed!");
        }  
        //連結資料庫
        connDB = DriverManager.getConnection("jdbc:ucanaccess://f:/text.mdb");
        //SQL共有 INSERT、SELECT、UPDATE、DELETE,以下分別列舉
        Statement st = connDB.createStatement();        
        st.execute("SELECT * FROM 文章");
        ResultSet rs = st.getResultSet();
        while(rs.next())
        {
        comboBox.addItem(rs.getString("識別碼"));
        }
}
}

2017年10月27日 星期五

讓JAVA讀取ACCESS資料庫的方法

先下載 UCanAccess
https://drive.google.com/file/d/0B4A4xib87TTcTFZpdHZ0ZVlfQnM/view?usp=sharing&resourcekey=0-Uxga50RFzN3ZaaBxA4lNOQ
解壓縮後,會有五個JAR檔案

ucanaccess-4.0.2.jar
lib/commons-lang-2.6.jar
lib/commons-logging-1.1.1.jar
lib/hsqldb.jar
lib/jackcess-2.1.6.jar

先把這五個檔案新增成外部JAR

作法:在專案上按右鍵→內容→JAVA建置路徑→新增外部JAR

然後就可以開始寫程式了

程式碼參考如下

package jdbcexample;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import net.ucanaccess.jdbc.JackcessOpenerInterface;
public class JDBCExample 
{
    public static void main(String[] args) throws SQLException 
    {
        Connection connDB = null;
        try
        {
            //建立驅動程式,連結odbc至Microsoft Access
         Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        }catch(ClassNotFoundException e)
        {
            System.out.println("Driver loading failed!");
        }  
        //連結資料庫
        connDB = DriverManager.getConnection("jdbc:ucanaccess://d:/text.mdb");
        //SQL共有 INSERT、SELECT、UPDATE、DELETE,以下分別列舉
        Statement st = connDB.createStatement();        
        st.execute("SELECT * FROM pic");
        ResultSet rs = st.getResultSet();
        while(rs.next())
        {
            System.out.println(rs.getString("識別碼")+" "+rs.getString("檔案名稱"));
        }        
    }
}



106.10.31 要讓視窗程式讀取ACCESS

1.在視窗程式的 public 後面加上 throws SQLException
2.後面再加上讀取資料庫的程式
3.下方說明是讓JTextArea可以使用捲軸
4.紅色字體部分是後來加上的 下拉式選單設定

public TEXT() throws SQLException{
    JFrame f = new JFrame("Text Area Examples");
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     JTextArea content = new JTextArea(100,10) ;
     JScrollPane g = new JScrollPane(content);
     f.setBounds(100,100,582,520);
     f.setVisible(true);
     f.getContentPane().setLayout (null); //nul表示自訂樣式,不使用預設的樣式         
     //content.setBounds(10,10,100,100);
     g.setBounds(110,51,413,390);
     f.getContentPane().add(g);

        JPanel Pan=new JPanel(null); 
        Pan.setLocation(0,0); 
        Pan.setSize(400,300); 
        JComboBox box=new JComboBox(); 
        box.setBounds(10,10,100,30); 

        Connection connDB = null;
        try
        {
            //建立驅動程式,連結odbc至Microsoft Access
         Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        }catch(ClassNotFoundException e)
        {
            System.out.println("Driver loading failed!");
        }  
        //連結資料庫
        connDB = DriverManager.getConnection("jdbc:ucanaccess://f:/text.mdb");
        //SQL共有 INSERT、SELECT、UPDATE、DELETE,以下分別列舉
        Statement st = connDB.createStatement();        
        st.execute("SELECT * FROM 文章 where 識別碼=228");
        ResultSet rs = st.getResultSet();
        while(rs.next())
        {
        content.setText(rs.getString("內容"));
        box.addItem(rs.getString("識別碼"));
        }   
        Pan.add(box); 

        f.getContentPane().add(Pan); 
}


當宣告  JScrollPane g = new JScrollPane(content);  之後,物件g就會內嵌物件content並在畫面上顯示,因此如果要宣告物件的在畫面上的大小,就應該要用JScrollPane的方法來設定,也就是用JScrollPane的setBounds來設定,千萬不要用JTextArea的setBounds來設定,否則會導致捲軸無法使用。



2011.11.25 補充

讓程式讀取專案內資料夾的檔案

connDB = DriverManager.getConnection("jdbc:ucanaccess://bin/data/text.mdb");
(使用相對路徑)

2017年10月24日 星期二

參數的學習紀錄

常用的函式

//把字串強制轉為數字
Integer.parseInt(字串); 

JLabel

可以放文字,也可以放照片
lblNewLabel_1.setIcon(new mageIcon("C:\\Users\\Administrator\\Pictures\\\u54C8\u59C6\u592A\u90CE\\1-150519155952.jpg"));
以上是放照片的範例

JTextField

2017.10.24
String A1=A.getText();
B.setText(A1);
利用按鈕讓 B 欄讀取 A欄的值 (字串部分)

2017.10.25
Integer A1x= Integer.parseInt(A1.getText()); //取出A1裡面的值,並轉為數值
Integer A2x= Integer.parseInt(A2.getText());

Integer A = A1x+A2x;
B.setText(""+A); //讓B欄顯示A1+A2之後的值,因為是用setText,所以前面一定要加"",目前先學到這邊,以後應該會發現更好的寫法

JComboBox 

JComboBox comboBox = new JComboBox();
//取出下拉式選單的值(字串部分)
comboBox.getSelectedItem().toString();

comboBox.removeAllItems(); //一定要先清空,不然用函式重複additem的時候,會有重複值

Java視窗程式開發WindowBuilder (使用教學)

首先我們先開一個新的Java專案
為專案取個名字
接著對專案的src中的package點選右鍵 -> New -> Other
選擇WindowBuilder -> Swing Designer -> Application Window 之後按下Next
接著取個名字 按下Finish
接著會產生相關程式碼 直接點選Design
接著可以用點選的方式在視窗上放置元件
Java視窗程式的Layout有很多種 可以依據自己需求改變layout的設定
這邊以Absolute layout做舉例 對著左上小視窗中的getContentPane() 點選右建 -> Set layout -> Absolute layout
這樣子物件就能放這任意位置(以x y軸方式)
而假如要設定元件的Event可以點選元件後 按下Properties 上面 的按鈕
接著對想要的Event點選左鍵兩下 便會產生相對應的程式碼
這樣就能依據自己想要的需求設計視窗化程式了

Java視窗程式開發WindowBuilder (安裝篇)

Java也可以用來開發視窗程式,雖然可以使用寫code的方式來調整元件的位置,但是在微調上非常的麻煩,而Eclipse有的Plugin可以使用拖拉的方式自動把相關程式碼建立起來。
1.      首先到window builder的下載頁面(連結)上根據自己的Eclipse版本複製相對應的網址(link)
(假如不知道自己的Eclipse版本請查看這篇:[教學]如何查看Eclipse版本)
2.      然後開啟Eclipse點選Help -> Install New Software…
會出現軟體安裝視窗 接著點選右邊的Add按鈕
會出現一個小視窗 填上自己想要的名字 並且把剛剛複製的網址貼在Location欄位 之後按下OK
接下來等待一下 中間的視窗就會出現選項 全部勾選後按下Next按鈕
會讓你確認勾選後會安裝的東西 按下Next
接著會顯示License同意書 勾選 I Accept the term of the license agreement 後按Finish 就會開始安裝
等待安裝完成
安裝完畢會顯示視窗說需要重新啟動Eclipse之後才能使用 按下Yes 會自動重新啟動Eclipse
重新啟動後按下Windows -> Preferences


如果左邊有WindowBuilder的選項便是裝安裝完成