您的位置:首页 > 数据库

关于jsp中访问Access数据库的问题

2009-08-11 10:41 309 查看
本次项目要用jsp做一个网站,考虑到布属环境所限,不敢用网络数据库,就用了access数据库,路径是个问题。

问题一描述: mdb数据库文件不知该放到工程哪个目录。

问题解释:我用Netbeans6.1 IDE开发,工程目录文件夹 build、dist、lib、nbproject、src、test、web 。起初我将mdb文件放到工程根下,和以下文件夹平级,不行。放入web文件夹上与jsp文件平级,不行。放入build文件下也不行。连库时找不到文件呀

解决:

public class JDBCon {
public Connection  conn = null;
public Statement  stmt = null;
public JDBCon(){
try{
String dd = this.getClass().getResource("/").getPath(); //得到当前类的路径并去除前面的/
String dir = dd.substring(1,dd.length()-1);
String udl = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+dir+"/SST.mdb"; //路径正确了,找到mbd了
//System.out.println("这个路径呀:"+dir);
//String udl = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+dir+"/tt.mdb";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//System.out.println("当前上下文路径1:"+System.getProperty("user.dir").toString());
//System.out.println("当前上下文路径2:"+this.getClass().getClassLoader().getResource(".").getPath());
//System.out.println("当前上下文路径3:"+this.getClass().getResource("/").getPath());
//System.out.println("当前上下文路径4:"+System.getProperty("user.dir"));
conn =DriverManager.getConnection(udl,"","") ;//空用户登录
stmt =conn.createStatement();//
ResultSet rs = stmt.executeQuery("select * from t1"); //成功
while(rs.next()){
System.out.println(rs.getString("name"));
}
stmt.executeUpdate("insert into [t1]([name]) values('中国')"); //插入记录
int i = stmt.executeUpdate("insert into Deputy(id,name) values(1,'中华人民共和国')"); //再插入
stmt.close();
System.out.println(i);//插入一条
}catch(Exception ee){
System.out.println("数据库异常:"+ee.toString());
}
}


特别说明

我以为这样可以了,但调试时出现了以上的 stmt.executeUpdate("insert into [t1]([name]) values('中国')"); //插入记录 语句执行成功,但我打开数据库不见有记录插入的情况,后来查了资料后才知道,这是对访问路径的不了解造成的。具体情况如下:

在Netbeans IDE工程中,以上代码我读取的是“build/web/WEB-INF/classes/”下的mdb,但在"构建"(生成)工程时,需要从源路径“工程根/web/WEB-INF/classes/”下读取源mdb到以上构建路径下,换句话说,ide在编译生成工程时,会从“web/WEB-INF/classes/”下将mdb拷到“build/web/WEB-INF/classes/”下,因此,其实以上代码是insert到了build/web/WEB-INF/classes/下的mdb了,而在web/WEB-INF/classes/下的mdb并未因此改变。

另外:

如果你用了resp.sendRedirect(url); ,就要吧东西存在session里,在 B 里
用session取。
如果你用了RequestDispatcher rd = request.getRequestDispatcher("url");
rd.forward(request, response); 那么你就可以存在requset里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: