2016-11-30 2 views
0

Я использую видеокурс по программированию базы данных с текущим уроком, использующим Java для подключения к MySQL. Я следил за видео и даже скопировал текстовый рабочий файл для этой конкретной проблемы (поэтому я знаю, что код работает), но я все еще получаю сообщение об ошибке. База данных предназначена для хранения информации для книг: isbn, название, автор, издатель и цена. Я ввел точные данные с помощью командной строки, но когда я использую программу для графического интерфейса, я получаю «усеченную данные». Я знаю, что в «усеченных» ошибках есть несколько ответов; однако я не вижу, где данные слишком велики, особенно при вставке работ с использованием интерфейса без GUI. Все типы данных - VARCHAR, за исключением цены FLOAT. Ошибки я получаю:Данные, усеченные для столбца при использовании FLOAT в графическом интерфейсе

вставки в книге значений ('978007106789', 'Застрял на Java', 'J Рейд', '9,99', 'Osborne') Ошибка выполнения SQL java.sql.SQLException: Data усечен для столбца 'цена' в строке 1

GUI код:

package Connection; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.sql.*; 
import java.util.*; 

public class InsertRecord extends JFrame { 
    private JButton getBookButton, insertBookButton; 
    private JList bookList; 
    private Connection connection; 
    private JTextField isbn, title, author, price, publisher; 
    private JTextArea errorText; 

    public InsertRecord() { 
     try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     } 
     catch (Exception e) { 
     System.err.println("Unable to load driver."); 
     System.exit(1); 
     } 
    } 

    public void loadBook() { 
     Vector<String> v = new Vector<String>(); 
     try { 
     Statement statement = connection.createStatement(); 
     ResultSet rs = statement.executeQuery("select title from book"); 
     while (rs.next()) { 
      v.addElement(rs.getString("title")); 
     } 
     rs.close(); 
     } 
     catch (SQLException e) { 
     System.err.println("Error executing SQL"); 
     } 
     bookList.setListData(v); 
    } 

    private void createGUI() { 
     Container c = getContentPane(); 
     c.setLayout(new FlowLayout()); 
     bookList = new JList(); 
     loadBook(); 
     bookList.setVisibleRowCount(2); 
     JScrollPane bookListScrollPane = new JScrollPane(bookList); 

     getBookButton = new JButton("Get Book Title"); 
     getBookButton.addActionListener(
     new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       String query = "select * from book where title = " + 
         bookList.getSelectedValue(); 
       try { 
        Statement statement = connection.createStatement(); 

        ResultSet rs = statement.executeQuery(
        "select * from book where title = '" 
        + bookList.getSelectedValue() + "'"); 
      /*ResultSet rs = statement.executeQuery(
        "select * from book where title = 'Java:How To Program'"); */ 
        if (rs.next()) { 
        isbn.setText(rs.getString("isbn")); 
        title.setText(rs.getString("title")); 
        author.setText(rs.getString("author")); 
        price.setText(rs.getString("price")); 
        publisher.setText(rs.getString("publisher")); 
        } 
       } 
       catch (SQLException ex) { isbn.setText(query); } 
      } 
     } 
    ); 

     insertBookButton = new JButton("Insert Book"); 
     insertBookButton.addActionListener (
     new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       try { 
        Statement statement = connection.createStatement(); 
        String insert = "insert into book values("; 
        insert += "'" + isbn.getText() + "',"; 
        insert += "'" + title.getText() + "',"; 
        insert += "'" + author.getText() + "',"; 
        insert += "'" + price.getText() + "',"; 
        insert += "'" + publisher.getText() + "')"; 
        System.out.println(insert); 
        /*int i = statement.executeUpdate("insert into book values(" + 
        "'" + isbn.getText() + "'," + 
        "'" + title.getText() + "'," + 
        "'" + author.getText() + "'," + 
        "'" + price.getText() + "'," + 
        "'" + publisher.getText() + ")");*/ 
        int i = statement.executeUpdate(insert); 
        errorText.append("Inserted " + i + " rows succcessfully."); 
        bookList.removeAll(); 
        loadBook(); 
       } 
       catch (SQLException ex) { 
        System.err.println("Error executing SQL"); 
        ex.printStackTrace(); 
       } 
      } 
      } 
    ); 

     JPanel first = new JPanel(new GridLayout(3,1)); 
     first.add(bookListScrollPane); 
     first.add(getBookButton); 
     first.add(insertBookButton); 

     isbn = new JTextField(13); 
     title = new JTextField(50); 
     author = new JTextField(50); 
     price = new JTextField(8); 
     publisher = new JTextField(50); 
     errorText = new JTextArea(5,15); 
     errorText.setEditable(false); 

     JPanel second = new JPanel(); 
     second.setLayout(new GridLayout(6,1)); 
     second.add(isbn); 
     second.add(title); 
     second.add(author); 
     second.add(price); 
     second.add(publisher); 

     JPanel third = new JPanel(); 
     third.add(new JScrollPane(errorText)); 

     c.add(first); 
     c.add(second); 
     c.add(third); 
     setSize(800, 400); 
     setVisible(true); 
    } 

    public void connectToDB() throws Exception { 
    //Connection conn = null; 
     try { 
     String userName = "jesse"; 
     String password = "password"; 
     String url = "jdbc:mysql://localhost/library"; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     connection = DriverManager.getConnection(url, userName, password); 
     //if (conn != null) System.out.println("Database connection successful."); 
     } 
     catch (SQLException e) { 
     System.out.println("Can't connect to database"); 
     System.exit(1); 
     } 
    } 

    private void init() throws Exception{ 
     connectToDB(); 
    } 

    public static void main(String[] args) throws Exception { 
     InsertRecord insert = new InsertRecord(); 

     insert.addWindowListener(
     new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     } 
    ); 

     insert.init(); 
     insert.createGUI(); 
    } 
} 

вкладыш код просто с помощью командной строки:

package Connection; 

import java.sql.*; 
import java.io.*; 

public class InsertDB { 

    Connection connection; 

    public InsertDB(){ 

     try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     } 
     catch (Exception e) { 
      System.out.println("Could not load driver."); 
      e.printStackTrace(); 
     } 
    } 


    public void ConnectToDB() { 
     try { 
      connection = DriverManager.getConnection("jdbc:mysql://localhost/library", "jesse", "password"); 
      System.out.println("Connected to database."); 
     } 
     catch (Exception e) { 
      System.out.println("Cannot connect to database."); 
      e.printStackTrace(); 
     } 
    } 

    public void execSQL() { 
     try { 
      Statement stmt = connection.createStatement(); 
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
      System.out.print("Enter the isbn: "); 
      String isbn = input.readLine(); 
      System.out.print("Enter the title: "); 
      String title = input.readLine(); 
      System.out.print("Enter the author: "); 
      String author = input.readLine(); 
      System.out.print("Enter the publisher: "); 
      String pub = input.readLine(); 
      System.out.print("Enter the price: "); 
      String p = input.readLine(); 
      double price = Double.parseDouble(p); 


      String insert = "Insert into book values (" + "'" + isbn + "','" + title + "','" + author + "','" + pub + "'," + price + ")"; 
      System.out.println(insert); 
      int inserted = stmt.executeUpdate(insert); //returns 1 for success, 0 for failure 
      if (inserted > 0) { 
       System.out.println("Successfully inserted " + inserted + " row."); 
      } 
     } 
     catch (Exception e) { 
      System.out.println("Error executing SQL"); 
      e.printStackTrace(); 
     } 
    } 
    public static void main(String[] args){ 
     InsertDB conn = new InsertDB(); 
     conn.ConnectToDB(); 
     conn.execSQL(); 
    } 
} 

единственный ра я заметил, что цена находится в кавычках в коде GUI; однако удаление котировок просто вызывает ту же ошибку без кавычек. Также я заметил, что код GUI устанавливает цену в 8 бит (исходный код был 10), тогда как float не настроен на что-либо в MySQL (я считаю, что прочитал на другом посту, по умолчанию это 8 бит ... вот почему я используется 8). Я потянулся к автору видео, и он предложил мне удалить цитаты, связанные с ценой. Но, как я сказал, это не помогло ... также этот код был скопирован из его рабочего файла, который работал над видео. Любая помощь приветствуется.

код База данных:

drop table book; 

create table book (
    isbn_13 varchar(13) primary key, 
    title varchar(50), 
    author varchar(50), 
    publisher varchar(50), 
    price float(11) 
); 
+0

Можете ли вы также указать код, который вы используете, чтобы создать таблицу? – npinti

+0

книга с отрывным столом; создать таблицу книги ( \t isbn_13 VARCHAR (13) первичный ключ, \t название VARCHAR (50), \t автор VARCHAR (50), \t издатель VARCHAR (50), \t цена поплавок (11) ); –

+0

Когда вы инициализируете текстовые поля, используйте конструктор без параметров. При чтении из GUI вместо 'isbn.getText()' используйте 'isbn.getText(). Trim()'. Это должно удалить ненужные пробелы. – npinti

ответ

0

Начиная с нуля, я полностью упал на стол книгу затем воссоздали его с помощью кода MySQL выше. После воссоздания таблицы мне удалось вставить код GUI. Я не уверен, в чем причина моей проблемы, но сбросить и воссоздать стол, казалось, исправить.