已有101人关注
第七章 物流信息网 问题
发表在Java图书答疑 2009-08-14
是否精华
版块置顶:
package com.wy;

import java.sql.*;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.*;

public class JDBConnection {

private static DataSource ds=null;//设置DataSource类的对象
private static Connection conn =null; //设置Connection类的对象
private static Statement st = null; //设置Statement类的对象
private ResultSet rs=null; //设置ResultSet类的对象
static {
try {
Context ctx = new InitialContext();
ctx = (Context) ctx.lookup("java:comp/env");
ds = (DataSource) ctx.lookup("TestJNDI"); //取得连接池数据源
conn = ds.getConnection(); //取得数据库的连接
} catch (Exception e) {
e.printStackTrace();
}
}
public ResultSet executeQuery(String sql) {
try {
st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = st.executeQuery(sql);  //执行对数据库的查询操作
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Query Exception");//在控制台中输入异常信息
}
return rs;                               //将查询的结果通过return关键字返回
}
public boolean executeUpdata(String sql) {
try {
st = conn.createStatement(); //创建声明对象连接
st.executeUpdate(sql);                 //执行添加、修改、删除操作
return true;                             //如果执行成功则返回true
} catch (Exception e) {
e.printStackTrace();
    return false;                                      //如果执行成功则返回false
}
}
[font color=#FF0000]代码中用 static 进行了静态变量初始化,根据static 的相关定义,我理解static{}中的静态变量只会初始化一次,那么为什么还要搞个数据库连接池呢,既然只初始化一次就只会取一个连接,所有的实例都可以共用这个连接,一个连接是不是就可以了??!! 
[/font]


}
分享到:
精彩评论 5
东北虎
学分:0 LV1
2009-08-14
沙发
类JDBConnection是获得数据库连接和实现对数据表操作的类。当其他类需要连接数据库并对数据表进行操作时,会自动从通过连接池获得一个空闲的连接,因此需要使用连接池。

而静态块static{}是在使用JDBConnection类时,先执行静态块完成必要的初始化,即从连接池获得空闲的数据库连接。
29882942
学分:0 LV1
2009-08-14
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
类JDBConnection是获得数据库连接和实现对数据表操作的类。当其他类需要连接数据库并对数据表进行操作时,会自动从通过连接池获得一个空闲的连接,因此需要使用连接池。

而静态块static{}是在使用JDBConnection类时,先执行静态块完成必要的初始化,即从连接池获得空闲的数据库连接。
[/FIELDSET]

回复:
  

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。
能不能理解为static{}中代码中执行一次,那就相当于只取了一个数据库连接????
东北虎
学分:0 LV1
2009-08-15
地板
你说的很对。
这里所以使用连接池,是因为很有可能其他的项目也使用相同的连接,这样就可以直接从连接池获得空闲的连接了。
学分: LV1
2009-08-21
4L
你好,请问一下,你问你的问题解决了吗,
我现在有个问题
就是这个注册处理页面
An error occurred at line: 25 in the jsp file: /regist_config.jsp
The method str() is undefined for the type ResultSet
22: CountTime time=new CountTime();
23: String str="select name from db_Customer where Name='"+name+"'";
24: ResultSet rs=connection.executeQuery(str);
25: if(rs.str()){
26: %>
27: <script language="javascript">
28: alert("此用户已经被占用请重新注册");
希望那位知道的能帮助一下,感激不尽!谢谢
无语_mrkj
学分:3155 LV11
2009-08-22
5L
[FIELDSET][LEGEND]引自:4楼[/LEGEND]
你好,请问一下,你问你的问题解决了吗,
我现在有个问题
就是这个注册处理页面
An error occurred at line: 25 in the jsp file: /regist_config.jsp
The method str() is undefined for the type ResultSet
22: CountTime time=new CountTime();
23: String str="select name from db_Customer where Name='"+name+"'";
24: ResultSet rs=connection.executeQuery(str);
25: if(rs.str()){
26: %>
27: <script language="javascript">
28: alert("此用户已经被占用请重新注册");
希望那位知道的能帮助一下,感激不尽!谢谢
[/FIELDSET]

回复:
25: if(rs.str()){
应该是:
if(rs.next()){
这里使用的是next()方法,而不是str()方法,ResultSet对象没有str()方法。
另外,光盘中提供的这个页面,存在一个错误,就是数据表名写错了,请将这个页面的SQL语句中的代码db_customer修改为tb_customer
说明:这个页面中共两处需要修改。
  
首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照