Java和SQLite [SQLITE_ERROR] SQL错误或缺少数据库()

时间:2014-04-18 15:26:10

标签: java sql sqlite

我尝试用Java编写SQLite,这是第一次一起使用,这里是代码:

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

/**
 *
 * @author Alessio
 */
public class DB {

    public static void main(String[] args){
        Connection c = null;
        Statement stmt = null;
        try{
            Class.forName("org.sqlite.JDBC");
            c = DriverManager.getConnection("jdbc:sqlite:test.db");
            stmt = c.createStatement();
            String sql = "CREATE TABLE COMPANY " +
                   "(ID INT PRIMARY KEY     NOT NULL," +
                   " NAME           TEXT    NOT NULL, " + 
                   " AGE            INT     NOT NULL, " + 
                   " ADDRESS        CHAR(50), " + 
                   " SALARY         REAL)"; 
            stmt.executeUpdate(sql);
            stmt.close();
            c.close();
        }
        catch(Exception e){
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
            System.exit(0);
        }
        System.out.println("Database opened succesfully!!!");
    }

}

当我第一次运行代码时出现任何错误,我在控制台中的结果是:

run:
Database opened succesfully!!!
BUILD SUCCESSFUL (total time: 1 second)

而第二次我

run:
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database ()
BUILD SUCCESSFUL (total time: 1 second)

我做错了什么?

5 个答案:

答案 0 :(得分:2)

如果您正在执行完全相同的代码,那么我想问题是您要创建两次相同的表。

第一次进展顺利,因为数据库中没有这样的表。它第二次失败,因为已经有一个名为COMPANY的完全相同的表。

答案 1 :(得分:2)

你的问题不是那么详细。 为了恢复正常状态你需要做些什么?你必须删除你的DB文件吗?

无论如何,我会说错误是由数据库中已存在的表引起的。 如果您想尝试简单的查询以进行调试,请尝试

SELECT date('now');

或不依赖于DB结构的东西。 尝试通用查询或检查表是否存在并在重新创建之前删除它。

答案 2 :(得分:0)

首先,您的表格名称公司已存在 所以 您不能使用与test

相同的数据库创建相同的表名(COMPANY)

和 第二,你可以写出正确或完整的getconnection网址,如

Connection con = null;
Class.forName("org.sqlite.JDBC");
//getConnection(String url)
con = DriverManager.getConnection("jdbc:sqlite:C:\\Documents and Settings\\demo\\Test_demo.db");
        //SQL error or missing database 
System.out.println("Operation done successfully");

答案 3 :(得分:0)

我认为您应该通过查看代码来回答这个问题。您正在创建启动时的表,并且您再次运行相同的查询两次。它必然会发生。您可以删除表并重新创建或检查表它存在然后添加。

其他情况:如果您的连接字符串错误,也会发生此错误。指向SQLite数据库文件的URL。我建议您将其放在资源文件夹中并访问如下  public static String connectionString =“jdbc:sqlite :: resource:localdata.db”;

答案 4 :(得分:0)

由于SQL每次运行都会创建确切的表而导致的错误。哪个不符合最佳SQL惯例。

在您的SQL查询中,更改

"CREATE TABLE COMPANY " +
       "(ID INT PRIMARY KEY     NOT NULL," +
        " NAME           TEXT    NOT NULL, " + 
        " AGE            INT     NOT NULL, " + 
        " ADDRESS        CHAR(50), " + 
        " SALARY         REAL)";

to

"CREATE TABLE COMPANY IF NOT EXIST" +
        "(ID INT PRIMARY KEY     NOT NULL," +
        " NAME           TEXT    NOT NULL, " + 
        " AGE            INT     NOT NULL, " + 
        " ADDRESS        CHAR(50), " + 
        " SALARY         REAL)";

IF NOT EXIST语句检查表是否存在(如果不存在),它将创建一个新表,否则将跳过创建表。