用java设计一个客户管理系统过程中,Database这个类是我连接数据库程序的类,在设计客户基本信息这个表的时候,我想初始化三个客户的信息,于是我在Database这个类中加入了三条语句
 public static boolean joinDB() {
        boolean joinFlag;
        try {
            joinFlag = true;
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            cn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sample","sa","605");
           
            cn.setCatalog("sample");
            System.out.println("数据库连接成功");
            st = cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                    ResultSet.CONCUR_READ_ONLY);
            st.execute("INSERT INTO Table3 VALUES ('admin','123')");
            st.execute("INSERT INTO Clientm VALUES ('张三','男','23')");
            st.execute("INSERT INTO Clientm VALUES ('李四','女','25')");
            st.execute("INSERT INTO Clientm VALUES ('王五','男','20')");
          
 就是这最后的三条,Land这个类中用到了joinDB()这个方法,Land这个类是整个程序的主程序,可是每次我运行程序,客户基本信息中就加三天 张三 李四 王五,总是这样的循环。是不是不应该在Database这个类中执行添加数据库的操作啊,如果不是,应该在哪添加
              st.execute("INSERT INTO Clientm VALUES ('张三','男','23')");
            st.execute("INSERT INTO Clientm VALUES ('李四','女','25')");
            st.execute("INSERT INTO Clientm VALUES ('王五','男','20')");
这个表的信息啊!!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【beingyourself】截止到2008-07-21 23:19:27的历史汇总数据(不包括此帖):
    发帖的总数量:52                       发帖的总分数:1100                     每贴平均分数:21                       
    回帖的总数量:14                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:52                       结贴的总分数:1100                     
    无满意结贴数:4                        无满意结贴分:50                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:7.69  %               无满意结分率:4.55  %                  
    敬礼!
      

  2.   

    你把land类贴出来看看啊
    怎么可能死循环呢?
      

  3.   

    你把land类贴出来看看啊
    怎么可能死循环呢?
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.sql.*;
    import javax.swing.*;
    public class Land
    {
    public static void main(String[] args)
    {
    LandFrame frame=new LandFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    }
    class LandFrame extends JFrame
    {
    JFrame jf ;
    JLabel labelWelcome = new JLabel("小区车辆管理系统");
    JLabel labelName=new JLabel("用户名:");
    JLabel labelPassword=new JLabel("密码:");
    JTextField textName=new JTextField();
    JPasswordField textPassword=new JPasswordField();
    JButton buttonEnter=new JButton("登录");
    JButton buttoncancel=new JButton("清空");

    public LandFrame()
    {
    jf=this;
    Toolkit kit=Toolkit.getDefaultToolkit();
    Dimension screenSize=kit.getScreenSize();
    int screenWidth=screenSize.width;
    int screenHeight=screenSize.height;
    setSize(screenWidth/4,screenHeight/4);
    setLocation(screenWidth*3/8,screenHeight*3/8);
    setTitle("登陆界面");

    Font f = new Font("新宋体",Font.PLAIN,12);

    Container con = getContentPane();
    con.setLayout(null);

    labelWelcome.setBounds(95,10,150,20);
    labelWelcome.setFont(new Font("新宋体",Font.PLAIN,14));
    con.add(labelWelcome);

    labelName.setBounds(45,40,55,20);
    labelName.setFont(f);
    con.add(labelName);
    textName.setBounds(95,40,120,20);
    con.add(textName);

            labelPassword.setBounds(45,70,45,20);
            labelPassword.setFont(f);
    con.add(labelPassword);
    textPassword.setBounds(95,70,120,20);
    con.add(textPassword);

            buttonEnter.setBounds(90,110,60,20);
    buttonEnter.setFont(f);
    con.add(buttonEnter);
    buttonEnter.addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent m){
    if(textName.getText().equals("")){
    new JOptionPane().showMessageDialog(null,"用户名不能为空!");
    }
    else if(textPassword.getText().equals("")){
    new JOptionPane().showMessageDialog(null,"密码不能为空!");
    }
    else{
    String sql="select * from Table3 where User_Name = '" + textName.getText() + "' and Password = '" + textPassword.getText()+ "'";
    System.out.println(sql);
    Judge(sql);
    }
    }
    });

    buttoncancel.setBounds(155,110,60,20);
    buttoncancel.setFont(f);
    con.add(buttoncancel);
    buttoncancel.addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent m){
    textName.setText("");
    textPassword.setText("");
    }
    });
     }
        private void Judge(String sqlString) {     if (Database.joinDB()) {
          if (Database.query(sqlString))
             try{
               if(Database.rs.isBeforeFirst()) {
                 System.out.println("密码正确");
                 jf.setVisible(false);
                 Database.cn.close();
                 new Main();
               }
               else {
                 System.out.println("错误");
                 new JOptionPane().showMessageDialog(null,"用户名或密码错误!","",JOptionPane.ERROR_MESSAGE);
                }
              }catch(Exception e) {
                 System.out.println(e.getMessage());
              }
        }
        else{
        System.out.println("连接数据库不成功!!!");
        }
      }
    }
      

  5.   

    你调用joinDB()方法的时候,会用到数据库的连接操作,连接后执行了出入语句,而每一条插入语句又会去连接数据库,然后又执行插入语句,这样下去的话肯定会死循环了.建议你把连接抽象出一个方法,执行插入的语句也单独抽象出一个方法,这样的话就不会出现死循环了
      

  6.   

    你调用joinDB()方法的时候,会用到数据库的连接操作,连接后执行了出入语句,而每一条插入语句又会去连接数据库,然后又执行插入语句,这样下去的话肯定会死循环了.建议你把连接抽象出一个方法,执行插入的语句也单独抽象出一个方法,这样的话就不会出现死循环了
      

  7.   

    给你个例子看看吧
        private Connection con;
        public DBManager() {
            openConn();
        }    private void openConn() {
            try {
                if (con == null || con.isClosed()) {
                    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                    con = DriverManager.getConnection(
                            "jdbc:microsoft:sqlserver://localhost:1433;dataBaseName=",
                            "sa", "");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
        }   
        public int executeSQL(String sql) {
            int flag = 0;
            try {
                Statement stmt = con.createStatement();
                flag = stmt.executeUpdate(sql);
            } catch (SQLException ex) {
                ex.printStackTrace();
            } finally {
                closeConn();
            }
            return flag;
        }
      

  8.   

    可是我在什么地方执行executeSQL这个方法以添加数据库信息呢?
      

  9.   

    是在建立客户管理系统的界面里还是在Land里面?
      

  10.   

    你可以单独写个类,这个类专门跟数据库打交道,可以对数据库进行CRUD操作,在这个类里调用executeSQL方法,然后在你的land类里再调用这个类的executeSQL方法,这样的话就把界面和数据层分开了,便于阅读和以后的维护.