public class SQLiteJDBCDriverConnection {
此块用于连接sqlite数据库并创建具有三列的“仓库”表。
public static Connection connect() {
Connection conn = null;
try {
// db parameters
String url = "jdbc:sqlite:chinook.db";
String sql = "CREATE TABLE IF NOT EXISTS warehouses (\n"
+ " id integer PRIMARY KEY,\n"
+ " name text NOT NULL,\n"
+ " capacity real\n"
+ ")";
// create a connection to the database
conn = DriverManager.getConnection(url);
//Create table
Statement state = conn.createStatement();
state.executeUpdate(sql);
System.out.println("Connection to SQLite has been established.");
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
return conn;
}
此块用于创建具有三个参数的对象,以便为三列插入新记录。
public static void newItem(int id, String name, int capacity) {
Connection con = connect();
PreparedStatement state;
String sql = "INSERT INTO warehouses(id,name,capacity) VALUES(?,?,?)";
try {
state = con.prepareStatement(sql);
state.executeUpdate();
}catch(Exception e) {
}
}
此块执行newItem函数。
public static void main(String[] args) {
newItem(4009,"plywood",5000);
}
}
答案 0 :(得分:1)
您没有为SQL查询设置参数。
在state = con.prepareStatement(sql);
之后,您需要使用state.setXXX(index, value);
state = con.prepareStatement(sql);
state.setInt(1, id);
state.setString(2, name);
state.setInt(3, capacity);
state.executeUpdate();
并且如注释中所述,您至少需要将日志记录添加到catch
块中。连接和prepareStatement对象应该在不再需要时关闭。
编辑
在您的connect
方法中,您在finally
块中关闭连接对象并返回 closed 连接。然后尝试在newItem()
方法中使用封闭连接。