J2EE Part 12

1. 用 Java存取 excel 的資料
import java.sql.*;
public class Test {
  public static void main ( String[] args ){
    try {
     //以下紅色為建立連線
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      String url = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=c:\\MyExcelDB.xls;DriverID=22;READONLY=false";
      Connection con = DriverManager.getConnection(url,"","");
      Statement stmt = con.createStatement();
      String strSQL = "SELECT * FROM [Sheet1$]";
      ResultSet rs = stmt.executeQuery(strSQL);
      while ( rs.next() ){
/*
        System.out.println( rs.getInt(1) );
        System.out.println( rs.getString(2) );
        System.out.println( rs.getFloat(3) );
*/
        System.out.println( rs.getInt("p_no") );
        System.out.println( rs.getFloat("price") );
        System.out.println( rs.getString("p_name") );
      }
      rs.close();   //關閉連線
        //插入一筆資料
      stmt.execute("INSERT INTO [Sheet1$] values (88, 'car', 1000000)");
      stmt.close();
      con.close();
    } catch ( Exception e ){
      System.out.println(e);
    }
  }
}


2.用 Java存取 MySQL 的資料

a.下載 mysql-connector-java-5.1.21
b. 將之解壓縮後,再將裡面的 mysql-connector-java-5.1.21-bin.jar 複製到 C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib 裡面。之後就可以用裡面的一些 class for Driver
範例:
index.jsp
<%@ page import="java.sql.*" contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>SELECT 語法練習</title>
</head>
<body>
SQL SELECT 語法練習 &nbsp;&nbsp;&nbsp;
<a href='../'>回上一頁</a>
<hr>
<%
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/company?user=root&password=apple&charset=utf8";
    Connection con = DriverManager.getConnection(url);
    Statement stmt = con.createStatement();
    String strSQL = "SELECT * FROM employee";
    ResultSet rs = stmt.executeQuery(strSQL);
    while ( rs.next() ){

      out.println( rs.getString("ID") + ", " + rs.getString("c_name") + ", " + rs.getString("e_name") + ", " + rs.getString("department") + ", " + rs.getString("position"));
      out.println("</br>");

    }
    stmt.close();
    con.close();
%>
</body>
</html>

結果:


3.用資料庫 (MySQL)的方式來驗證帳號密碼
PS:可參照 20120711 J2EE 程式設計九 "3.用檔案的方式來驗證帳號密碼"
a.複製資料夾 "login_session_io",重新命名為 "login_session_mysql"。
b.因為已經不需要,只需將裡面的帳號密碼,輸入到資料庫即可。所以可以刪除。
c.修改
check.jsp

<%@ page contentType="text/html; charset=UTF-8" import="java.sql.*"   //需要匯入java.sql.* %>
<%
   String act = request.getParameter("act");
   String pwd = request.getParameter("pwd");
//將之前從檔案帳號密碼的方式,改由從資料庫抓帳號密碼
    Class.forName("com.mysql.jdbc.Driver");   //告訴 JSP 要用這個 class
       //告訴 JSP 資料庫的路徑及存取資料庫的帳密
    String url = "jdbc:mysql://localhost:3306/company?user=root&password=apple&charset=utf8";
       //建立資料庫連線 
    Connection con = DriverManager.getConnection(url);
       //宣告字串變數 stmt 來放 SQL 語法
    Statement stmt = con.createStatement();
       // SQL 語法為...。因為 e_name = '' 要用單引號來包 act,所以雙引號要在外面
    String strSQL = "SELECT * FROM employee where e_name = '" + act + "'";
       // 將取得的資料放到 ResultSet (就是放在記憶體裡面)
    ResultSet rs = stmt.executeQuery(strSQL);
        //判斷帳密是否正確
   if (
pwd != null        //輸入的 pwd 不是null
&& rs.next()        //resultSet 還有下一行可讀 (第一行有資料)
&& rs.getString("pwd") != null        // resultSet 中的 pwd 欄位不是null
&& pwd.equals(rs.getString("pwd"))        //輸入的 pwd 的值,等於 resultSet 中 pwd 欄位的值
){
  session.setAttribute("uid",act);        //驗證正確就將 session 給他
  response.sendRedirect("wellcome.jsp");        //導到 wellcome.jsp
   } else {
response.sendRedirect("error.html");         //驗證錯誤就導到 erroe.jsp
   } //if
    stmt.close();
    con.close();
%>

結果:



PS:若要在歡迎畫面( wellcome.jsp) 秀出中文名需要修改2個地方
1.在 check.jsp 加入一行
  session.setAttribute("c_name",rs.getString("c_name"));

check.jsp 完整版
<%@ page contentType="text/html; charset=UTF-8" import="java.sql.*" %>
<%
   String act = request.getParameter("act");
   String pwd = request.getParameter("pwd");

    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/company?user=root&password=apple&charset=utf8";
    Connection con = DriverManager.getConnection(url);
    Statement stmt = con.createStatement();
    String strSQL = "SELECT * FROM employee where e_name = '" + act + "'";
    ResultSet rs = stmt.executeQuery(strSQL);

   if (
pwd != null
&& rs.next()
&& rs.getString("pwd") != null
&& pwd.equals(rs.getString("pwd"))
){
  session.setAttribute("uid",act);
         //加入這一行,多設定一個 session 變數 c_name,將它指向 resultSet 的 c_name 欄位 
  session.setAttribute("c_name",rs.getString("c_name"));   
  response.sendRedirect("wellcome.jsp");
   } else {
response.sendRedirect("error.html");
   }
    stmt.close();
    con.close();
%>

2.在 wellcome.jsp 修改
wellcome.jsp 修改
<%
   if (session.getAttribute("uid") == null){
      response.sendRedirect("error.html");
   }
%>
   // 原本是 session.getAttribute("uid"),改成  session.getAttribute("c_name")
<%= session.getAttribute("c_name")%>  你好!歡迎光臨</br></br>
<a href='./logout.jsp'>登出</a><br>

<form name='logout' method='post' action='logout.jsp'>
<input type='submit' value='登出'>
</form>

結果:

No comments: