当前位置: 首页 > 知识库问答 >
问题:

JTable出现SQLite语法错误

姬乐
2023-03-14

你好,我想用SQLite数据库创建一个JTable。数据应该来自一个SQLite数据库,并存储在这个。现在,在文本字段中输入新的细节。但是,我得到错误消息:“java.sql.SQLException: near”(“:语法错误”

怎么了?

    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;

公共静态void main(String args[]){

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");
}
}

共有2个答案

云俊名
2023-03-14

使用准备语句。它更容易编码和维护,并将为您管理分隔符:

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”列。我们无法帮助您,因为只有您知道这些列的正确名称,因为您是创建数据库的人。

傅安宁
2023-03-14

这就是你的问题:

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

它们被解读为垃圾,而不是对getter的引用。

下面是您必须使用串联替换它的内容。

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

 类似资料:
  • 我正在尝试使用SQLite数据库在android中本地存储电子邮件。当我第一次调用,该数据库尚不存在,已创建。我在create语句中遇到语法错误。。。我的代码看起来像这样。。。 我不熟悉SQLite语法,我一直在寻找导致这种情况的原因,但没有任何结果。知道是什么引起的吗?数据库确实是本地存储此类数据的最佳方式。 准确的错误如下所示。。

  • 我的SQL语句语法有问题,LogCat说问题就在哪里。我哪里错了? 下面是我的代码: 任何帮助或建议都将欣然接受,这是我的项目的最后一块拼图。当我做完这件事我就可以Rest了。提前道谢。

  • 我有一个方法,如果检查两个文本字段存在,然后重新调整记录ID。我方法是这样的: 我的桌子是这样的: 现在,当我运行该方法时,就像getQueryMatch(Mystr1,Mystr2); 我有一个错误: 我的select查询看起来很正常,但我不知道问题出在哪里?

  • SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门。 大小写敏感性 有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。 注释 SQLite 注释是附加的注释,可以在 SQLite 代码中添加注

  • 我有以下代码: 行:public static void main(String args[}){I得到三个错误:1.令牌“void”的语法错误,@expected 2.令牌的语法错误,classheader的结果相反3.令牌的语法错误,结构放错了 希望你们能帮帮我。 提前道谢。

  • 解决这个错误的其他问题似乎都不适合我。我的问题是: 我的错误消息是:“无法准备语句(1靠近“IF”:语法错误)” 我在博士后工作:http://sqlfiddle.com/#!15/b14ef/2/0,但这在SQLite中不起作用,我需要它同时处理这两种情况。