iT邦幫忙

0

[JSP] 有連結到資料庫,但資料出不來??

大家好~

有事請教!!

JSP網頁中,測試資料庫是連結成功,但ResultSet 讀取資料又沒資料出來??(正常應該會印出DDDD的字串)

進SQL查詢確實有資料,請教這會是什麼狀況?? (已卡關2天@@...GOOGLE爬文,尚未有解答)

備註:版本是JAVA 1.6 資料庫: MS SQL 2008版本

擷取部分程式如下(前面程式已宣告Connect 和ResultSet)

//==============資料庫(MOCTA資料)===================================
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
out.println("YES");
}
catch(ClassNotFoundException ex1) {
out.println("JDBC Driver 載入失敗");
out.println(ex1.getMessage());
}
String MS_DB_URL = "jdbc:sqlserver://XXX.XXX.XXX.XXX:1433;DatabaseName="+pDataBase;
MS_dbConn = DriverManager.getConnection(MS_DB_URL, MS_USER, MS_pass);
if(!MS_dbConn.isClosed())
{
out.println("Connessione sucess a mysql server. . .");
}

Mst = MS_dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);


Mrs = Mst.executeQuery("select * from MOCTA");  //取得MOCTA紀錄
while(Mrs.next())
{
     out.println("DDDD");
}

資料庫查詢畫面:
https://ithelp.ithome.com.tw/upload/images/20180921/20105722QFnTsOKnwS.png

網頁呈現畫面:
https://ithelp.ithome.com.tw/upload/images/20180921/201057223Xc2RCIs5x.png

=============解答===========
自己問的問題,自己答。 (哈~)
超感謝有這麼多"邦友"在短短的時間內回應我,感覺自己沒有孤單面對,恩恩實在覺得很感恩 ^^

和大家說
我後來查到原因是以下框選之處
https://ithelp.ithome.com.tw/upload/images/20180921/20105722y9EeNh88fT.png

因為要依據不同的單別,切換不同資料庫,所以原先我是寫變數做切換。
但資料庫有連結成功,資料卻沒有出現??
走無路時,就走另一招,一開始先指定主要資料庫,等真正連結COMMAND資料時,再指定資料庫。
https://ithelp.ithome.com.tw/upload/images/20180921/20105722mMXvkO6zii.png
https://ithelp.ithome.com.tw/upload/images/20180921/20105722uGIh3mJGwW.png!

結果就可以了!!!
https://ithelp.ithome.com.tw/upload/images/20180921/20105722HV8L77eBNs.png

雖然成功了,但我也不知道為何JAVA語法連JDBC有這"眉嘎"。還好,我試出來。

但還是希望有高高手可以解惑,讓我對今天的提問有更多認識和了解,恩恩謝謝你!!

不過為什麼用變數串的連線字串會不行呢,有找到原因嗎?
這題我沒有看出來,哈哈哈
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
小魚
iT邦大師 1 級 ‧ 2018-09-21 12:11:39
最佳解答

我不會寫Java,
不過你如果要抓資料的話,
至少要指定一下你要抓哪個欄位的資料,
在C#有可能是 reader["TA01"].ToString() 之類的
在Java我猜可能是 Mrs("TA01") 吧???

看更多先前的回應...收起先前的回應...
恩恩 iT邦新手 5 級 ‧ 2018-09-21 13:43:56 檢舉

我有試著你的方式,但還是沒資料,出現"結果集目前沒有資料列"的訊息。
https://ithelp.ithome.com.tw/upload/images/20180921/201057221CDdDNkE1e.png
但直接在SQL SERVER查是有資料列...

JAVA:1.6 ; SQL SERVER:2008

恩恩 iT邦新手 5 級 ‧ 2018-09-21 16:56:54 檢舉

小魚謝謝你的回應,我找到原因了,寫在問題內容下方,若你也知道這狀況,歡迎你的再次回應!!

小魚 iT邦大師 1 級 ‧ 2018-09-21 18:53:09 檢舉

這跟Java無關,
純粹是你跟資料庫不熟,
通常我們會連特定的資料庫,
如果你同時要用好幾個資料庫的資料,
就會需要用

SELECT ... FROM [DataBase].[dbo].[Table] ...

的方式讀取(前提是在同一個資料庫系統中)

當然也可以使用

USE [DataBase];
SELECT ... FROM [Table] ...

只是這樣就會切換到另一個資料庫,
如果沒有切回來反而可能會抓不到原本資料庫的資料,
當然如果你習慣用 [DataBase].[dbo].[Table] 的方式,
不管你是連到哪個資料庫都可以,
像我們最近在做比較大的案子,
會有很多個資料庫,
通常都會指定 [DataBase].[dbo].[Table] 的方式,
就不用管我的連線是連到哪個資料庫了.

恩恩 iT邦新手 5 級 ‧ 2018-09-22 08:08:23 檢舉

小魚 感謝你!! 非常詳細說明,真得更懂 資料庫,呵呵~

1
純真的人
iT邦大師 1 級 ‧ 2018-09-21 10:53:55

自刪

看更多先前的回應...收起先前的回應...
恩恩 iT邦新手 5 級 ‧ 2018-09-21 11:26:13 檢舉

你好:
對應的資料庫是 MS SQL 2008版本。

測試抓資料庫的驅動程式,看起來是有成功com.microsoft.sqlserver.jdbc.SQLServerDriver

但資料來是沒跑出來? 還會有什麼狀況??

不瞭解網頁畫面
你這句Leader_Connessione sucess a mysql server是哪來的?

有原始碼嗎?

恩恩 iT邦新手 5 級 ‧ 2018-09-21 12:00:14 檢舉

你好~是我自己寫的測試

內文有喔
String MS_DB_URL = "jdbc:sqlserver://XXX.XXX.XXX.XXX:1433;DatabaseName="+pDataBase;
MS_dbConn = DriverManager.getConnection(MS_DB_URL, MS_USER, MS_pass);
if(!MS_dbConn.isClosed())
{
out.println("Connessione sucess a mysql server. . .");
}

柯柯 iT邦新手 3 級 ‧ 2018-09-21 13:43:19 檢舉

String MS_DB_URL = "jdbc:sqlserver://XXX.XXX.XXX.XXX:1433:DatabaseName="+pDataBase;

改這樣呢

恩恩 iT邦新手 5 級 ‧ 2018-09-21 13:46:21 檢舉

將分號改為冒號,資料庫連結就出錯。
https://ithelp.ithome.com.tw/upload/images/20180921/20105722O0YSHhnzyk.png

Sql Server的埠號預設是1433不用加@@

恩恩 iT邦新手 5 級 ‧ 2018-09-21 16:56:25 檢舉

純真的人 謝謝你的回應,我找到原因了,寫在問題內容下方,若你也知道這狀況,歡迎你的再次回應!!

0

或許改用preparestatment 還有增加指定useUnicode?
以下為範例:

Properties prop = new Properties();
		prop.setProperty("user", "root");
		prop.setProperty("password", "root");
		
		String sql = "SELECT * FROM data where date between ? and ?";

		Connection conn;
		conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/earthquake?useUnicode=true&characterEncoding=UTF-8",prop);
    PreparedStatement pstmt=conn.prepareStatement(sql);
    ResultSet rs = null;
				pstmt.setString(1,date);
				pstmt.setString(2,todate);				
				rs = pstmt.executeQuery();
				String rsdate=null;
			while(rs.next()) {
				quakedata data = new quakedata();
				rsdate = rs.getString("date").substring(0,19);
				data.setNumber(rs.getString("number"));
				data.setDate(rsdate);
				data.setLon(rs.getFloat("lon"));
				data.setLat(rs.getFloat("lat"));
				data.setScale(rs.getFloat("scale"));
				data.setDepth(rs.getFloat("depth"));
				data.setPosition(rs.getString("position"));
				list.add(data);
			}
			rs.close();			
			pstmt.close();
			conn.close();
恩恩 iT邦新手 5 級 ‧ 2018-09-21 16:57:09 檢舉

謝謝你的回應,我找到原因了,寫在問題內容下方,若你也知道這狀況,歡迎你的再次回應!!

我要發表回答

立即登入回答