这是我的问题,我写了一个关于jdbc概念的程序一切都很好,它编译并运行没有错误。哪里出问题,因为我需要通过删除来改变行的值 前一行(因为该表只包含一行),如果需要使用该程序需要添加列,这两个操作只有在完成任何一个操作时才会成功。
但是这两个操作是在同一帧上完成的。当我改变行,成功后 更新行,我无法插入新列。当我试图插入列时,它显示错误
java.sql.SQlException:[Microsoft][ODBC Micro Access Driver] Could not
lock table 'change' ; currently in use by user 'admin' on 'machine
chiru-pc
这里'change'是完成这些改动的表。
任何人都可以清楚我如何纠正这个错误?
这是我使用的代码
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();
}
}
}
这里的类更改是子类而不是主类
答案 0 :(得分:0)
您似乎使用管理员角色通过GUI登录到同一个数据库/表。从GUI注销并再次运行程序。
答案 1 :(得分:0)
在尝试运行DDL之前,您应该提交您的更改,即在表格中添加新列。
答案 2 :(得分:0)
从mysql命令行,尝试执行:
show full processlist;
并查找可能锁定桌面的进程。
如果您找到一个,并且想要将其删除,请记下id
列。你可以做以下两件事之一:
kill number_in_id_column
kill query number_in_id_column
答案 3 :(得分:0)
我创建了一个新类添加,我可以在一次点击中添加所需数量的列,我成功完成此操作,现在它没有显示我发布的错误。