Java 没有这样的表Sqlite JDBC

Java 没有这样的表Sqlite JDBC,java,mysql,sqlite,jdbc,Java,Mysql,Sqlite,Jdbc,伙计们。我面临的问题很奇怪。。 我首先创建一个表,然后尝试将数据放在表上,但不知什么原因,有些事情发生了。上面说 [SQLITE_ERROR] SQL error or missing database (no such table: Name) aa这是我的基本代码 try{ Class.forName("org.sqlite.JDBC"); conni = DriverManager.getConnection("jdb

伙计们。我面临的问题很奇怪。。 我首先创建一个表,然后尝试将数据放在表上,但不知什么原因,有些事情发生了。上面说

[SQLITE_ERROR] SQL error or missing database (no such table: Name)
aa这是我的基本代码

try{
                Class.forName("org.sqlite.JDBC");
                  conni  = DriverManager.getConnection("jdbc:sqlite://C://Users//Asus//Dropbox//TireShop.sqlite");


                  stmt = conni.createStatement();

                  String sql = "CREATE TABLE " + project.getText() + " (Id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , Name TEXT, One TEXT, Two TEXT)";


                  stmt.executeUpdate(sql);
                  stmt.close();
                  conni.close();
            }catch (Exception e){
                System.err.println( e.getClass().getName() + ": " + e.getMessage() );
                  System.exit(0);

            }
            try{
                Class.forName("org.sqlite.JDBC");
                  conni  = DriverManager.getConnection("jdbc:sqlite://C://Users//Asus//Dropbox//TireShop.sqlite");

                  String query1 = "insert into Name (Name) values(?)";
                  PreparedStatement pst = conni.prepareStatement(query1);
                  pst.setString(1, project.getText());
                  pst.execute();
                  pst.close();
                  conni.close();
            }catch(Exception e){
                System.err.println( e.getClass().getName() + ": " + e.getMessage() );
                  System.exit(0);


            }
            try{
                Class.forName("org.sqlite.JDBC");
                  conni  = DriverManager.getConnection("jdbc:sqlite://C://Users//Asus//Dropbox//TireShop.sqlite");

                  String query1 = "insert into " + project.getText() + "(Name, One, Two) values(?,?,?)";
                  PreparedStatement pst = conni.prepareStatement(query1);
                  pst.setString(1, project.getText());
                  pst.setString(2, textField_one.getText());
                  pst.setString(3, textFieldtwo.getText());
                  pst.execute();
                  pst.close();
                  conni.close();
            }catch(Exception e){
                System.err.println( e.getClass().getName() + ": " + e.getMessage() );
                  System.exit(0);
            JOptionPane.showMessageDialog(null, "Thank you");

谢谢你的帮助!我真的能理解。。。我猜这个表根本没有被创建,但它实际上工作过一次。因此,我更加困惑o.o

名称
是一个。将该表重命名为其他名称。

请用
将字段名括起来以转义

String sql = "CREATE TABLE \"" + project.getText() + "\" (\"Id\" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , \"Name\" TEXT, \"One\" TEXT, \"Two\" TEXT)";

 String query1 = "insert into \"Name\" (\"Name\") values(?)";

 String query1 = "insert into \"" + project.getText() + "\" (\"Name\", \"One\", \"Two\") values(?,?,?)";
另外,我假设您已经从代码中的不同点将这些代码片段拼凑在一起

但我建议您在代码中设置一个单一的数据库连接,并在整个应用程序中重用该连接。 大致如下:

public class MyApp {
     public static Connection DB;
     public void initDatabase() {
         try {
             MyApp.DB = DriverManager.getConnection("jdbc:sqlite://C://Users//Asus//Dropbox//TireShop.sqlite");
          }
          catch(Exception ex) {
          }
     }
     public static void main(String args[]) {  
         MyApp app = new MyApp();
         app.initDatabase();
     }
}

which是
project.getText()
的值?在代码中,您同时使用
project.getText()
和字符串“Name”“.为什么?这确实帮了大忙,伙计。非常感谢。当然可以,因为您不再使用保留名称,但这只是一个很好的练习。正如您用制表符或空格标识代码一样,将括号放在相同的位置,您应该始终将字段名封装起来,无论数据库引擎如何。很好,这将有助于防止将来出现许多错误:-)