我正在尝试使用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它说语法是错误的,但我找不到错误。我曾为类似的问题寻找答案,但没有解决我的问题。有人能告诉我有什么问题吗?提前感谢!
发布于 2017-12-28 21:00:20
正如@Andreas已经指出的那样,没有用于CREATE DATABASE的SQLite SQL语句。要创建一个新的SQLite数据库,只需要连接到一个数据库,并且它是自动创建的(但是,您需要确保D:/sqlite/路径已经存在于本地文件系统中)。
下面的代码应该在位于本地文件系统驱动器MyNewDatabase.sqlite D根目录下的文件夹sqlite中创建一个名为SQLite的空(无表)sqlite数据库:
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语句,如果需要的话,您可以通过相同的连接来实现这一点。
发布于 2017-12-28 20:12:13
数据库存在,它已经被连接,即数据库是连接,基本上是文件。因此,没有用于CREATE DATABASE的SQL。
在数据库中,您通常会创建表(或者其他组件)。
例如,CREATE TABLE mytable (mycolumn TEXT, myothercolumn INTEGER)将创建一个名为mytable的表,其中包含2列mycolumn和my差列(前者用文本的列类型定义,后者用整数的列类型定义)。
因此,如果你要改变:-
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)");每次运行时,都会将新行添加到表名mytable中。
https://stackoverflow.com/questions/48013730
复制相似问题