[SQLITE_ERROR] SQL error or missing database (near "update": syntax error)

Certone_qrb 2015-04-18 09:15:16
用jdbc连接数据库,访问修改其中数据,有点问题
1.数据库路径问题
30.conn=DriverManager.getConnection("jdbc:sqlite:d:/Iotek/sqlite/company.db");

这个数据库路径是否有问题?你们一般怎么写路径的,因为有几个地方路径用的正反斜线都不一样,我有点晕。
2.sql的问题
35.String str="delete from employee where name='张三'"
+ "update employee set gender='男' where name='李四'"
+ "select * from employee";

需要对数据库执行多条sql语句该怎么写?这样写应该不对的吧。
3.将结果集中的属性值赋给Employee对象的问题
42.employee=new Employee(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4).charAt(0),rs.getDouble(5),rs.getString(6));

数据库里面有个属性gender是char类型的,网上说提取的话用setString提取,因为数据库里面的char,varchar等同于String,然后我set了就会报错,说参数不匹配,我就加了个charAt(0),但是总感觉有问题。

报错信息:
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near "update": syntax error)
at org.sqlite.core.DB.newSQLException(DB.java:890)
at org.sqlite.core.DB.newSQLException(DB.java:901)
at org.sqlite.core.DB.throwex(DB.java:868)
at org.sqlite.core.NativeDB.prepare(Native Method)
at org.sqlite.core.DB.prepare(DB.java:211)
at org.sqlite.jdbc3.JDBC3Statement.executeQuery(JDBC3Statement.java:81)
at JDBCDemo.DBTest.fetchData(DBTest.java:39)
at JDBCDemo.DBTest.main(DBTest.java:14)

完整代码:


package JDBCDemo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class DBTest {

public static void main(String[] args) {
List<Employee> list=fetchData();
for(Employee e:list){
System.out.println(e);
}
}
//执行SQL语句更改DB数据,返回更改后数据
private static List<Employee> fetchData() {
//新建一个list对象用于存放Employee对象(对应DB中每条数据)
List<Employee> list=new ArrayList<Employee>();
Employee employee=null;
Connection conn=null;
try {
//1.加载数据库驱动程序
//返回与带有给定字符串名的类或接口相关联的 Class 对象。
Class.forName("org.sqlite.JDBC");
//2.建立连接
conn=DriverManager.getConnection("jdbc:sqlite:d:/Iotek/sqlite/company.db");
//3.由Connection对象的createStatement方法创建
// Statement对象用于发送简单的SQL语句
Statement sm=conn.createStatement();
//4.书写SQL语句
String str="delete from employee where name='张三'"
+ "update employee set gender='男' where name='李四'"
+ "select * from employee";
//5.执行SQL语句,返回结果集
ResultSet rs=sm.executeQuery(str);
//6.将结果集中的属性值赋给Employee对象
while(rs.next()){
employee=new Employee(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4).charAt(0),rs.getDouble(5),rs.getString(6));
list.add(employee);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
finally{
//关闭连接
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}

}
...全文
4638 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
昆卡卡 2015-04-19
  • 打赏
  • 举报
回复
引用 3 楼 Sartre_Q 的回复:
[quote=引用 1 楼 yyy269954107 的回复:] 1.路径写法应该没问题,如果有问题的话可以试下直接把company.db放到项目根目录下 2.三句sql拆开,一句一句的执行,不要放在一起,至于jdbc的增删改查楼主可以查下,网上很多 3.Employee这个对象里面出问题的参数楼主定义的是char类型的?你用String设置肯定会出错啊,试试rs.getChar(4)
rs.getChar(4)没有这个方法![/quote] sorry,我想当然了,你或者把那个字段改成String类型的,如果charAt(0)能满足你的需求,就继续用
Certone_qrb 2015-04-19
  • 打赏
  • 举报
回复
引用 1 楼 yyy269954107 的回复:
1.路径写法应该没问题,如果有问题的话可以试下直接把company.db放到项目根目录下 2.三句sql拆开,一句一句的执行,不要放在一起,至于jdbc的增删改查楼主可以查下,网上很多 3.Employee这个对象里面出问题的参数楼主定义的是char类型的?你用String设置肯定会出错啊,试试rs.getChar(4)
rs.getChar(4)没有这个方法!
你好不开心 2015-04-19
  • 打赏
  • 举报
回复
1, 使用相对路径,如:jdbc:sqlite:aaa/app.db这样,aaa是根目录下的子目录 2, 同上 3, 如果你数据库中的字段是varchar(1),那用charAt(0)没什么问题
昆卡卡 2015-04-18
  • 打赏
  • 举报
回复
1.路径写法应该没问题,如果有问题的话可以试下直接把company.db放到项目根目录下 2.三句sql拆开,一句一句的执行,不要放在一起,至于jdbc的增删改查楼主可以查下,网上很多 3.Employee这个对象里面出问题的参数楼主定义的是char类型的?你用String设置肯定会出错啊,试试rs.getChar(4)

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧