
要解决的办法就是改变数据表结构.这个要你自己衡量工作量了.
解决的思路其实是参考链表的.如果你对JAVA了解较深的话很容易就应该想到了.就是arrayList和linkedList的区别.
要想每次插入,只更改有限条记录,解决方法是,现有的ABC.....的排序记录,不是以index为字段,而是以上下记录的主键作为字段.
举例说明:
A,B,C,D,E5个记录一共.现有的排列顺序是从A→E顺序.有如下表结构:
编号 下一个记录的编号
AB
BC
CD
DE
ENULL
当你要在C和D当中插入一条记录T,只要修改C这条记录就OK.
编号 下一个记录的编号
AB
BC//不变
CT//变动1
TD//变动2
DE//不变
ENULL
显然的,在增删改的问题上,这样的表结构非常高效,但是你也能看到,在遍历的问题上,显然效率非常差.我现在是用的最后一个记录的"下一条"为NULL,那么遍历的时候是反过来的.首先找到最后一条(WHERE NEXT is NULL)然后"顺藤摸瓜"找下去.
或者如果你的业务一般都是从头开始往下找,那么表结构是
编号 上一条记录
A NULL
B A
C B
这样子.
--------------------------------------
因为你只问了如何解决增删改的问题.所以就帮你解决到这好了.
但是得提醒你,在日常的遍历查询的时候,这样的结构是非常低效的.
你也可以自己想想综合的解决方案
///////////////以后麻烦用追问,不然都没地方回答你新提出来的问题.
补充回答:我回答的时候没看到 carefreeJava的回答,我和他的意思是差不多的.我比他少用一个字段.
但是我反问一句,你真的认真看了别人的回答了吗?我和 carefreeJava都是用java里的LIST的差别让你便于理解,我们俩给出的解决方案难道不是基于数据库的吗?
循环遍历什么的,JAVA显然可以实现,数据库难道就实现不了吗?
package com.db.connectionimport java.sql.Connection
import java.sql.DriverManager
import java.sql.PreparedStatement
import java.sql.ResultSet
import java.sql.SQLException
import java.sql.Statement
import javax.sql.DataSource
import otc.OtcDBcontrol
public class DBUtil {
public Connection conn
public ResultSet rs
public Statement st
public PreparedStatement ps
public DataSource ds
public boolean flag = false
public DBUtil() throws SQLException {
getConnection()
}
/**
* 打开连接
* @throws SQLException
*/
public void getConnection() throws SQLException {
try {
if (conn == null) {
Class.forName("org.gjt.mm.mysql.Driver")
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/otc?user=root&password=123&useUnicode=true&characterEncoding=UTF-8")
conn.setAutoCommit(false)
}
} catch (Exception e) {
e.printStackTrace()
}
st = conn.createStatement()
}
/**
* 关闭连接
* @throws SQLException
*/
public void close() throws SQLException {
if (st != null) {
st.close()
}
if (conn != null) {
conn.close()
}
}
/**
* 查询
* @param sql
* @return
* @throws SQLException
*/
public ResultSet query(String sql) throws SQLException {
System.out.println(sql)
rs = st.executeQuery(sql)
return rs
}
/**
* 增删改
* @param sql
* @return
* @throws SQLException
*/
public boolean update(String sql) throws SQLException {
System.out.println(sql)
int s = 1
s = st.executeUpdate(sql)
if (s != 0) {
conn.setAutoCommit(false)
conn.commit()
flag = true
} else {
conn.rollback()
flag = false
}
return flag
}
}
这个是代码,只需要改你自己的数据库用户名密码就可以了~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)