sql 与java之间的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 与java之间的问题相关的知识,希望对你有一定的参考价值。
public static List select_bn(String name1,String date,String name2/*,int money*/)
List list=new ArrayList();
String sql="select * from borrowinfo where 1=1";
PreparedStatement pstam=null;
ResultSet rs=null;
try
if(name1!=null)
sql=sql+"and"+name1;
if(date!=null)
sql=sql+"and"+date;
if(name2!=null)
sql=sql+"and"+name2;
pstam=con.prepareStatement(sql);
pstam.setString(1, name1);
pstam.setString(2, date);
pstam.setString(3, name2);
// pstam.setInt(4, money);
// if(String.valueOf(money)!=null)
// sql=sql+"and"+money;
//
rs = pstam.executeQuery();
while(rs.next())
borrowinfo bb=new borrowinfo();
bb.setId(rs.getInt("id"));
bb.setBorrowname(rs.getString("borrownanme"));
bb.setLendname(rs.getString("lendname"));
bb.setHowmoney(rs.getInt("howmoney"));
bb.setYihuanmoney(rs.getInt("yihuanmoney"));
bb.setDate(rs.getString("date"));
list.add(bb);
catch (SQLException e)
System.out.println("查询出错了。。。。。"+e.getMessage());
return list;
出现查询出错了。。。。。索引 1 超出范围。 的错误,没分了不好意思
表里面只有borrownanme,lendname,howmoney,yihuanmoney,date这些列
String sql="select * from borrowinfo where 1=1";
sql=sql+"and"+name1;
比方说你的name1为"张三";
出来的结果为"select * from borrowinfo where 1=1 and 张三";
这就不是sql,并且没有预编译,哪有参数设到SQL中呢
应该是这样的"select * from borrowinfo where 1=1 and borrownanme =?";追问
现在我已经把那个改过来了,出现了新的问题:查询出错了。。。。。对象名 \'borrowinfo\' 无效。
您知道是为什么吗?
我之前也是这样写的,这次出错了
去数据库看看有没有这张表。用PreparedStatement的时候要写数据库的表名称,不能用HIBERNATE的对象HQL语句。
参考技术A pstam=con.prepareStatement(sql);pstam.setString(1, name1);
pstam.setString(2, date);
pstam.setString(3, name2);
这几行,SQL中都没有参数 参考技术B 楼上说的很清楚了,你的sql语句写的不对,应该是name1=? and name2=? and date=?
这样你才可以用下面的set语句将那些问号替换成你的变量值,不然没有可替换的占位符当然会报超出范围的错误。 参考技术C sql=sql+"and"+name1; 最好把and 前后加空格 sql=sql+" and "+name1;
在 LocalDate 和 sql.Date 之间转换 [重复]
【中文标题】在 LocalDate 和 sql.Date 之间转换 [重复]【英文标题】:Convert between LocalDate and sql.Date [duplicate] 【发布时间】:2015-06-27 08:29:59 【问题描述】:在 Java 8(或更高版本)中,在 java.sql.Date
和 LocalDate
(双向)之间转换的正确方法是什么?
【问题讨论】:
问题本身的措辞对于那些也/专门寻找从 java.sql.Date 转换为 java.time.LocalDate 的人来说是好的,即使其他问题有类似的答案。 【参考方案1】:java.sql.Date
的 Java 8 版本(及更高版本)内置了对LocalDate
的支持,包括toLocalDate
和valueOf(LocalDate)
。
要将LocalDate
转换为java.sql.Date
,您可以使用
java.sql.Date.valueOf( localDate );
以及从java.sql.Date
转换为LocalDate
:
sqlDate.toLocalDate();
时区:
LocalDate
类型不存储时区信息,而 java.sql.Date
存储。因此,使用上述转换时,结果取决于系统的默认时区(如 cmets 中所指出的)。
如果不想依赖默认时区,可以使用如下转换:
Date now = new Date();
LocalDate current = now.toInstant()
.atZone(ZoneId.systemDefault()) // Specify the correct timezone
.toLocalDate();
【讨论】:
请注意,这使用系统默认时区来解释日期,这可能是也可能不是您想要的。通常最好明确指定时区! @marc82ch 你是对的。 The default time zone affects the conversion, as proved by this question。您可以在转换时使用 yyyy-mm-dd 格式:java.time.LocalDate.parse(sqlDate.toString())
@maja,您可以相应地更新您的答案吗?
替代方法不正确,因为 java.sql.Date.toInstant() 会抛出 UnsupportedOperationException(在 Java 8 中)
UnsupportedOperationException 在 java.util.Date 中抛出,而不是在 java.sql.Date 中抛出,为避免此异常,请在 sqlDate.toLocalDate() 之前使用 if (sqlDate instanceof java.sql.Date),如果日期是 java.util.Date 使用 sqlDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
在这些 java.sql.Date 方法中不知何故对我进行了不需要的时区转换 - 我输入了今天的 LocalDate,并在数据库中最终得到了昨天的日期值跨度>
以上是关于sql 与java之间的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 JOOQ 在 java.sql.Timestamp 和 java.time.Instant 之间转换时遇到问题
在 LocalDate 和 sql.Date 之间转换 [重复]
在 java.util.Date 或 java.sql.Date 之间进行选择