SQL в Java отправляет в две таблицы, но с ошибками

1

********************************* РЕШЕННЫЙ I-LOVE-2-REVIVE ВИДЕТЬ НИЖЕ ****** ************

база данных отбрасывала назад ошибку, добавляя "fileNo" в качестве других полей, которые пошли на значение по умолчанию, где даты и defualt были установлены равными 0. поэтому в access = Date() был установлен по умолчанию, и ошибка была решена.

******************************************* КОНЕЦ РЕШЕНИЯ **** ***********************************

у меня были серьезные проблемы, и мой мозг полностью растаял, пытаясь его решить!

поэтому в основном у меня есть 2 таблицы в моей базе данных доступа к базе данных "Файлы", содержащей FileNo, TrailDate, Clientname. другой называется "ToDO", содержащий FileNo, 1,1a, 1b, 2,2a, 2b ECT. (1 относится к Веществу, которую вам нужно сделать, и 1а относится к дате, которую она должна быть выполнена)

Тогда у меня есть 2 точки входа в мою программу java. вы вводите файл. это отправляется в базу данных файлов и отлично работает! второй вытаскивает столбец "FileNo" из "Файлы" в поле Jcombo, и как только вы нажимаете этот файл, номер "Номер" искал таблицу "ToDO" для своих данных в 1,1a, 2,2a ect. затем выводит это так, чтобы пользователь мог редактировать или просматривать.

моя проблема с им теперь нужна, так что, когда вы вводите новый файл в AddFile GUI, чтобы затем добавить этот FileNo в базу данных "ToDO".

это образец кода im, который работает с

try { //// WORKING  
       PreparedStatement statement = (PreparedStatement)connect.prepareStatement("INSERT INTO Files(FileNo,TrialDate,ClientName)VALUES('"+fileNumber+"','"+trialDate+"','"+clientName+"')");
            statement.executeUpdate();
            statement.close();
            connect.close();
            JOptionPane.showMessageDialog(null, "File added to Database. Returning to main menu");
            System.out.println("Success!");
            adfFrame.setVisible(false);
            mainMenu();

        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, "File name already in Database!");
            System.out.println("Error" + ex);}

теперь, когда я меняю этот код на:

try { 
       PreparedStatement statement = (PreparedStatement)connect.prepareStatement("INSERT INTO ToDO(FileNo)VALUES('"+fileNumber+"')");
                            statement.executeUpdate();
            statement.close();
            connect.close();
            JOptionPane.showMessageDialog(null, "File added to Database. Returning to main menu");
            System.out.println("Success!");
            adfFrame.setVisible(false);
            mainMenu();

        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, "File name already in Database!");
            System.out.println("Error" + ex);}

Я получаю чтение исключений SQL: net.ucanaccess.jdbc.UcanaccessSQLException: несовместимый тип данных при преобразовании

Но дело в том, что я не понимаю, как это возможно !? как в моей базе данных, дизайн FileNo в таблице "TodO" является LongText, так как он находится в таблице "Файлы". У меня нет проблем с вводом файла, но во втором я пытаюсь добавить те же данные в ToDO, я получаю ошибку!

Я довольно новая Java, и это мой первый полный проект, поэтому приношу извинения, если это тривиально, но я искал и искал, и я не могу найти подходящий ответ для моей проблемы :(

.......РЕДАКТИРОВАТЬ....

это весь код для метода.

   private void fileFrame() {    
    //POPULATES CLIENTS STRING ARRAY 

    String[] clients= new String[noclients];
    String sql1 = "SELECT ClientName FROM ClientTable";
        try {
            rs = st.executeQuery(sql1);
        } catch (SQLException ex) {
            Logger.getLogger(Login1.class.getName()).log(Level.SEVERE, null, ex);
        }
    System.out.println(sql1);
    int count= 0;           
        try {
            while (rs.next()){
                clients[count] = rs.getString("ClientName");
                count = count + 1; 
                System.out.println("Clients="+clients);
            }   } catch (SQLException ex) {
            Logger.getLogger(Login1.class.getName()).log(Level.SEVERE, null, ex);
        }
//FINISHES CLIENT ARRAY POPULATION.        
    JLabel l = new JLabel("File Reference");
    JLabel l1 = new JLabel("Trial Date");
    JTextField t = new JTextField(10);
    JTextField t1 = new JTextField(10);
    JComboBox clientList = new JComboBox(clients);

    JButton b = new JButton("Save");
    JButton b1 = new JButton("Save and Exit");



        adfFrame.setSize(500,800);
        adfFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        adfFrame.setLocation(700, 500);
        adfFrame.setVisible(true);
        //Adds TExt Fields/Labels/Button to the GUI
        JPanel p = new JPanel();
        p.add(l);
        p.add(t);
        p.add(l1);
        p.add(t1);
        p.add(clientList);
        p.add(b);
        p.add(b1);

        adfFrame.add(p);     
        p.getRootPane().setDefaultButton(b);

        //save button pressed
        b.addActionListener(new ActionListener() {


            @Override
        public void actionPerformed(ActionEvent e) {
            String driver = "net.ucanaccess.jdbc.UcanaccessDriver";
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Login1.class.getName()).log(Level.SEVERE, null, ex);
            }
            //##DECLARES FILEPATH##
            String filePath = "C://Users/Chris/java/Tutorials GUI/2.Login page with Database/Login1/Login1.accdb";

            //##PULL FILEPATH FROM ABOVE##
            String db = "jdbc:ucanaccess://"+filePath;
            Connection connect = null;
            try {
                connect = DriverManager.getConnection(db);
                /// CONNECTION  MADE
            } catch (SQLException ex) {
                Logger.getLogger(Login1.class.getName()).log(Level.SEVERE, null, ex);
            }
            String fileNumber=t.getText();
            //System.out.println(fileNumber);
            String clientName=clientList.getSelectedItem().toString();
            //System.out.println(clientName);
            String trialDate =t1.getText();
            //System.out.println(trialDate);


            try { //// WORKING  
           PreparedStatement statement = (PreparedStatement)connect.prepareStatement("INSERT INTO Files(FileNo,TrialDate,ClientName)VALUES('"+fileNumber+"','"+trialDate+"','"+clientName+"')");
          System.out.println("1");
           statement.executeUpdate(); 
           System.out.println(statement);
           statement.close();
                //statement.setString(1,clientName);
                //statement.setString(2,yn);
           //PreparedStatement stotement = (PreparedStatement)connect.prepareStatement("INSERT INTO ToDO [FileNo] VALUES('"+fileNumber+"')");
          //System.out.println("2");
          //stotement.executeUpdate(); System.out.println(stotement);
               // stotement.close();
                connect.close();
                System.out.println("Success!");

            }catch(Exception ex){
                JOptionPane.showMessageDialog(null, "File already in Database!");
                System.out.println("Error" + ex);
            }



            t.setText("");
            t1.setText("");
            fcount();
        }
    });

        //Save and exit button pressed
        b1.addActionListener(new ActionListener() {


            @Override
        public void actionPerformed(ActionEvent e) {
            String driver = "net.ucanaccess.jdbc.UcanaccessDriver";
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Login1.class.getName()).log(Level.SEVERE, null, ex);
            }
            //##DECLARES FILEPATH##
            String filePath = "C://Users/Chris/java/Tutorials GUI/2.Login page with Database/Login1/Login1.accdb";

            //##PULL FILEPATH FROM ABOVE##
            String db = "jdbc:ucanaccess://"+filePath;
            Connection connect = null;
            try {
                connect = DriverManager.getConnection(db);
                /// CONNECTION  MADE
            } catch (SQLException ex) {
                Logger.getLogger(Login1.class.getName()).log(Level.SEVERE, null, ex);
            }
            String fileNumber=t.getText();
            //System.out.println(fileNumber);
            String clientName=clientList.getSelectedItem().toString();
            //System.out.println(clientName);
            String trialDate =t1.getText();
            //System.out.println(trialDate);


            try { //// WORKING  
           PreparedStatement statement = (PreparedStatement)connect.prepareStatement("INSERT INTO Files(FileNo,TrialDate,ClientName)VALUES('"+fileNumber+"','"+trialDate+"','"+clientName+"')");

                statement.executeUpdate();
                statement.close();
                connect.close();
                JOptionPane.showMessageDialog(null, "File added to Database. Returning to main menu");
                System.out.println("Success!");

            }catch(Exception ex){
                JOptionPane.showMessageDialog(null, "File name already in Database!");
                System.out.println("Error" + ex);
                adfFrame.setVisible(false);
                mainMenu();


            }

try { 
           PreparedStatement statement = (PreparedStatement)connect.prepareStatement("INSERT INTO ToDO(FileNo)VALUES('"+fileNumber+"')");
                statement.executeUpdate();
                statement.close();
                connect.close();
                JOptionPane.showMessageDialog(null, "File added to Database. Returning to main menu");
                System.out.println("Success!");

            }catch(Exception ex){
                JOptionPane.showMessageDialog(null, "File name already in Database!");
                System.out.println("Error" + ex);

         }

            t.setText("");
            t1.setText("");
            fcount();

        }
    });

}

в приведенном выше случае обратите внимание, что у меня есть две кнопки, делающие то же самое. B и B1 B1 обычно имеют выход GUI на нем в качестве варианта сохранения и выхода. в этом коде могут быть некоторые ошибки miner, пожалуйста, проигнорируйте их, поскольку я очень быстро отредактировал это, потому что я выбежал из двери, чтобы работать и отправлен здесь.

Еще раз спасибо за просмотр :)

  • 0
    Вы уверены, что дезинфицируете имя файла? Содержит ли это «если да, то вам нужно избежать этого»
  • 0
    Мне также интересно, может быть, стоит иметь другой метод, где я сравниваю 2 таблицы на FileNo. и если ToDO не имеет один из номеров файлов, чтобы добавить его. но, увы, я не настолько продвинут в коде SQL, чтобы понять, как это сделать!
Показать ещё 8 комментариев
Теги:

1 ответ

0
Лучший ответ

Эта ошибка возникла из-за неправильного значения по умолчанию в поле даты. MsAccess не распознает 0 как действительную дату и приводит к ошибке преобразования типа. Использовать default =Date() допустимую дату или значение по умолчанию для исправления

  • 0
    Ура тебе звезда!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню