我正在尝试使用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
它说语法错误但我无法找到错误。我已经找到了类似问题的答案,但没有一个能解决我的问题。谁能告诉我这是什么问题?提前谢谢!
答案 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语句,如果需要,您可以通过相同的连接执行此操作。