连接数据库时空指针异常

weikaiwei 2011-10-31 08:02:33
我是学生,老师今天将JAVA与MYSQL得连接.测试时总是出现空指针异常.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Ff {
private Connection conn;
private Statement stmt;
private InitDB db;


public List<Student> dgcz() {
conn = db.getConn();
stmt = db.getStmt();
ResultSet rs = db.getRs("select * from student");
List<Student> list = new ArrayList<Student>();
Student s = new Student();
try {
while (rs.next()) {
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setSex(rs.getString("sex"));
s.setBirthday(rs.getDate("birthday"));
s.setPhone(rs.getString("phone"));
s.setQQ(rs.getString("QQ"));
list.add(s);

}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}

public void scff(int id) {
Ff f = new Ff();
if (f.ddcz(id) != null) {
String delete = "delete from student where id=" + id;
try {
stmt.executeUpdate(delete);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

public Student ddcz(int id) {
Student s = null;
String sql = "select * from student where id=" + id;


try {
ResultSet rs;
rs = stmt.executeQuery(sql);
if (rs.next()) {
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setSex(rs.getString("sex"));
s.setBirthday(rs.getDate("birthday"));
s.setPhone(rs.getString("phone"));
s.setQQ(rs.getString("QQ"));

} else {
System.out.println("没有相应的数据");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
public void xgff(int id,String name,String sex,Date birthday,String phone,String QQ){
Ff f=new Ff();
String sql="update student set name='"+name+"',sex='"+sex+"',birthday='"+birthday+"',+phone='"+phone+"',QQ='"+QQ+"' where id="+id;
if(f.ddcz(id)!=null){
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class InitDB {
private String DBDriver = null;
private String url = null;
private String user = null;
private String password = null;
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private static final InitDB initDB_obj = new InitDB();

private InitDB() {
DBDriver = "com.mysql.jdbc.Driver";
url = "jdbc:mysql://localhost/student";
user = "root";
password = "123";
try {
Class.forName(DBDriver);
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static InitDB getInitDB() {
return initDB_obj;
}

public Connection getConn() {
return conn;
}

public Statement getStmt() {
return stmt;
}

public ResultSet getRs(String sql) {
if (sql.toLowerCase().indexOf("select") != -1) {
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return rs;
}

public void closeDB() {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

import java.util.Date;


public class Student {
private int id;
private String name;
private String sex;
private Date birthday;
private String phone;
private String QQ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getQQ() {
return QQ;
}
public void setQQ(String qQ) {
QQ = qQ;
}
}


import java.util.ArrayList;
import java.util.List;

public class test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ff f = new Ff();
List<Student> list = new ArrayList<Student>();
list = f.dgcz();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getId() + "/t"
+ list.get(i).getName());
}

// f.ddcz(4);
//System.out.println(f.ddcz(4).getName());
}

}


...全文
514 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
成一粒 2011-10-31
  • 打赏
  • 举报
回复
哇,太长了
weikaiwei 2011-10-31
  • 打赏
  • 举报
回复
谢谢啊。。 就是那个删除和修改的方法执行不鸟。。
凌风雪雕 2011-10-31
  • 打赏
  • 举报
回复
代码太多 没心情看
风尘中国 2011-10-31
  • 打赏
  • 举报
回复
帮你改好了,改过的地方主要是Ff类里面private InitDB db=InitDB.getInitDB();
dgcz这个方法 语句Student s = new Student();移到循环内部
还有InitDB的url加上了3306端口url = "jdbc:mysql://localhost:3306/student"
student这个类不用变

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Ff {
private Connection conn;
private Statement stmt;
private InitDB db=InitDB.getInitDB();//这里修改过


public List<Student> dgcz() {
conn = db.getConn();
stmt = db.getStmt();
ResultSet rs = db.getRs("select * from student");
List<Student> list = new ArrayList<Student>();
//这里修改过
try {
while (rs.next()) {
Student s = new Student();
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setSex(rs.getString("sex"));
s.setBirthday(rs.getDate("birthday"));
s.setPhone(rs.getString("phone"));
s.setQQ(rs.getString("QQ"));
list.add(s);

}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}

public void scff(int id) {
Ff f = new Ff();
if (f.ddcz(id) != null) {
String delete = "delete from student where id=" + id;
try {
stmt.executeUpdate(delete);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

public Student ddcz(int id) {
Student s = null;
String sql = "select * from student where id=" + id;


try {
ResultSet rs;
rs = stmt.executeQuery(sql);
if (rs.next()) {
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setSex(rs.getString("sex"));
s.setBirthday(rs.getDate("birthday"));
s.setPhone(rs.getString("phone"));
s.setQQ(rs.getString("QQ"));

} else {
System.out.println("没有相应的数据");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
public void xgff(int id,String name,String sex,Date birthday,String phone,String QQ){
Ff f=new Ff();
String sql="update student set name='"+name+"',sex='"+sex+"',birthday='"+birthday+"',+phone='"+phone+"',QQ='"+QQ+"' where id="+id;
if(f.ddcz(id)!=null){
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}



import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class InitDB {
private String DBDriver = null;
private String url = null;
private String user = null;
private String password = null;
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private static final InitDB initDB_obj = new InitDB();

private InitDB() {
DBDriver = "com.mysql.jdbc.Driver";
url = "jdbc:mysql://localhost:3306/student"; //这里修改过
user = "root";
password = "123";//这里改成你自己的数据库密码
try {
Class.forName(DBDriver);
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static InitDB getInitDB() {
return initDB_obj;
}

public Connection getConn() {
return conn;
}

public Statement getStmt() {
return stmt;
}

public ResultSet getRs(String sql) {
if (sql.toLowerCase().indexOf("select") != -1) {
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return rs;
}

public void closeDB() {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}




import java.util.List;
import java.util.ArrayList;

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
Ff f = new Ff();
List<Student> list = new ArrayList<Student>();
list = f.dgcz();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getId() + "\t"
+ list.get(i).getName());
}

// f.ddcz(4);
//System.out.println(f.ddcz(4).getName());
}

}

小龙龙龙链 2011-10-31
  • 打赏
  • 举报
回复
private InitDB db; 你这个db是在哪里初始化的?
weikaiwei 2011-10-31
  • 打赏
  • 举报
回复
Exception in thread "main" java.lang.NullPointerException
at Ff.dgcz(Ff.java:16)
at test.main(test.java:13)
风尘中国 2011-10-31
  • 打赏
  • 举报
回复
你把异常信息贴出来看看

50,533

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧