求救!!!我用DAO设计模式连接数据库,可是怎么搞数据也不能插进去.也不提示任何错误.
我都试了好几天了,也用了不同的的机子,可是就是不提示任何错误,就是数据插入不了.请问大家这到底是怎么回事啊..我用的是mysql数据库下面我把我的代码写下来,谁帮我看看到底是哪里出了问题?我了简单点了,我就把实现一个插入的数据写下来?
一共是4个文件,加一个jsp文件
第一文件Person.java: //实现存储
package org.zgl.vo;
public class Person
{
private String id;
private String name;
private String password;
private int age;
private String email;
public void setId(String id)
{
this.id = id;
}
public void setName(String name)
{
this.name = name;
}
public void setPassword(String password)
{
this.password = password ;
}
public void setAge(int age)
{
this.age = age ;
}
public void setEmail(String email)
{
this.email = email ;
}
public String getId()
{
return this.id ;
}
public String getName()
{
return this.name ;
}
public String getPassword()
{
return this.password ;
}
public int getAge()
{
return this.age ;
}
public String getEmail()
{
return this.email ;
}
}
第二个文件 PersonDAO.java: //这类是个接口
package org.zgl.dao;
import org.zgl.vo.*; //这个是我打的那个包
import java.util.*;
public interface PersonDAO
{
public void insert(Person person) throws Exception ;
}
第二个文件PersonDAOImpl.java //这个是实现上面那个接口的
package org.zgl.dao.impl ;
import java.util.* ;
import java.sql.* ;
import org.zgl.vo.* ;
import org.zgl.dao.* ;
import org.zgl.database.* ;
public class PersonDAOImpl implements PersonDAO
{
public void insert(Person person) throws Exception
{
DataBaseConnection dbc = null ;
PreparedStatement pstmt = null ;
String sql = "insert into person(id,name,password,age,email) values(?,?,?,?,?) " ;
try
{
dbc = new DataBaseConnection() ;
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,person.getId()) ;
pstmt.setString(2,person.getName()) ;
pstmt.setString(3,person.getPassword()) ;
pstmt.setInt(4,person.getAge()) ;
pstmt.setString(5,person.getEmail()) ;
pstmt.executeUpdate();
pstmt.close();
dbc.close();
}
catch (Exception e)
{
}
}
}
第四个文件:DataBaseConnection.java //此文件是连接数据库的类
package org.zgl.database;
import java.sql.* ;
public class DataBaseConnection
{
final String DBDRIVER = "org.gjt.mm.mysql.Driver " ;
final String DBURL = "jdbc:mysql://localhost/person " ;
final String DBUSER = "root " ;
final String DBPASSWORD = "wuxian " ;
Connection conn = null ;
public DataBaseConnection()
{
try
{
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
}
catch (Exception e)
{
}
}
public Connection getConnection()
{
return this.conn ;
}
public void close()
{
try
{
conn.close() ;
}
catch (Exception e)
{
}
}
}
最后一个jsp文件调用
<%@ page contentType= "text/html;charset=gb2312 "%>
<%@ page import= "org.zgl.vo.Person "%>
<%@ page import= "org.zgl.dao.PersonDAO "%>
<%@ page import= "org.zgl.dao.impl.PersonDAOImpl "%>
<%
PersonDAO dao = new PersonDAOImpl() ;
Person person = new Person() ;
person.setId( "1 ");
person.setName( "mark ");
person.setPassword( "mark ");
person.setAge(20);
person.setEmail( "bbs@bbs.com ");
dao.insert(person);
%>
补充一下:应该不是语法的错误,因为我编译和连接都没有出问题,我估计是逻辑上的问题.请哪位老手帮我指引指引.
[解决办法]
catch (Exception e)
{
e.printStackTree();---------> 你都没有打印出来,当然没看到报错啊!!!!
}
好几个地方都改一下就可以看到错误了!!!
[解决办法]
加log 跟踪下。
或者把sql直接拿去数据库执行 看看是不是语句或者数据库没有弄好
[解决办法]
看不出有什么地方不对的,你需要在所有的 catch 中加上 1 楼所说(不过语句错了)的 e.printStackTrace(); 可以输出异常信息,这样才能调试的,否则根本看出不什么东西。
[解决办法]
你把异常原因打印出来,看看到底是为什么得到的conn是null,是密码错误还是url错误等等~一般在异常中都会有说明的
[解决办法]
有些不为null的字段没有赋值吧
[解决办法]
不知道楼主解决了没有,不过我看异常捕获后没有输出错误信息,这样应该不是个好习惯。既然捕获了异常,总得干点而什么。。。
[解决办法]
我今天也遇到这样的问题
不过我的数据库是MS SQL 2000
还好,论坛里面有个兄弟给了个建议,修改了一下表,
最后错误是因为没有把表标识设为自增
设过就可以了
[解决办法]
当成功那一刻才知道什么是开心?
恭喜!
[解决办法]
猜测由于你的mysql连接端口没有指定
jdbc:mysql://localhost:3306/person