哪位高人能不能详细谈一下jsp里操作数据库的问题? 包括数据库的封装,数据操作。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先连接,用jdbc很方便的,然后写个程序就ok了,这样的程序在论坛里一堆一堆的。 Jsp 操作数据库 就是通过JDBC来操作的一般分为如下几个步骤:1.加载注册驱动 Class.forName("driver name"); // 里面写上具体的数据库的驱动名2.获得连接 Connection con = DriverManager.getConnection(url,user,password); //数据库地址,用户,密码3.获得Statement对象 Statement stmt = con.createStatement(); // 也可以使用 PreperedStatement 这个类4.执行sql语句得到结果集Result rs = stmt.executeQuery("select * from tablename"); 5.对结果集进行操作while(rs.next()) { rs.getString(1) ; }大致步骤如上具体细节参考api 一个基本的观点数据库的操作不应该在JSP页面上直接操作,而是应该把它封装到类里,最起码的是得通过调用类的方法来进行操作。这样才能有效的处理异常,并且保证有足够的安全性 keephope()我想了解的就是你说的这些,怎么进行数据封装和操作,能不能详细谈一下。如果是上面几位说的东西,就没必要给100分了。 kevinliuu(@。@) 昨天四点钟睡觉 数据库的操作操作一般的封装在DAO(数据访问对象)里面,实际上也就是一些JavaBean比如你有一个User 用户表,你肯定要对User作一些增删改查(CRUD)的工作所以你可以定义public void createUser(UserVO user) ;public UserVO getUser(long id);public void updateUser(UserVO user)public void delUser(long id)当然这几个操作只是最基本的 你还可以根据你的业务需求 增加一些方法,比如: 按某个字段获得一个User 集合的方法 等等你可以看看有关DAO的资料 讲的比我详细多了 //用于连接数据库package a;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBConnection { public DBConnection() { } public static Connection getCon(){ Connection con=null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//这个我用的jdbc-odbc桥 } catch (ClassNotFoundException ex) { System.out.println("驱动加载失败!"); } try { con = DriverManager.getConnection("jdbc:odbc:test"); } catch (SQLException ex1) { System.out.println("数据库连接失败!"); } return con; }}//这个是javaBeanpackage a;public class aa { public aa() { } private String a1=null; private String a2=null; public void seta1(String a1){ this.a1=a1; } public void seta2(String a2){ this.a2=a2; } public String geta1(){ return a1; } public String geta2(){ return a2; }}//DAOpackage a;import java.sql.*;import a.aa;import a.DBConnection;import java.util.ArrayList;public class aaDAO { public aaDAO(){ } private Connection con=null; private Statement st=null; private ResultSet rs=null; DBConnection cm=new DBConnection(); public ArrayList show1(){ ArrayList list1=new ArrayList(); con=cm.getCon(); try { st = con.createStatement(); rs=st.executeQuery("select * from 表名"); while(rs.next()){ aa t=new aa(); t.seta1(rs.getString(1)); t.seta2(rs.getString(2)); list1.add(t); } } catch (SQLException ex) { ex.printStackTrace(); }finally{ try { rs.close();//关闭连接 st.close(); con.close(); } catch (SQLException ex1) { ex1.printStackTrace(); } } return list1; }}//在jsp页面中显示数据库中的信息<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.util.ArrayList,a.aa,a.aaDAO"%><%!aaDAO aD=new aaDAO();aa d=new aa();ArrayList list1=aD.show1();%><%for(int i=0;i<list1.size();i++){t=(aa)list1.get(i);%>a1的值为:<%=list1.geta1()%>a2的值为:<%=list1.geta2%><%}%> Jsp 操作数据库 就是通过JDBC来操作的一般分为如下几个步骤:1.加载注册驱动 Class.forName("driver name"); // 里面写上具体的数据库的驱动名2.获得连接 Connection con = DriverManager.getConnection(url,user,password); //数据库地址,用户,密码3.获得Statement对象 Statement stmt = con.createStatement(); // 也可以使用 PreperedStatement 这个类4.执行sql语句得到结果集Result rs = stmt.executeQuery("select * from tablename"); 5.对结果集进行操作while(rs.next()) { rs.getString(1) ; }大致步骤如上具体细节参考api 通过一个中间的dao层来封装数据库联接,具体上面说的很清楚了 wode421898419()的方法看了,但不明白这样作的目的比如我有一个页面,里面有N个数据库的读写操作,按照我以前的写法,只需要打开,关闭一次数据库链接,在打开,关闭数据库链接之间,我可以操作很多次数据库,每次读取后,只要rs.close()就可以了。因为打开,关闭数据库是很耗资源的,这样可以节省很多页面的执行时间。但如果按照上面的做法,则读取一次数据库,数据库链接就要打开,关闭一次,一但页面的数据库操作多了,那耗费的CPU资源就太大了, 人家问数据库如何操作,你说什么dao层根本就没用, 我问的就是使用dao层后的效率问题如果一个页面要若干个数据库操作,每个操作都调用一次dao,则数据库就要打开关闭若干次,这是不是很影响效率? 如果一个页面要若干个数据库操作,每个操作都调用一次dao,则数据库就要打开关闭若干次,这是不是很影响效率?这个不用担心,成熟的dao框架都会用连接池进行Connection 的管理。就是说Connection 是不关闭的,重复使用的。建议你学习一下 Speedframework,源代码比较少,一两天就可以大概了解了。hibernate比较复杂。 ftiger(哈哈鱼):Speedframework是什么?哪里有? google,一个简单的ObjectMapping框架 引用一个基本的观点数据库的操作不应该在JSP页面上直接操作,而是应该把它封装到类里,最起码的是得通过调用类的方法来进行操作。这样才能有效的处理异常,并且保证有足够的安全性 ftiger(哈哈鱼):你说的连接池不关闭是什么意思? UPftiger(哈哈鱼):你说的连接池不关闭是什么意思? 用连接池(ConnPool)管理 Connection ,有很多现成的做法。就是不关闭 Connection,或每几个小时关闭一次。使用时从ConnPool .getConn()得到Connection.完成后用ConnPool.freeConn(conn);放回到连接池中。这样基本上就没有打开和关闭Connection 的开销了。 ftiger(哈哈鱼) :谢谢你!我以前看到过有延时关闭Connection的说法,但那本书上没有具体说怎么做能不能给段代码详细解说下? 求助 验证Sql中是否存在注释 禁用超链接 字符格式转换 addCookie时中文出错 在sturts里面怎么文件上传啊,我是新手,请那位大哥给个例子或者指教哦! Tomcat下Oracle驱动加载失败问题 各位大虾菜鸟,有谁会hibernate帮我进来看看这个异常,可能在那里出了错,谢谢各位 这个是字符编码的问题吗? 求助 用myeclipse生成webservice的实体类出错。。。。。。。。。。。 请教高手 大家喜欢用EL吗?
1.加载注册驱动 Class.forName("driver name"); // 里面写上具体的数据库的驱动名
2.获得连接 Connection con = DriverManager.getConnection(url,user,password); //数据库地址,用户,密码3.获得Statement对象
Statement stmt = con.createStatement(); // 也可以使用 PreperedStatement 这个类4.执行sql语句得到结果集Result rs = stmt.executeQuery("select * from tablename"); 5.对结果集进行操作while(rs.next()) {
rs.getString(1) ;
}
大致步骤如上具体细节参考api
我想了解的就是你说的这些,怎么进行数据封装和操作,能不能详细谈一下。如果是上面几位说的东西,就没必要给100分了。
你还可以根据你的业务需求 增加一些方法,比如: 按某个字段获得一个User 集合的方法 等等你可以看看有关DAO的资料 讲的比我详细多了
package a;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBConnection {
public DBConnection() {
}
public static Connection getCon(){
Connection con=null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//这个我用的jdbc-odbc桥
} catch (ClassNotFoundException ex) {
System.out.println("驱动加载失败!");
}
try {
con = DriverManager.getConnection("jdbc:odbc:test");
} catch (SQLException ex1) {
System.out.println("数据库连接失败!");
}
return con;
}
}//这个是javaBean
package a;public class aa {
public aa() {
}
private String a1=null;
private String a2=null;
public void seta1(String a1){
this.a1=a1;
}
public void seta2(String a2){
this.a2=a2;
}
public String geta1(){
return a1;
}
public String geta2(){
return a2;
}
}//DAO
package a;
import java.sql.*;
import a.aa;
import a.DBConnection;
import java.util.ArrayList;public class aaDAO {
public aaDAO(){
}
private Connection con=null;
private Statement st=null;
private ResultSet rs=null;
DBConnection cm=new DBConnection(); public ArrayList show1(){
ArrayList list1=new ArrayList();
con=cm.getCon();
try {
st = con.createStatement();
rs=st.executeQuery("select * from 表名");
while(rs.next()){
aa t=new aa();
t.seta1(rs.getString(1));
t.seta2(rs.getString(2));
list1.add(t);
}
} catch (SQLException ex) {
ex.printStackTrace();
}finally{
try {
rs.close();//关闭连接
st.close();
con.close();
} catch (SQLException ex1) {
ex1.printStackTrace();
}
}
return list1;
}
}//在jsp页面中显示数据库中的信息
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.ArrayList,a.aa,a.aaDAO"%>
<%!
aaDAO aD=new aaDAO();
aa d=new aa();
ArrayList list1=aD.show1();
%>
<%
for(int i=0;i<list1.size();i++){
t=(aa)list1.get(i);
%>
a1的值为:<%=list1.geta1()%>
a2的值为:<%=list1.geta2%>
<%}%>
1.加载注册驱动 Class.forName("driver name"); // 里面写上具体的数据库的驱动名
2.获得连接 Connection con = DriverManager.getConnection(url,user,password); //数据库地址,用户,密码3.获得Statement对象
Statement stmt = con.createStatement(); // 也可以使用 PreperedStatement 这个类4.执行sql语句得到结果集Result rs = stmt.executeQuery("select * from tablename"); 5.对结果集进行操作while(rs.next()) {
rs.getString(1) ;
}
大致步骤如上具体细节参考api
但如果按照上面的做法,则读取一次数据库,数据库链接就要打开,关闭一次,一但页面的数据库操作多了,那耗费的CPU资源就太大了,
Speedframework是什么?哪里有?
引用
一个基本的观点数据库的操作不应该在JSP页面上直接操作,而是应该把它封装到类里,最起码的是得通过调用类的方法来进行操作。这样才能有效的处理异常,并且保证有足够的安全性
你说的连接池不关闭是什么意思?
ftiger(哈哈鱼):
你说的连接池不关闭是什么意思?
就是不关闭 Connection,或每几个小时关闭一次。
使用时从ConnPool .getConn()得到Connection.
完成后用ConnPool.freeConn(conn);放回到连接池中。这样基本上就没有打开和关闭Connection 的开销了。
谢谢你!
我以前看到过有延时关闭Connection的说法,但那本书上没有具体说怎么做能不能给段代码详细解说下?