com.microsoft.sqlserver.jdbc.SQLServerException: '=' 附近有语法错误。求大神指点迷津!

qq_27784145 2015-11-23 04:10:06
public class WorkDAOImpl  implements WorkDAO {

protected Connection con; //数据库连接
protected PreparedStatement pre; //实例
protected ResultSet res; //结果集

public List<CustomerInfo> getAllList( int addTime ) {

List<CustomerInfo> list = new ArrayList<CustomerInfo>();
con = DBCon.getConnection();
try {
String sql="select a.* , b.condition_name from customer_info a ,customer_condition b " +
"where a.condition_id=b.condition_id and a.is_used='1' ";
if(addTime == 0 ){
sql += " select datediff(day,birth_day,getDate())=0";

} else if(addTime != 0 ){
sql += " select datediff(day,birth_day,getDate())>=0 and datediff(day,birth_day,getDate())<='"+addTime+"' ";

}
pre = con.prepareStatement(sql);
res = pre.executeQuery(); //报错内容中提到这行 也不知道为什么
while (res.next()) {
CustomerInfo customerInfo = new CustomerInfo();

customerInfo.setCustomerId(res.getInt("customer_id"));
customerInfo.setCustomerName(res.getString("customer_name"));
customerInfo.setCustomerBirthday(res.getString("birth_day"));
customerInfo.setCustomerMobile(res.getString("customer_mobile"));
customerInfo.setConditionId(res.getInt("condition_id"));
customerInfo.setCustomerCondition(res.getString("condition_name"));
customerInfo.setIsUsed(res.getString("is_used"));


list.add(customerInfo);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBCon.closeAll(con,pre,res);
}
return list;
}
...全文
974 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_27784145 2015-11-23
  • 打赏
  • 举报
回复
引用 6 楼 yanghaimingg 的回复:
[quote=引用 5 楼 yanghaimingg 的回复:] sql += " select datediff(day,birth_day,getDate())=0"; String类型是不能这样的,用StringBuffer拼接完再转成String
错了,好像是可以这样。。。[/quote] 但是这句放在sql server 2008数据库里执行不了,报:无法绑定由多个部分组成的标识符 "a.link_nexttime"。为何??
mtian2020 2015-11-23
  • 打赏
  • 举报
回复
引用 5 楼 yanghaimingg 的回复:
sql += " select datediff(day,birth_day,getDate())=0"; String类型是不能这样的,用StringBuffer拼接完再转成String
错了,好像是可以这样。。。
mtian2020 2015-11-23
  • 打赏
  • 举报
回复
sql += " select datediff(day,birth_day,getDate())=0"; String类型是不能这样的,用StringBuffer拼接完再转成String
qq_27784145 2015-11-23
  • 打赏
  • 举报
回复
那改如何写?sql server的时间间隔查询语句?请教
KIRA_GIRL 2015-11-23
  • 打赏
  • 举报
回复
sql写错了呗,把你最后执行的sql打印出来,放到数据库里试试
sinat_31535993 2015-11-23
  • 打赏
  • 举报
回复
两个select拼在一起是干嘛的?
qq_27784145 2015-11-23
  • 打赏
  • 举报
回复
com.microsoft.sqlserver.jdbc.SQLServerException: '=' 附近有语法错误。
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285)
	at com.sxxy.dao.impl.WorkDAOImpl.getLinkMan(WorkDAOImpl.java:89)
	at com.sxxy.service.impl.WorkServiceImpl.getLinkMan(WorkServiceImpl.java:29)
	at com.sxxy.servlet.work.WorkQueryServlet.doGet(WorkQueryServlet.java:51)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703)
	at java.lang.Thread.run(Thread.java:722)
系统报如上的错误 可以运行程序 但是有错
//附加数据库 sp_attach_db 当使用 sp_attach_db 系统存储过程附加数据库时。 sp_attach_db:将数据库附加到服务器。 语法 sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ] 参数 [@dbname =] 'dbname' 要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 [@filename1 =] 'filename_n' 数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。 参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。 该列表还必须包括数据库分离后所有被移动的文件。 返回代码值:0(成功)或 1(失败) eg:下面的示例将 pubs 中的两个文件附加到当前服务器。 EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' EXEC sp_attach_db @dbname = N'Ty20051029101451aaa', @filename1 = N'd:\5屏幕\Ty20051029101451aaa_data.mdf', @filename2 = N'd:\5屏幕\Ty20051029101451aaa_log.ldf' ---解决问题了 //删除数据库 DROP DATABASE 从Microsoft? SQL Server? 删除一个或多个数据库。删除数据库将删除数据库所使用的数据库文件和磁盘文件。 语法 :DROP DATABASE database_name [ ,...n ] 参数 :database_name 指定要删除的数据库名称。从 master 数据库中执行 sp_helpdb 以查看数据库列表。 eg: exec sp_helpdb database_name exec Drpo DataBase [Ty20051029101451aaa] //分离数据库 可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。 sp_detach_db Archive GO CREATE DATABASE Archive ON PRIMARY (FILENAME = 'c:\program files\microsoft sqlserver\mssql\data\archdat1.mdf') FOR ATTACH GO //显示当前数据库信息 --select * from Master..sysDatabases //新建---不行啊 CREATE DATABASE TestOA ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE TestOA From disk='C:\Documents and Settings\Administrator\桌面\帐套\data\Template.Dat' ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE exec sp_detach_db Km20051030011601 --分离数据库 exec sp_attach_single_file_db km20051030011601,'D:\TestDatabase\Km20051030011601.mdf'--只附加.mdf文件

81,116

社区成员

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

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