首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[SQLITE_ERROR] SQL错误或缺少数据库(靠近“数据库”:语法错误)

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

Stack Overflow用户
提问于 2017-12-28 20:07:19
回答 2查看 10.1K关注 0票数 0

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

代码语言:javascript
复制
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();
    }

}

当我运行该项目时,我得到以下输出:

代码语言:javascript
复制
Connection Established
[SQLITE_ERROR] SQL error or missing database (near "DATABASE": syntax error)

Process finished with exit code 0

它说语法是错误的,但我找不到错误。我曾为类似的问题寻找答案,但没有解决我的问题。有人能告诉我有什么问题吗?提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-28 21:00:20

正如@Andreas已经指出的那样,没有用于CREATE DATABASE的SQLite SQL语句。要创建一个新的SQLite数据库,只需要连接到一个数据库,并且它是自动创建的(但是,您需要确保D:/sqlite/路径已经存在于本地文件系统中)。

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

代码语言:javascript
复制
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语句,如果需要的话,您可以通过相同的连接来实现这一点。

票数 1
EN

Stack Overflow用户

发布于 2017-12-28 20:12:13

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

在数据库中,您通常会创建表(或者其他组件)。

例如,CREATE TABLE mytable (mycolumn TEXT, myothercolumn INTEGER)将创建一个名为mytable的表,其中包含2列mycolumn和my差列(前者用文本的列类型定义,后者用整数的列类型定义)。

因此,如果你要改变:-

代码语言:javascript
复制
     statement.execute("CREATE DATABASE test");

致:-

代码语言:javascript
复制
    statement.execute("CREATE TABLE mytable (mycolumn TEXT, myothercolumn INTEGER)");
  • 注意,您只想这样做一次,否则它将失败,因为表已经存在,所以您可以使用CREATE TABLE IF NOT EXISTS mytable (mycolumn TEXT, myothercolumn INTEGER),这取决于您的需求。

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

也许那就试试吧

代码语言:javascript
复制
    statement.execute("INSERT INTO mytable VALUES('fred',100)");

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48013730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档