JDBC PreparedStatement Like參數(shù)報(bào)錯(cuò)解決方案
由于我們的項(xiàng)目不大,所以剛開(kāi)始決定時(shí)我為了省事想用SSH,可是后來(lái)覺(jué)得只有Struts2好了,后來(lái)的查詢(xún)等數(shù)據(jù)庫(kù)操作我自己寫(xiě)方法不行了嘛!
剛才寫(xiě)一個(gè)公共查詢(xún)的方法,在增加參數(shù)時(shí)出了點(diǎn)錯(cuò)誤,就是使用模糊查詢(xún)時(shí)犯暈了。
我寫(xiě)的方法如下:
/**
* @說(shuō)明 執(zhí)行一條查詢(xún)SQL語(yǔ)句,可以帶參數(shù)
*/
public static List<Object[]> excuteQuery(String sql, Object[] objs) {
Connection conn = null;
PreparedStatement psta = null;
ResultSet rs = null;
List<Object[]> iResult = null;
Object[] objArr = null;
try {
conn = getConn(); // 得到鏈接
PreparedStatement state = conn.prepareStatement(sql);
if(null != objs){
for (int i = 0; i < objs.length; i++) {
state.setObject(i + 1, objs[i]);
}
}
ResultSet resultSet = state.executeQuery(); // 執(zhí)行查詢(xún),返回結(jié)果接集合
iResult = new ArrayList<Object[]>();
int count = resultSet.getMetaData().getColumnCount(); // 一共有多少列數(shù)據(jù)
while (resultSet.next()) {
objArr = new Object[count];
for (int i = 1; i <= count; i++) {
objArr[i - 1] = resultSet.getObject(i); // 增加到返回的集合中
}
iResult.add(objArr);
}
} catch (Exception e) {
e.printStackTrace();
iResult = null;
} finally {
try {
if (rs != null) {
rs.close();
}
if (psta != null) {
psta.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e2) {
}
}
return iResult;
}
后來(lái)我輸入這樣的一個(gè)參數(shù)進(jìn)行查詢(xún):
public static void main(String[] args) {
Object[] para = new Object[]{"c"};
List<Object[]> list = excuteQuery("select * from s_user t where t.userName like '%?%'",para);
for (Object[] o : list) {
for (Object ob : o) {
System.out.print(ob + "-");
}
System.out.println();
}
}
結(jié)果報(bào)錯(cuò)如下:
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3279) at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3263) at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4087) at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3513) at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166) at com.nms.common.db.ConnectionManager.excuteQuery(ConnectionManager.java:86) at com.nms.common.db.ConnectionManager.main(ConnectionManager.java:20) Exception in thread "main" java.lang.NullPointerException at com.nms.common.db.ConnectionManager.main(ConnectionManager.java:21)
后來(lái)才知道,模糊查詢(xún)時(shí)要這樣寫(xiě):
public static void main(String[] args) {
Object[] para = new Object[]{"%c%"};
List<Object[]> list = excuteQuery("select * from s_user t where t.userName like ?",para);
for (Object[] o : list) {
for (Object ob : o) {
System.out.print(ob + "-");
}
System.out.println();
}
}
就這么簡(jiǎn)單,閑話(huà)不說(shuō)了!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JDBC PreparedStatement Like參數(shù)報(bào)錯(cuò)解決方案
這篇文章主要介紹了JDBC PreparedStatement Like參數(shù)報(bào)錯(cuò)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
SpringBoot @Import與@Conditional注解使用詳解
在了解spring boot自動(dòng)配置原理前,再來(lái)了解下兩個(gè)注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿(mǎn)足條件給容器注冊(cè)bean2022-10-10
Spring Date jpa 獲取最新一條數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了Spring Date jpa 獲取最新一條數(shù)據(jù)的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
java中instanceof和getClass()的區(qū)別分析
本篇文章介紹了,在java中instanceof和getClass()的區(qū)別分析。需要的朋友參考下2013-04-04
springboot 中 inputStream 神秘消失之謎(終破)
這篇文章主要介紹了springboot 中 inputStream 神秘消失之謎,為了能夠把這個(gè)問(wèn)題說(shuō)明,我們首先需要從簡(jiǎn)單的http調(diào)用說(shuō)起,通過(guò)設(shè)置body等一些操作,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2021-08-08

