作為一個新手,對Struts2和Jquery的好感與日俱增。這兩天抽空總結了一下他們串連SQLServer資料庫的方法。親測可行。
=========================================================
資料庫名:test
資料表名:testTable,2個欄位(id,text)
=========================================================
struts.xml
<struts>
<package name="myPackage" extends="json-default">
<action name="connDB" class="com.connMSSQL">
<result type="json"></result>
</action>
</package>
</struts>
==========================================================
connDB.java
package com;
import java.sql.*;
public class connDB
{
protected static Connection conn=null;
protected static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
protected static final String URL="jdbc:sqlserver://localhost:1433; database=test";
protected static final String NAME="sa";
protected static final String PASSWORD="123";
public Connection getDBConn()
{
/*
* 這是用於串連SQLServer資料庫的公用類
*
* */
try {
Class.forName(DRIVER);
conn=DriverManager.getConnection(URL,NAME,PASSWORD);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch(SQLException e)
{
e.printStackTrace();
}
return conn;
}
}
==========================================================
connMSSQL.java
package com;
import java.sql.*;
import com.connDB;
import java.util.ArrayList;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import com.opensymphony.xwork2.ActionSupport;
public class connMSSQL extends ActionSupport
{
/*
* 本程式實現從資料庫中讀取資料,並把結果序列化為JSON格式,再以String類型傳遞給前台頁面
*
* */
private String result;
public String getResult()
{
return this.result;
}
public void setResult(String tmp)
{
this.result=tmp;
}
public String execute()
{
ArrayList<String> recordSet = new ArrayList<String>(); //這個變數用於儲存中間結果
connDB myConnDB=new connDB(); //建立串連資料庫的類
Connection myConn=myConnDB.getDBConn();
//調用類的方法實現資料庫連接
try {
ResultSet myRS=myConn.createStatement().executeQuery("select * from testTable");//建立並執行SQL語句,把結果放到ResultsSet變數中
if(myRS.wasNull())
this.result="no records";
else
{
int columnNum=myRS.getMetaData().getColumnCount();
//擷取結果集的列數
while(myRS.next())
{
ArrayList<String> recordRow = new ArrayList<String>();//這個變數存放當前行的資料,每成功擷取一行就把它的結果放到recordSet變數中
for(int n=1;n<=columnNum;n++)
{
recordRow.add(myRS.getString(n)); //將當前行放到變數中
}
JSONArray tmp=JSONArray.fromObject(recordRow); //把當前行的結果序列化為JSON格式
recordSet.add(tmp.toString());//把已經擷取的當前行資料放入中間結果變數中
recordRow.clear();//釋放當前行
tmp.clear();
}
JSONArray jsonList = JSONArray.fromObject(recordSet);
//把已經產生的中間結果序列化為JSON格式
this.result= jsonList.toString();//將結果再轉換為String類型,用於向頁面傳遞,由頁面JS再將把結果轉換為JSOn格式 進行顯示
jsonList.clear();
}
myConn.close();
myRS.close();
recordSet.clear();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
}
==========================================================
index.jsp
<script type="text/javascript" src="JS/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="JS/index.js"></script>
瀏覽:<br/>
<table id="mytable" border="1">
<tr>
<td>編號</td>
<td>內容</td>
<td>刪除</td>
</tr>
</table>
==========================================================
index.js
$(function(){
$.ajax({
url:'connDB.action',
type:'post',
dataType:'json',
success:function(serverDate)
{
var msg=eval("("+serverDate.result+")");//查詢結果格式轉換為JSON ,這一句非常重要!
//////用自訂的表格顯示查詢內容
$.each(msg,function(i,item){
//msg為Action傳過來的結果,i為結果中當前行的索引號,item為存放有當前行資料的數組
$("#mytable").append("<tr onclick=chooserow("+item[0]+",'"+item[1]+"')><td>"+item[0]+"</td><td>"+item[1]+"</td><td><a href='javascript:deleteItem("+item[0]+")'>刪除</a></td></tr>");
})
//////表格顯示結束
}
});
})
==========================================================
最終結果: