当前位置: 代码迷 >> Java相关 >> ecplise中java 连数据库问题
  详细解决方案

ecplise中java 连数据库问题

热度:215   发布时间:2007-05-28 23:05:38.0
不知怎么搞的现在出现这个问题
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2934)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3255)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1293)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:867)
at mypackage.DataConnection.main(DataConnection.java:25)
程序没变
包导入如下

----------------解决方案--------------------------------------------------------
谁帮我看看哦

----------------解决方案--------------------------------------------------------

现在变成这个错误了
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2934)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3255)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1293)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:867)
at mypackage.DataConnection.main(DataConnection.java:25)
数据库能写进东西,但字能写入第一个names[0],id能自动增1,但name不要变,总是names[0]


----------------解决方案--------------------------------------------------------

我现在能运行了,但我发现一个问题,我也不知道为什么
当我用这些语句
create table friends(
id int auto_increment primary key,
name varchar(30) not null default 'NULL',
description varchar(50)
);
创建表时会出现错误
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2934)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3255)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1293)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:867)
at mypackage.DataConnection.main(DataConnection.java:25)
数据库中有数据:
id name description
1 liu null
当我把原程序中
for(int i=0;i<6;i++)
{
prestatement.setInt(1, i);
prestatement.setString(2, names[i]);
prestatement.execute();
}
中改为for(int i=1;i<6;i++)时,就不会抛出异常
控制台结果为
qian
shi
xu
zhou
lu
数据库中数据为
id name description
1 qian null
2 shi null
3 xu null
4 zhou null
5 lu null
很明显我没有让它显示names[0],但没有抛出异常


----------------解决方案--------------------------------------------------------

当我用这些语句
create table friends(
id int primary key,
name varchar(30) not null default 'NULL',
description varchar(50)
);
即把id int auto_increment primary key改为id int primary key
创建表时,就一切正常
也不知道为什么
还有要谢谢楼上的beyond_p
String driver = "com.mysql.jdbc.Driver" D确实要大写
谁能帮我解决这些问题
十分感谢


----------------解决方案--------------------------------------------------------
你ID是自动增长的,你写SQL语句的时候就不要把ID也写进来了。
String insert ="insert friends(name) values (?)";

[此贴子已经被作者于2007-5-29 9:04:45编辑过]


----------------解决方案--------------------------------------------------------

谢谢楼上的,你说的很对,我终于明白了


----------------解决方案--------------------------------------------------------
它不说了吗 说你违反了数据的完整性!
你用了auto_increment 主键 会自动随着记录的增加而增加
所以你用auto_increment 再用 prestatement.setInt(1, i); 就会报错
你试试把 prestatement.setInt(1, i);去掉 看看还有没有问题

----------------解决方案--------------------------------------------------------

啊哦 已经有人回答了 没看到


----------------解决方案--------------------------------------------------------

也谢谢你,呵呵


----------------解决方案--------------------------------------------------------
  相关解决方案