这是我的问题,我写了一个关于jdbc概念的程序,一切都很好,它编译并运行没有错误。因为我需要通过删除 前一行(因为该表只包含一行)需要更改行的值,并且需要使用该程序添加列(如果需要),这两个操作都是成功的,只有当任何一个完成。java.sql.SQLException:无法锁定表'更改';目前由用户使用
但是,这两个操作是在同一帧上完成的。当我更改行时,在成功更新行之后,我无法插入新列。当我试图插入列它显示一个错误,因为
java.sql.SQlException:[Microsoft][ODBC Micro Access Driver] Could not
lock table 'change' ; currently in use by user 'admin' on 'machine
chiru-pc
这里'改变'是这些改变完成的表。
任何人都可以清除我如何纠正这个错误?
这里是我用
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.sql.*;
import java.io.*;
import java.util.*;
class Change extends JFrame implements ActionListener
{
JButton done,ok,add;
JLabel[] c = new JLabel[50];
JLabel[] o = new JLabel[50];
JLabel lsx,lad,ln,lo,lc,la;
JTextField[] tf = new JTextField[50];
JTextField t;
int i=0,noc=0,d,h=0;
int[] e=new int[50];
String s;
Connection con;
public Change()
{
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException ce){System.out.println(ce);}
try{con=DriverManager.getConnection("jdbc:odbc:TAILORING");
Statement st=con.createStatement();
Dimension screensize =Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0,0,screensize.width,screensize.height);
setTitle("STITCHING COST DETAILS");
setLayout(null);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
ResultSet rs=st.executeQuery("select * from change");
ResultSetMetaData r=rs.getMetaData();
noc=r.getColumnCount();
done=new JButton("DONE");
ok=new JButton("OK");
add=new JButton("ADD");
t=new JTextField(50);
for(i=1;i<=noc;i++){c[i] =new JLabel();}
for(i=1;i<=noc;i++){o[i] =new JLabel();}
for(i=1;i<=noc;i++){tf[i] =new JTextField(30);}
for(i=1;i<=noc;i++){c[i].setText(r.getColumnName(i));c[i].setFont(new Font("Narkisim",Font.ITALIC,20));}
ResultSet ra=st.executeQuery("select * from change");
while(ra.next())
{
if(d==0){for(i=1;i<=noc;i++){o[i].setText(String.valueOf(ra.getInt(i)));o[i].setFont(new Font("Narkisim",Font.ITALIC,20));}}
d++;
}
lad= new JLabel("SRIHARIPURAM,VISAKHAPATNAM-11 //// MASTER: CH. SRI RAMAKRISHNA");
lad.setFont(new Font("Narkisim",Font.ITALIC,15));
lsx=new JLabel("SUNNEX TAILORS");
lsx.setFont(new Font("Algerian",Font.ITALIC,80));
lc= new JLabel("COSTUME LIST");
lc.setFont(new Font("Narkisim",Font.ITALIC,15));
lo= new JLabel("OLD RATES");
lo.setFont(new Font("Narkisim",Font.ITALIC,15));
ln= new JLabel("NEW RATES");
ln.setFont(new Font("Narkisim",Font.ITALIC,15));
la= new JLabel("ADD NEW COSTUME");
la.setFont(new Font("Narkisim",Font.ITALIC,15));
add(lsx,(screensize.width/3)-(screensize.width/25),(screensize.height/25),710,100);
add(lad,(screensize.width/3),(screensize.height/8),610,40);
add(lc,(screensize.width/5),180,100,20);
add(lo,(screensize.width/3),180,610,20);
add(ln,(screensize.width/2),180,610,20);
add(done,(screensize.width/2)+(screensize.width/6),(screensize.height/3),100,20);
add(ok,(screensize.width/2),(screensize.height)-(screensize.height/7),100,20);
add(add,(screensize.width/4),(screensize.height)-(screensize.height/7),100,20);
add(t,(screensize.width/4),(screensize.height)-(screensize.height/5),100,20);
add(la,(screensize.width/4),(screensize.height)-(screensize.height/4),200,20);
for(i=1;i<=noc;i++)
{
add(c[i],(screensize.width/5),(200+(30*i)),100,20);
}
for(i=1;i<=noc;i++)
{
add(o[i],(screensize.width/3),(200+(30*i)),100,20);
}
for(i=1;i<=noc;i++)
{
add(tf[i],(screensize.width/2),(200+(30*i)),100,20);
}
add.addActionListener(this);
ok.addActionListener(this);
done.addActionListener(this);
}catch(SQLException ce){System.out.println(ce);}
}
public void add(JComponent c,int x,int y,int w,int h)
{
c.setBounds(x,y,w,h);
add(c);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() ==ok)
{
setVisible(false);
Tailoring t=new Tailoring();
}
if(ae.getSource() ==add)
{
setVisible(false);
Add a=new Add();
}
if(ae.getSource() ==done)
{
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException ce){System.out.println(ce);}
try{con=DriverManager.getConnection("jdbc:odbc:TAILORING");
Statement st=con.createStatement();d=0;
ResultSet ra=st.executeQuery("select * from change");
while(ra.next())
{
if(d==0)
{for(i=1;i<=noc;i++)
{
if(h==0){s=(Integer.parseInt(tf[i].getText())+",");}
else if(h==(noc-1)){s+=(Integer.parseInt(tf[i].getText()));}
else if(h!=0 && h!=noc){s+=(Integer.parseInt(tf[i].getText())+",");}
h++;
}d++;
}
}
st.execute
(
"DELETE FROM change"
);
st.execute
(
"insert into change values("+s+")"
);
}catch(SQLException ce){System.out.println(ce);}
try {Thread.sleep(500);}
catch(InterruptedException e){}
setVisible(false);
Change c=new Change();
}
}
}
这里该类变化的一个子类,而不是主类
我们需要精确简洁的代码。 – Lion 2012-01-04 05:00:46