" [SQLITE_ERROR] SQL错误或缺少数据库(接近" DATABASE":语法错误)"

时间:2017-12-28 20:07:20

标签: java sql sqlite jdbc

我正在尝试使用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

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

2 个答案:

答案 0 :(得分:1)

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

在数据库内部,您通常会创建表格(可能还有其他组件)。

e.g。 CREATE TABLE mytable (mycolumn TEXT, myothercolumn INTEGER)会创建一个名为 mytable 的表,其中包含2列 mycolumn myothercolumn (前者使用列类型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中。

答案 1 :(得分:1)

正如@Andreas已经说过的那样,SQLite没有CREATE DATABASE SQL语句。要创建一个新的SQLite数据库,您只需要建立一个新的SQLite数据库,然后自动创建它(但您需要确保 local中已存在 D:/ sqlite / 路径文件系统)。

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

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语句,如果需要,您可以通过相同的连接执行此操作。