Derby配置使用
我们今天的目标,Servlet能查询到数据库中的数据。如下图所示:(注意:100是学号,zhangsan是姓名,这两个数据都是从数据库查询出来,而显示在页面上;不是你直接用out.println写在页面上的。)
1、首先看你机器的Java安装目录里面,有没有Derby(它是一个小型关系型数据库,可以使用SQL操作它),如果没有,就要下载(JDK安装之后,Derby默认应该是有的,jdk目录下的db目录就是Derby目录)
2、进入db目录中的bin目录,进一步确认是否有相关命令执行文件(我们以后要直接调用的是ij.bat)
3、故意跳转到D盘,输入ij,看看系统是否“认识”这个命令,如果“不认识”,需要配置系统环境变量,把bin目录的路径配置进去,系统就“认识”这个目录中的所有命令了。我下面这个截图,没有配置路径,系统不知道ij是什么,所以,我要到第4步去配置。
4、到Win—高级系统设置—环境变量----path中去配置路径,配置完毕后,重启CMD窗口,让配置生效。
5、输入ij,用SQL创建数据库、创建表、插入记录、查看记录,找找操作数据库的感觉,确保能用。退出Derby。
6、这时在第5步运行ij的目录下,应该能dir看到新出现的数据库文件夹,这就是你刚才创建的数据库文件。
7、先别看下面的截图。自问:(1)退出来了,想再连接到创建好的数据库Stu,应该如何操作呢。(2)在D盘目录下能不能连接到数据库Stu?
至此,Derby基本会用了。
上面是纯手工操作Derby
下一个问题:JavaWeb如何操作Derby
8、我们需要知道的基础:Java是通过JDBC来操作数据库的
什么是JDBC?JDBC是Java DataBase Connectivity(Java数据库连接)的缩写,它是Java程序访问数据库的标准接口。JDBC是Java标准库自带的,我们直接拿过用,不需要我们编写。
过程:使用Java程序访问数据库时,通过JDBC来访问,JDBC通过数据库驱动来实现真正对数据库的访问。
例如,我们在Java代码中要访问Derby,通过JDBC,JDBC与Derby数据库驱动进行通讯,数据库驱动程序由数据库厂家提供。因此,访问某个具体的数据库,我们只需要引入该厂商提供的驱动,就可以通过JDBC接口来访问,这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库。
一个JDBC的驱动就是一个jar包。具体到Derby,就是db–lib目录下Derby.jar
使用JDBC的好处是:
各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
Java程序编译期仅依赖java.sql包,不依赖具体数据库的jar包;
可随时替换底层数据库,访问数据库的Java代码基本不变。
9、可以验证一下,Java的JDBC相关程序在C:\Program Files\Java\jre\lib\rt.jar这个包中存着。你也可以在Eclipse中打开rt.jar,就能看到java.sql这个包,这个包里有很多相关JDBC的工具类。也就是说,只要你的机器上JDK正常安装,JDBC就有了,不需要你再额外下载安装。
10、对上面学习的总结:根据第8步讲的,JavaWeb操纵Derby,只有JDBC(java.sql)还不够,还需要一个Derby提供的驱动jar包。我们要找到相关jar包把它配置到我们的JavaWeb项目中去。这样在该项目中,Java的JDBC就与Derby的驱动连接在一起了。我们的代码操作数据库的通道顺畅了。
11、Eclipse—项目上点右键----Build Path----Configure Build Path…----Libraries-----Add External JARS…
这个jdk–db–lib中的Derby.jar就是数据库驱动jar包
12、第11步做完,到项目文件夹去观察,Libraries中应该把驱动jar包导入进来了。
13、刚才,只是针对源程序的编译。Web程序要运行的话,要把需要的驱动jar包同步到WEB-INF的lib目录下,这一步就是进行部署同步。经过这一步,你的Web程序才能访问数据库。
Web Deployment Assembly是Web发布路径设置,DeployPath表示每个资源发布之后的文件路径
14、上面全部配置搞定,可以写一个Servlet,体会数据的畅通了。我们日常的Web程序开发,数据流大致都是这种原理。你平时在手机App看到的数据,都是这样来的。
注意:
数据库路径是在cmd中创建的数据库路径,在自己电脑中的路径每个人的都不同,如果不知道保存在哪里建议自己去C盘或者D盘找一下
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String dbName = "D:\\Stu";//数据库所在路径
Connection conn = null;//连接数据库对象,初始为空
Statement stm = null;//执行sql语句对象,初始为空
ResultSet rs = null;//查询数据库结果对象,初始为空
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");//加载数据库驱动
conn = DriverManager.getConnection("jdbc:derby:"+dbName+";create=true");//创建数据库连接
stm = conn.createStatement();//创建statement对象然后通过对象调用executeQuery方法
rs = stm.executeQuery("select * from student");//执行sql语句,把查询结构保存在rs对象中
while(rs.next()) {//调用rs相关方法,把查询的结果遍历出来,进行后续操作
out.println(rs.getInt(1));//数据输出到网页
out.println(rs.getString(2));
}
rs.close();//各种关闭
stm.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.close();
}