|
|
|
Java - JSP ถามเรืื่องการส่ง SQL เข้าไปเพื่อทำการดึงข้อมูลกลับออกมากครับ |
|
|
|
|
|
|
|
แค่ทำพวก if สำหรับการเลือก Server ก็ไม่น่าจะยากครับ ว่าแต่เขียนอะไรไว้บ้าง ลองเอามาดูครับ
|
|
|
|
|
Date :
2013-05-30 12:55:31 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือ ตอนนี้ ผมยังไม่ได้เริ่มเขียน codeส่วนการดึงข้อมูลออกมาเลยครับ เพราะผมพึ่งเริ่มเรียน jsp เลยยังมอง ลักษณะของ codeที่ใช้หรือลักษณะการดึงข้อมูลครับ ว่า สมมุตว่า เราจะเก็บ sql ดังกล่าว ส่งให้ไปทำงานได้ยังไงครับ
|
|
|
|
|
Date :
2013-05-31 08:47:24 |
By :
s_007 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
selectdb.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style type="text/css">
table { border-collapse: collapse; }
th { background-color: lightyellow; }
th, td { border: 1px solid black; }
</style>
</head>
<body>
<c:choose>
<c:when test="${param.submit != null}">
<span>You choose database: </span><c:out value="${param.dbname}"/>
<c:if test="${param.querystring != ''}">
<br />
<br />
<c:out value="${param.querystring}"/>
<br />
<br />
<c:choose>
<c:when test="${param.dbname == 'mysql'}">
<c:set var="driver" value="com.mysql.jdbc.Driver" />
<c:set var="url" value="jdbc:mysql://127.0.0.1:3306/northwind;" />
<c:set var="user" value="root" />
<c:set var="password" value="mysql56" />
</c:when>
<c:otherwise>
<c:set var="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<c:set var="url" value="jdbc:sqlserver://127.0.0.1;instanceName=SQLEXPRESS;databaseName=northwind;integratedSecurity=true;" />
<c:set var="user" value="" />
<c:set var="password" value="" />
</c:otherwise>
</c:choose>
<sql:setDataSource var="dataSource" driver="${driver}" url="${url}" user="${user}" password="${password}" />
<sql:query dataSource="${dataSource}" var="result">
${param.querystring}
</sql:query>
<table>
<c:set var="columns" value="${result.rows[0]}" />
<tr>
<c:forEach var="column" items="${columns}" >
<th><c:out value="${column.key}" /></th>
</c:forEach>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<c:forEach var="column" items="${row}" >
<td>
<c:out value="${column.value}" />
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</c:if>
</c:when>
<c:otherwise>
<form method="POST" >
<span>Select Database:</span>
<select name="dbname">
<option value="sqlserver">Sql Server</option>
<option value="mysql">MySql Server</option>
</select>
<br />
<br />
<textarea name="querystring" rows="5" cols="75">
</textarea>
<br />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</c:otherwise>
</c:choose>
</body>
</html>
|
|
|
|
|
Date :
2013-05-31 10:55:14 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ไขเพิ่มเติม
เพิ่มโค้ด
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
แก้บรรทัดที่ 19
<c:if test="${fn:trim(param.queryString) != ''}">
|
|
|
|
|
Date :
2013-05-31 13:30:54 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่ครับ แล้วถ้า database ผมเป็น DB2 หล่ะครับ ก็แค่เปลี่ยน
Code (Java)
<c:set var="driver" value="com.mysql.jdbc.Driver" />
เป็น com.ibm.db2.jcc.DB2Driver ใช่มั้ยครับ ส่วนอื่นๆก็ยังคงร่างเดิม หรือป่าวครับ
|
ประวัติการแก้ไข 2013-05-31 14:43:34
|
|
|
|
Date :
2013-05-31 14:14:24 |
By :
s_007 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ต้องเปลี่ยนตรง
- driver
- url
- user
- password
|
|
|
|
|
Date :
2013-05-31 14:51:38 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
version ปรับปรุง
selectdb.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style type="text/css">
table { border-collapse: collapse; }
th { background-color: lightyellow; }
th, td { border: 1px solid black; }
.catch { color: red; }
</style>
</head>
<body>
<c:choose>
<c:when test="${param.submit != null}">
<span>You choose database: </span><c:out value="${param.dbServer}"/>
<c:if test="${fn:trim(param.queryString) != ''}">
<br />
<br />
Query string: <c:out value="${param.queryString}"/>
<br />
<br />
<c:choose>
<c:when test="${param.dbServer == 'mySql'}">
<c:set var="driver" value="com.mysql.jdbc.Driver" />
<c:set var="url" value="jdbc:mysql://localhost:3306/northwind" />
<c:set var="user" value="root" />
<c:set var="password" value="mysql56" />
</c:when>
<c:otherwise>
<c:set var="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<c:set var="url" value="jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;databaseName=northwind;integratedSecurity=true;" />
<c:set var="user" value="" />
<c:set var="password" value="" />
</c:otherwise>
</c:choose>
<sql:setDataSource var="dataSource" driver="${driver}" url="${url}" user="${user}" password="${password}" />
<c:catch var="catchException">
<sql:query var="resultSet" dataSource="${dataSource}">
${fn:trim(param.queryString)}
</sql:query>
</c:catch>
<c:choose>
<c:when test="${catchException != null}">
The exception is : <span class="catch"><c:out value="${catchException}" /></span><br />
There is an exception: <span class="catch"><c:out value="${catchException.message}" /></span>
</c:when>
<c:otherwise>
<table>
<c:set var="columns" value="${resultSet.rows[0]}" />
<tr>
<c:forEach var="column" items="${columns}" >
<th><c:out value="${column.key}" /></th>
</c:forEach>
</tr>
<c:forEach var="row" items="${resultSet.rows}">
<tr>
<c:forEach var="column" items="${row}" >
<td><c:out value="${column.value}" /></td>
</c:forEach>
</tr>
</c:forEach>
</table>
</c:otherwise>
</c:choose>
</c:if>
</c:when>
<c:otherwise>
<form method="POST">
<span>Select Database:</span>
<select name="dbServer">
<option value="sqlServer">Sql Server</option>
<option value="mySql">MySql Server</option>
</select>
<br />
<br />
<textarea name="queryString" rows="5" cols="75"></textarea>
<br />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</c:otherwise>
</c:choose>
</body>
</html>
|
|
|
|
|
Date :
2013-05-31 16:10:31 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมพยายาม ทำความเข้าใจ syntax แบบ <c: แล้ว มันก็ยังไม่ค่อยเข้าใจอยุ่ดี มีพี่คนไหนพอจะอธิบาย ความแตกต่างระหว่าง syntax แบบ <c: กับพวก try , catch , if , for ได้มั้ยครับ ผมพยายามแปลโค๊ดให้มันอยุ่ในรูปนั้นแล้ว มันก้ยังทำไม่ได้สักที
|
|
|
|
|
Date :
2013-06-04 09:27:35 |
By :
s_007 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เขาเรียกว่า jstl tag เป็นการเขียน jsp ในอีกรูปแบบหนึ่ง
ส่วนอีกแบบเรียกว่า scriptlet ซึ่งใช้ <%....%> ปิดเปิด tag แบบนี้
ตามความคิดว่า เราว่า web developer ส่วนใหญ่ จะไม่ชอบใช้แบบ scriptlet
ซึ่งต้องเขียนโค้ดปนกับ html เขาว่ามันน่าเกลียด พวกเขาเลยพัฒนา tag พวกนี้ขึ้นมา
เพื่อให้โค้ดดูสวยงาม ไม่ว่าจะเป็น asp.net mvc ก็มี razor (แบบ web form โค้ดไม่ปน html อยู่แล้ว)
php ก็มี template engine ต่างๆ เช่น smarty หรือที่มากับ framework เลยก็มี อย่างเช่น blade ใน laravel
ส่วน jsp ก็มี jstl tag นี่แหละ ซึ่งเรียกอีกอย่างว่า standard tag lib เพราะเราก็สามารถสร้าง tag
ขึ้นได้เองได้ แต่เขาจะไม่แนะนำให้ทำในกรณีที่ทำงานเป็นทีมใหญ่ๆ คนอื่นจะไม่เข้าใจ tag ของเรา
แต่ถ้าทำคนเดียวแล้วไม่คิดว่ามีคนมารับช่วงต่อก็ทำได้
สนใจก็ไปดู reference ได้ที่ http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm
|
|
|
|
|
Date :
2013-06-04 10:35:57 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|