java - 将程序连接到 SQLite 数据库
问题描述
嘿伙计们,我正在为一个朋友制作一个库存搜索程序,并且在使用 SQLite 时遇到问题,因为我是新手,这是我第一次使用数据库制作东西。我没有任何人可以真正展示我的代码,我只是按照你的管教程和其他东西把它放在一起。如果你们可以检查一下并指出我可能犯的任何明显错误,那就太好了。我已经包含了从教程中获得的代码以及我尝试将数据输入数据库的第一种方法,该方法称为“addVehicles”。
private static Connection con;
private static boolean hasData = false;
public ResultSet displayVehicles() throws ClassNotFoundException, SQLException {
if(con == null) {
getConnection();
}
Statement state = con.createStatement();
ResultSet res = state.executeQuery("SELECT sim, wo, description, oilN, oilB, "
+ "airN, airB, hydN, hydB, fuelN, fuelB, misc FROM vehicles");
return res;
}
private void getConnection() throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:SQLiteVehicles.db");
initialise();
}
private void initialise() throws SQLException {
// TODO Auto-generated method stub
if(!hasData) {
hasData = true;
Statement state = con.createStatement();
ResultSet res = state.executeQuery("SELECT name from sqlite_master WHERE"
+ " type=' table' AND name=' vehicles'");
if(!res.next()) {
System.out.println("Building the Vehicle table with prepopulated values.");
//build table
Statement state2 = con.createStatement();
state2.execute("CREATE TABLE vehicles(sim varchar(100)," + "wo varchar(100)," + "description varchar(500)," +
"oilN varchar(100)," + "oilB varchar(100)," + "airN varchar(100)," + "airB varchar(100)," +
"hydN varchar(100)," + "hydB varchar(100)," + "fuelN varchar(100)," + "fuelB varchar(100),"
+ "misc varchar(1000),");
//insert sample data
PreparedStatement prep = con.prepareStatement("INSERT INTO vehicles "
+ "values(?,?,?,?,?,?,?,?,?,?,?,?);");
prep.setString(1, "101");
prep.setString(2, "00000");
prep.setString(3, "VEHICLE NOT FOUND");
prep.setString(4, "N/A");
prep.setString(5, "N/A");
prep.setString(6, "N/A");
prep.setString(7, "N/A");
prep.setString(8, "N/A");
prep.setString(9, "N/A");
prep.setString(10, "N/A");
prep.setString(11, "N/A");
prep.setString(12, "TEST WORKED");
prep.execute();
}
}
}
public void addVehicle(String sim, String wo, String description,
String oilN, String oilB, String airN, String airB, String hydN,
String hydB, String fuelN, String fuelB, String misc)
throws ClassNotFoundException, SQLException {
if(con == null) {
getConnection();
}
PreparedStatement prep = con.prepareStatement("INSERT INTO vehicles "
+ "values(?,?,?,?,?,?,?,?,?,?,?,?);");
prep.setString(1, sim);
prep.setString(2, wo);
prep.setString(3, description);
prep.setString(4, oilN);
prep.setString(5, oilB);
prep.setString(6, airN);
prep.setString(7, airB);
prep.setString(8, hydN);
prep.setString(9, hydB);
prep.setString(10, fuelN);
prep.setString(11, fuelB);
prep.setString(12, misc);
prep.execute();
}
我收到大量错误消息,例如
Exception in thread "``JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
刚刚遇到一些新错误
java.sql.SQLException:[SQLITE_ERROR] org.sqlite.core.DB.newSQLException(DB.java:890) 处 org.sqlite.core.DB.newSQLException 处的 SQL 错误或缺少数据库(“,”附近:语法错误) (DB.java:901) 在 org.sqlite.core.DB.throwex(DB.java:868) 在 org.sqlite.core.NativeDB.prepare(Native Method) 在 org.sqlite.core.DB.prepare(DB .java:211) 在 org.sqlite.jdbc3.JDBC3Statement.execute(JDBC3Statement.java:60) 在 application.SQLite.initialise(SQLite.java:47) 在 application.SQLite.getConnection(SQLite.java:30) 在 application .SQLite.displayVehicles(SQLite.java:17)
解决方案
带你声明并删除所有“代码”元素并查看它。甚至进入数据库控制台(或其他数据库应用程序)并尝试执行该语句。
创建表车辆(sim varchar(100),wo varchar(100),description varchar(500),oilN varchar(100),oilB varchar(100),airN varchar(100),airB varchar(100),hydN varchar(100) ),hydB varchar(100),fuelN varchar(100),fuelB varchar(100),misc varchar(1000),
立即,我被最后一条语句所吸引,它有一个尾随,
,但还有其他错误。如果我们删除所有“额外的绒毛”并仔细观察......
创建表车辆(...,misc varchar(1000),
你会注意到你缺少括号,)
它应该在语句的末尾
推荐阅读
- assembly - ARM64 - 计算字符串长度时出现分段错误
- linux - 如果 url 返回 404,如何 wget 继续上一个循环?重击
- assembly - 汇编 IA-32:如何将 64 位有符号数除以奇数(存储在 2 个寄存器中)
- angular - 带有 Angular 前端的 ASP.NET Core Web API,使用 Azure AD 进行身份验证/授权
- java - JPA DDL 生成异常
- html - 将模态放入表格单元格
- java - Firestore - 按降序排序
- python - Python 3.7 Tkinter 框架参考不断增加
- angular - Angular 与服务器发送事件
- python - django queryset 聚合计数计数错误的事情