********************************* РЕШЕННЫЙ 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, пожалуйста, проигнорируйте их, поскольку я очень быстро отредактировал это, потому что я выбежал из двери, чтобы работать и отправлен здесь.
Еще раз спасибо за просмотр :)
Эта ошибка возникла из-за неправильного значения по умолчанию в поле даты. MsAccess не распознает 0 как действительную дату и приводит к ошибке преобразования типа. Использовать default =Date()
допустимую дату или значение по умолчанию для исправления