我用的是Sybase数据库,id不是自动增长的
要插入数据的表是多人操作的,我插入数据时id选的就是select max(id),那再查的时候肯定就不能用这个了,因为很有可能把别人的id查出来
有没有什么好的方法?请高手写明白些,具体怎么实现。因为我的水平有限,写的简单的话我可能看不懂,谢谢了!
要插入数据的表是多人操作的,我插入数据时id选的就是select max(id),那再查的时候肯定就不能用这个了,因为很有可能把别人的id查出来
有没有什么好的方法?请高手写明白些,具体怎么实现。因为我的水平有限,写的简单的话我可能看不懂,谢谢了!
表:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`Id` int(11) NOT NULL auto_increment,
`userName` varchar(255) default NULL,
`userPwd` varchar(255) default NULL,
`mail` varchar(250) default NULL,
`address` varchar(255) default NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;java代码:
PreparedStatement pres = conn
.prepareStatement("insert into user(userName,userPwd) values('abc','a')");
boolean form = pres.execute();
ResultSet rs = pres.getGeneratedKeys();
while (rs.next()) {
System.out.println("---" +rs.getInt(1));
}
把mixId放到变量里
再插入数据 ,这样插入的mixId就保存下来了
String sql = "select mix(id) mixId";
..........
int mixId = rs.get("mixId");
sql = insert into table (id,..) values(mixId,..);不知道我理解的对不对
我的表id不是自动增长的,getGeneratedKeys()方法不行;
先把最大id查出来,如果这时有人插入记录,我再插入记录时用刚才我查出来那个id不就不对了吗;
取最后一条id就更不对了,我刚插入完一条记录别人马上就插入了一条,我再取最后一条id肯定不是我的还有没有肯定能用的法啊?有效点的!!!
现在不用hibernate,我得和项目统一
我插入的数据和其他数据也可能重复,这怎么查啊
用锁要小心。一个不小心就死锁了
stmt.execute("");
stmt.getMoreResults();
ResultSet rs = stmt.getResultSet();
rs.getInt(1);
stmt.execute("");
stmt.getMoreResults();
ResultSet rs = stmt.getResultSet();
rs.getInt(1);
HIBERNATE 的save方法 会返回一个Serializable类型字段 就是你所插入的对象的ID。
JPA更方便 你调用persist方法后,他自动会帮你把持久化的对象返回,所以那个保存的实体就是带ID的了。
至少 3 个字段:对应表名(唯一约束)、当前ID、说明在新增时,根据表名,得到 当前ID,读取完成后 当前ID 增加 1这样就能保证这个 ID 不会重复