我做的一个网站的子系统,其中有登陆功能和发布一个活动(类似于淘宝的发布商品,就是提交一堆表单然后存入数据库),在没有完成发布活动的功能时,登陆功能一切正常,但是完成发布活动功能后,我在登陆的时候进行发布活动,发布活动时会提示NullPointException,报错提示的是在数据库操作,执行sql语句后出现的错误。然后有一个亮点,我停留在发布活动的页面,直接重启服务器,这时清空了前面操作的数据,然后我发布活动,提示成功,而且数据库也成功插入了,但是这时候我到登陆页面进行登陆,又会出现NullPointException,指向的地方又是数据库操作之后,而且两个sql语句我都打印出来试过,是正确的。下面是数据库操作的代码:
package db;import java.sql.*;public class DbConnection {
private String driver = "com.mysql.jdbc.Driver";
private String user = "root";
private String pw = "123";
private String db = "yuding";
private String url = "jdbc:mysql://localhost/" + db; public Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pw);
} catch (Exception e) {
System.out.print("Connection error:" + e);
}
return conn;
} public void closeConnection(Connection con) {
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}package db;
import java.sql.*;import factory.connFactory;
public class DbExecute {
DbConnection dbcon = connFactory.getInstance().createCon() ;

public boolean go(String sql){
boolean bool = false ;
Connection conn = dbcon.getConnection() ;
try{
Statement st = conn.createStatement() ;
st.executeUpdate(sql) ;
st.close();
bool = true ;
}catch(SQLException e){
e.printStackTrace() ;
}
dbcon.closeConnection(conn) ;
return bool ;
}
}package db;import java.sql.*;import factory.connFactory;public class DbQuery {
private String sql = null;
DbConnection dbcon = connFactory.getInstance().createCon(); public DbQuery(String sql) {
this.sql = sql;
} // 返回value的值
public String getValue(String value) {
String result = null;
Connection conn = dbcon.getConnection();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
result = rs.getString(value);
}
rs.close();
st.close(); } catch (SQLException e) {
System.out.print("error" + e);
}
dbcon.closeConnection(conn);
return result;
} // 获得查询结果第i行value的值
public String getValue(int i, String value) {
String result = null;
Connection conn = dbcon.getConnection();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
if (rs.relative(i)) {
result = rs.getString(value);
}
rs.beforeFirst();
rs.close();
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
dbcon.closeConnection(conn);
return result;
}

//统计所有行的总数(不支持access数据库)
public int getTotalRow(){
int result = 0 ;
Connection conn = dbcon.getConnection();
try{
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql) ;
rs.last() ;
result = rs.getRow() ;//这步不支持access数据库
rs.close() ;
st.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
dbcon.closeConnection(conn) ;
return result ;

}
}
登陆调用的是DbQuery的getValue方法,发布活动调用的是DbExecute的go方法。还有我用的是struts2框架。急求,这个无法解决我的项目搞不下去啊!!

解决方案 »

  1.   

    // 返回value的值
    public String getValue(String value) {
    String result = null;
    Connection conn = dbcon.getConnection();
    try {
    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuery(sql);
    while (rs.next()) {
    result = rs.getString(value);//这句话是不是有问题啊,你传入的value到底是个什么东西
    }
    rs.close();
    st.close();} catch (SQLException e) {
    System.out.print("error" + e);
    }
    dbcon.closeConnection(conn);
    return result;
    }