我尝试用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)
我做错了什么?
答案 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语句检查表是否存在(如果不存在),它将创建一个新表,否则将跳过创建表。