2013年3月22日 星期五
Java 連接MySQL (四) ResultSet游標控制
參自: 語言技術: Java Gossip (二) <<<超連結
使用無參數的createStatement(),prepareStatement()其執行SQL後所得之ResultSet物件,只能透過next()方法逐筆查詢(沒參數預設就是第一個)。
現在我們指定resultSetType,參數有ResultSet.TYPE_FORWARD_ONLY,
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE。
SENSITIVE與否差異在於能否取得ResultSet改變值後的資料。
另外必須指定resultSetConcurrency,參數有ResultSet.CONCUR_READ_ONLY與ResultSet.CONCUR_UPDATABLE。
不給參數情況,預設為 ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE。
範例
Statement st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=st.executeQuery(SELETE * FROM FriendList);
rs.afterLast(); //最後一筆的下一筆
while(rs.previous()){
System.out.print(rs.getString("name")+"\t");
System.out.print(rs.getString("age")+"\t");
System.out.println(rs.getString("email")+"\t");
}
st.close();
con.close();
其他用法
rs.absolute(5); //移動到第五筆資料
rs.absolute(10); // ...............十............
rs.absolute(-5); //倒數第五筆
rs.relative(5); //若原是第25筆資料,則表示第30筆
rs.relative(-5); //若原是第25筆資料,則表示第20筆
rs.beforeFirst(); //移動到第一筆資料之前
rs.first(); //移動到第一筆資料
rs.last(); //移動到最後一筆資料
使用無參數的createStatement(),prepareStatement()其執行SQL後所得之ResultSet物件,只能透過next()方法逐筆查詢(沒參數預設就是第一個)。
現在我們指定resultSetType,參數有ResultSet.TYPE_FORWARD_ONLY,
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE。
SENSITIVE與否差異在於能否取得ResultSet改變值後的資料。
另外必須指定resultSetConcurrency,參數有ResultSet.CONCUR_READ_ONLY與ResultSet.CONCUR_UPDATABLE。
不給參數情況,預設為 ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE。
範例
Statement st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=st.executeQuery(SELETE * FROM FriendList);
rs.afterLast(); //最後一筆的下一筆
while(rs.previous()){
System.out.print(rs.getString("name")+"\t");
System.out.print(rs.getString("age")+"\t");
System.out.println(rs.getString("email")+"\t");
}
st.close();
con.close();
其他用法
rs.absolute(5); //移動到第五筆資料
rs.absolute(10); // ...............十............
rs.absolute(-5); //倒數第五筆
rs.relative(5); //若原是第25筆資料,則表示第30筆
rs.relative(-5); //若原是第25筆資料,則表示第20筆
rs.beforeFirst(); //移動到第一筆資料之前
rs.first(); //移動到第一筆資料
rs.last(); //移動到最後一筆資料
Java 連接MySQL (三) 存入檔案類型的資料
參自: 語言技術: Java Gossip (二) <<<超連結
在欄位上使用BLOB或CLOB資料型態。
BLOB: Binary Large Object,大量的二進位資料。(JDBC提供Blob類別)
CLOB: Character Large Object,大量的文字資料。(JDBC提供Clob類別)
可以使用的PreparedStatement方法,包括setBinaryStream(),setObject(),setAsciiStream,setUnicodeStream()等。
File file=new File("c:/xsd.jpg");
int length=(int)file.length();
FileInputStream fis=new FileInputStream(file);
PreparedStatement ps=con.prepareStatement("INSERT INTO MovieList VALUES(?,?,?)");
ps.setString(1,"下水道");
ps.setString(2,"2010/10/10");
ps.setBinaryStream(3,fis,length);
ps.executeUpdate();
ps.clearParameters();
ps.close();
fis.close();
取得檔案
Statement st=con.createStatement();
ResultSet resultSet=st.executeQuery("SELECT * FROM MovieList");
resultSet.next();
Blob blob=resultSet.getBlob(3); 搭配blob.getBinaryString(), blob.getBytes()使用
Clob clob=resultSet.getClob(3); 搭配clob.getCharacterStream(), clob.getSubString()使用
寫入檔案
FileOutputStream fos=new FileOutputStream("c:/xsd1.jpg");
fos.write(blob.getBytes(1,(int)blob.length());
fos.flush();
fos.close();
For Oracle
Oracle 9i之前,要先建立Blob/Clob的空欄位以取得Blob/Clob游標。
(i)
PreparedStatement ps=con.prepareStatement("INSERT INTO MovieList(id,des,pic) VALUES(?, EMPTY_CLOB(), EMPTY_BLOB())");
ps.setInt(1,1);
ps.executeUpdate();
(ii)
PreparedStatement ps=con.prepareStatement("INSERT INTO MovieList(id,des,pic) VALUES(?, ?, ?)");
ps.setInt(1,1);
ps.setClob(2,CLOB.empty_lob());
ps.setBlob(3,BLOB.empty_lob());
ps.executeUpdate();
小範例
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:demo";
String user="ted";
String password="12345";
Class.forName(driver);
Connection con=null;
PreparedStatement ps=null;
con=DriverManager.getConnection(url,user,password);
con.setAutoCommit(false);
//存入Blob/Clob空欄位
ps=con.prepareStatement("INSERT INTO MovieList(id,des,pic) VALUES(?, EMPTY_CLOB(), EMPTY_BLOB())");
ps.setInt(1,1);
ps.executeUpdate();
ps.close();
//查詢Blob/Clob欄位以取得游標
ps=con.prepareStatement("SELECT des,pic FROM MovieList WHERE id=? for update");
ps.setInt(1,1);
ResultSet rs=ps.executeQuery();
rs.next();
Clob clob=(Clob)rs.getClob(1);
Blob blob=(Blob)rs.getBlob(2);
clob.putString(1,"...ABC...");
File file=new File("c:/xsd.jpg");
FileInputStream fis=new FileInputStream(file);
OutputStream os=blob.getBinaryOutputStream();
Byte[] buffer=new Byte[1024];
while(fis.read(buffer) > 0)
os.write(buffer);
fis.close();
os.close();
ps=con.prepareStatement("UPDATE MovieList SET des=?,pic=? WHERE id=?");
ps.setClob(1,clob);
ps.setBlob(2,blob);
ps.setInt(3,1);
ps.executeUpdate();
ps.close();
con.commit();
在欄位上使用BLOB或CLOB資料型態。
BLOB: Binary Large Object,大量的二進位資料。(JDBC提供Blob類別)
CLOB: Character Large Object,大量的文字資料。(JDBC提供Clob類別)
可以使用的PreparedStatement方法,包括setBinaryStream(),setObject(),setAsciiStream,setUnicodeStream()等。
File file=new File("c:/xsd.jpg");
int length=(int)file.length();
FileInputStream fis=new FileInputStream(file);
PreparedStatement ps=con.prepareStatement("INSERT INTO MovieList VALUES(?,?,?)");
ps.setString(1,"下水道");
ps.setString(2,"2010/10/10");
ps.setBinaryStream(3,fis,length);
ps.executeUpdate();
ps.clearParameters();
ps.close();
fis.close();
取得檔案
Statement st=con.createStatement();
ResultSet resultSet=st.executeQuery("SELECT * FROM MovieList");
resultSet.next();
Blob blob=resultSet.getBlob(3); 搭配blob.getBinaryString(), blob.getBytes()使用
Clob clob=resultSet.getClob(3); 搭配clob.getCharacterStream(), clob.getSubString()使用
寫入檔案
FileOutputStream fos=new FileOutputStream("c:/xsd1.jpg");
fos.write(blob.getBytes(1,(int)blob.length());
fos.flush();
fos.close();
For Oracle
Oracle 9i之前,要先建立Blob/Clob的空欄位以取得Blob/Clob游標。
(i)
PreparedStatement ps=con.prepareStatement("INSERT INTO MovieList(id,des,pic) VALUES(?, EMPTY_CLOB(), EMPTY_BLOB())");
ps.setInt(1,1);
ps.executeUpdate();
(ii)
PreparedStatement ps=con.prepareStatement("INSERT INTO MovieList(id,des,pic) VALUES(?, ?, ?)");
ps.setInt(1,1);
ps.setClob(2,CLOB.empty_lob());
ps.setBlob(3,BLOB.empty_lob());
ps.executeUpdate();
小範例
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:demo";
String user="ted";
String password="12345";
Class.forName(driver);
Connection con=null;
PreparedStatement ps=null;
con=DriverManager.getConnection(url,user,password);
con.setAutoCommit(false);
//存入Blob/Clob空欄位
ps=con.prepareStatement("INSERT INTO MovieList(id,des,pic) VALUES(?, EMPTY_CLOB(), EMPTY_BLOB())");
ps.setInt(1,1);
ps.executeUpdate();
ps.close();
//查詢Blob/Clob欄位以取得游標
ps=con.prepareStatement("SELECT des,pic FROM MovieList WHERE id=? for update");
ps.setInt(1,1);
ResultSet rs=ps.executeQuery();
rs.next();
Clob clob=(Clob)rs.getClob(1);
Blob blob=(Blob)rs.getBlob(2);
clob.putString(1,"...ABC...");
File file=new File("c:/xsd.jpg");
FileInputStream fis=new FileInputStream(file);
OutputStream os=blob.getBinaryOutputStream();
Byte[] buffer=new Byte[1024];
while(fis.read(buffer) > 0)
os.write(buffer);
fis.close();
os.close();
ps=con.prepareStatement("UPDATE MovieList SET des=?,pic=? WHERE id=?");
ps.setClob(1,clob);
ps.setBlob(2,blob);
ps.setInt(3,1);
ps.executeUpdate();
ps.close();
con.commit();
2013年3月21日 星期四
JavaScript 事件處理
onFocus: 用戶為了輸入而選擇(點擊)select、text、textArea等位置時。
onBlur: 於select、text、password、textArea失去焦點時。
onChange: 在select、text、textArea的值被改變且失去焦點時。
onClick: 當一個對象被點擊時。
onLoad: 完成載入時,通常寫在body內。
onUnload: 退出時,通常寫在body內。
onMouseOver: 滑鼠覆蓋到對象時。
onMouseOut: 滑鼠從對象上移開時。
onSelect: 當form對象中的內容被選中時。
onSubmit: 透過提交按鈕提交一個表單時。
<form name="xxx" action="xxx.html" onSubmit="JavaScript:return true;"></form>
return false則不動作。
onBlur: 於select、text、password、textArea失去焦點時。
onChange: 在select、text、textArea的值被改變且失去焦點時。
onClick: 當一個對象被點擊時。
onLoad: 完成載入時,通常寫在body內。
onUnload: 退出時,通常寫在body內。
onMouseOver: 滑鼠覆蓋到對象時。
onMouseOut: 滑鼠從對象上移開時。
onSelect: 當form對象中的內容被選中時。
onSubmit: 透過提交按鈕提交一個表單時。
<form name="xxx" action="xxx.html" onSubmit="JavaScript:return true;"></form>
return false則不動作。
JavaScript的3種框兒
alert : 警告框,沒有回傳值。
prompt : 輸入(詢問)框,回傳輸入的內容,但並不常用。
confirm : 確認框,傳回boolean值,按下確定傳回true,取消傳回false。
<script language="JavaScript">
alert("ok");
</script>
<script language="JavaScript">
var name;
name=prompt("請輸入你的名字");
document.write("hello"+name);
</script>
<script language="JavaScript">
if(confirm("確定要刪除?")){
document.xxx.submit();
}
</script>
prompt : 輸入(詢問)框,回傳輸入的內容,但並不常用。
confirm : 確認框,傳回boolean值,按下確定傳回true,取消傳回false。
<script language="JavaScript">
alert("ok");
</script>
<script language="JavaScript">
var name;
name=prompt("請輸入你的名字");
document.write("hello"+name);
</script>
<script language="JavaScript">
if(confirm("確定要刪除?")){
document.xxx.submit();
}
</script>
訂閱:
文章 (Atom)