我們的第一個例子是簡化的dao方式,主要是在編程中引入了oop概念。
這次,我們將dao補齊,但仍然保持最簡單的形式,以便初學者學習。
簡單的dao模式構成:
1 interface
2. factory
3 implements
4. caller
第一個例子中的主程序newsdao.java代碼沒有改動,只是改了個名字,
成為implements.
package news;
import java.sql.*;
public class newsdaomysql implements newsdao
{
connection conn = null;
statement stmt = null;
resultset rs = null;
string url="jdbc:mysql://localhost:3306/joke?user=root";
public newsdaomysql()
{
try {
class.forname ("com.mysql.jdbc.driver");
}
catch (java.lang.classnotfoundexception e) {
system.err.println("joke():"+e.getmessage());
}
}
public news getnewsbyprimarykey(int newsid) throws sqlexception
{
connection conn=null;
statement stmt;
resultset rs;
news news = null;
string sql="select newsid,title,content from news2"+
" where newsid="+newsid+"";
conn = getconnection();
stmt = conn.createstatement();
rs=stmt.executequery(sql);
if(rs.next())
{
news = new news(rs.getint(1), rs.getstring(2),rs.getstring(3));
}
rs.close();
stmt.close();
conn.close();
return news;
}
private connection getconnection() throws sqlexception
{
connection conn = null;
conn = drivermanager.getconnection(url);
return conn;
}
}
除了第一句由
public class newsdao 變成了
public class newsdaomysql implements newsdao
構造方法名稱由newsdao()變成newsdaomysql(),這個程序與第一個例子并沒有區別。
第二個程序是interface,非常簡單,因為我們只實現了一個方法,所以這兒也只有一個方法的申明,大家可以很容易地自己補上。
package news;
import java.sql.sqlexception;
public interface newsdao {
public news getnewsbyprimarykey(int newsid) throws sqlexception;
}
第三個程序是factory.
我們的環境比較簡單,沒有使用jndi,
package news;
public class newsdaofactory {
public static newsdao getdao() throws exception {
newsdao newsdao = null;
string classname = "news.newsdaomysql";
try {
newsdao = (newsdao) class.forname(classname).newinstance();
}
catch (exception se) {
}
return newsdao;
}
}
第四,調用的jsp程序:
<%@page contenttype="text/html;charset=gb2312" %>
<%@page import="news.*" %>
<%
// old version on 2004-12-07
// newsdao newsdao = new newsdao();
// new version on 2004-12-21
newsdao newsdao = newsdaofactory.getdao();
news news = newsdao.getnewsbyprimarykey(1);
if(news != null) {
out.println("title thru dao:"+news.gettitle());
out.println("<br>");
out.println("body:"+news.getcontent());
}
else out.println("failed.");
%>
第五,本例所使用的pojo:news.java,沒有任何改動,故不在此重復。
內網觀測點:同第一例子。
更完整的例子,大家可以參考petstore 的catalogdao.
新聞熱點
疑難解答