2015-11-01 3 views
0

Привет, я хочу создать JTable с SQLite Database. Данные должны поступать из базы данных SQLite и сохраняться в ней. Теперь новые детали будут добавлены путем ввода текстового поля. Тем не менее, я получаю сообщение об ошибке: "java.sql.SQLException: рядом "(?": Ошибка синтаксиса"Синтаксическая ошибка SQLite с JTable

неправильно

как там
public class SQLite  { 

public static DefaultTableModel model = new DefaultTableModel(); 
private static JTextField fieldID; 
private static JTextField fieldName; 
private static JTextField fieldAge; 
private static JTextField fieldAddress; 
private static JTextField fieldSalary; 

государственной статической силы основных (String арг []) {

Connection c = null; 
Statement stmt = null; 
try { 
    Class.forName("org.sqlite.JDBC"); 
    c = DriverManager.getConnection("jdbc:sqlite:test.db"); 
    c.setAutoCommit(false); 
    System.out.println("Opened database successfully"); 

    stmt = c.createStatement(); 

    c.commit(); 

    JFrame f = new JFrame(); 
    f.setLayout(new GridLayout(5,1)); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    fieldID = new JTextField("ID"); 
    fieldName = new JTextField("Name"); 
    fieldAge = new JTextField("Age"); 
    fieldAddress = new JTextField("Address"); 
    fieldSalary = new JTextField("Salary"); 

    String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + 
      "VALUES (fieldID.getText(), feldName.getText(), Age.getText(), feldAddress.getText(), feldSalary.getText()"; 
    stmt.executeUpdate(sql); 

    JTable table = new JTable(model); 
    f.add(new JScrollPane(table)); 

    model.addColumn("id"); 
    model.addColumn("name"); 
    model.addColumn("age"); 
    model.addColumn("address"); 
    model.addColumn("salary"); 

    ResultSet rs = stmt.executeQuery("SELECT * FROM COMPANY;"); 
    while (rs.next()) { 
    int id = rs.getInt("id"); 
    String name = rs.getString("name"); 
    int age = rs.getInt("age"); 
    String address = rs.getString("address"); 
    float salary = rs.getFloat("salary"); 

     model.addRow(new Object[] {id, name, age, address, salary}); 
    } 

    /**JTextField feldID = new JTextField("ID"); 
    JTextField feldName = new JTextField("Name"); 
    JTextField feldAge = new JTextField("Age"); 
    JTextField feldAddress = new JTextField("Address"); 
    JTextField feldSalary = new JTextField("Salary"); 
    **/ 

    f.pack(); 
    f.setVisible(true); 

    rs.close(); 
    stmt.close(); 
    c.close(); 
} catch (Exception e) { 
    System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
    System.exit(0); 
} 
System.out.println("Operation done successfully"); 
} 
} 

ответ

1

Вот ваша проблема:

"VALUES (fieldID.getText(), feldName.getText(), Age.getText(), feldAddress.getText(), feldSalary.getText()"; 

Они гласят litterals, а не ссылки на getter.

Вот что вам нужно будет заменить, используя конкатенацию.

"VALUES ("+fieldID.getText()+","+feldName.getText()+","+Age.getText()+","+feldAddress.getText()+","+feldSalary.getText()+");";

+0

спасибо ^^ это работает до сих пор, но теперь я получаю java sql Исключение: «no such column: ID» – Jibos

1

Используйте PreparedStatement. Это не проще кодировать и поддерживать и управлять разделителей для вас:

String sql = "INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (?, ?, ?, ?, ?)"; 

PreparedStatement stmt = connection.prepareStatement(sql); 

stmt.setString(1, fieldID.getText()); 
stmt.setString(2, fieldname.getText()); 
stmt.setString(3, ...); 
stmt.setString(4, ...); 
stmt.setString(5, ...); 
stmt.executeUpdate(); 

но теперь я получаю Java исключение SQL: «нет такого столбца: ID»

Ну, сообщение самоочевидно. Нет столбца «ID». Мы не можем помочь вам в этом, потому что вы знаете только имена колонок, так как именно вы создали базу данных.

Смежные вопросы