繁体   English   中英

“ [SQLITE_ERROR] SQL错误或缺少数据库(“ DATABASE”附近:语法错误)”

[英]“[SQLITE_ERROR] SQL error or missing database (near ”DATABASE“: syntax error)”

我正在尝试使用JDBC在文件夹D:\\ sqlite中创建一个名为test的新数据库文件,如下所示:

import java.sql.*;

public class Class1 {

    private static void createNewDataBase(){

        String url = "jdbc:sqlite:D:sqlite/";
        Connection conn = null;
        Statement statement = null;

        try{

            conn = DriverManager.getConnection(url);
            System.out.println("Connection Established");
            statement = conn.createStatement();

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }

        try {
            statement.execute("CREATE DATABASE test");

        } catch (SQLException e) {
            System.out.println(e.getMessage());

        } finally{
            try{
                if(statement != null)
                    statement.close();

            }catch(SQLException e){
                System.out.println(e.getMessage());
            }

            try{
                if(conn != null)
                    conn.close();

            }catch(SQLException e){
                System.out.println(e.getMessage());
            }
        }
    }

    public static void main(String[] args){
        createNewDataBase();
    }

}

运行项目时,将得到以下输出:

Connection Established
[SQLITE_ERROR] SQL error or missing database (near "DATABASE": syntax error)

Process finished with exit code 0

它说语法是错误的,但我找不到错误。 我一直在寻找类似问题的答案,但没有一个能解决我的问题。 谁能告诉我这是什么问题? 提前致谢!

数据库存在,它已经被连接,即数据库就是连接,基本上就是文件。 因此,没有用于CREATE DATABASE SQL。

在数据库内部,通常会创建表(也许还有其他组件)。

例如CREATE TABLE mytable (mycolumn TEXT, myothercolumn INTEGER)将创建一个名为mytable的表,该表包含2列mycolumnmyothercolumn (前者定义为TEXT的列类型,后者定义为INTEGER的列类型)。

因此,如果您要更改:-

     statement.execute("CREATE DATABASE test");

至 :-

    statement.execute("CREATE TABLE mytable (mycolumn TEXT, myothercolumn INTEGER)");
  • 请注意,您只希望执行一次此操作,否则将因为表已经存在而失败,因此您可以使用CREATE TABLE IF NOT EXISTS mytable (mycolumn TEXT, myothercolumn INTEGER) ,这取决于您的要求。

您可能会发现它会起作用。 显然,您将需要做其他事情,例如添加一些数据,因为表将为空。

也许然后尝试

    statement.execute("INSERT INTO mytable VALUES('fred',100)");

每次运行时,都会将新的ROW添加到表名mytable中。

如@Andreas所述,SQLite没有CREATE DATABASE SQL语句。 要创建一个新的SQLite数据库,您只需要建立一个连接并自动创建一个连接即可(但是,您需要确保本地文件系统中已经存在D:/ sqlite /路径)。

以下代码应在本地文件系统驱动器D的根目录下的sqlite文件夹中创建一个名为MyNewDatabase.sqlite (无表)SQLite数据库:

String dbPath = "D:/sqlite/MyNewDatabase.sqlite";
Connection conn = null;
try {
   Class.forName("org.sqlite.JDBC");
   conn = DriverManager.getConnection("jdbc:sqlite:" + dbPath;);
}
catch (ClassNotFoundException ex) { 
    ex.printStackTrace();
}
catch (SQLException ex) { 
    ex.printStackTrace();
}
finally {
    try { 
        if (conn != null) { 
            conn.close(); 
        } 
    } 
    catch (SQLException e) { e.printStackTrace(); }
}

现在,您需要为新数据库创建一个或多个表以使其有用。 SQLite确实接受CREATE TABLE SQL语句,如果需要,您可以通过相同的连接来完成此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM