`
cuisuqiang
  • 浏览: 3956282 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3666810
社区版块
存档分类
最新评论

JDBC中PreparedStatement中Like后面的参数

阅读更多

好久没发博客,因为解决一些技术问题后要做业务开发。

欢迎大家访问我的博客来和我交流:http://cuisuqiang.iteye.com/

可是最近麻烦又来了,在还没有彻底结束上一个之前,领导把我安排到了新的岗位,我那个郁闷啊。

 

由于我们的项目不大,所以刚开始决定时我为了省事想用SSH,可是后来觉得只有Struts2好了,后来的查询等数据库操作我自己写方法不行了嘛!

刚才写一个公共查询的方法,在增加参数时出了点错误,就是使用模糊查询时犯晕了。

我写的方法如下:

/**
 * @说明 执行一条查询SQL语句,可以带参数
 */
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(); // 执行查询,返回结果接集合
		iResult = new ArrayList<Object[]>();
		int count = resultSet.getMetaData().getColumnCount(); // 一共有多少列数据
		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;
}

 

后来我输入这样的一个参数进行查询:

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();
	}
}

 

结果报错如下:

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)

 

后来才知道,模糊查询时要这样写:

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();
	}
}

 

就这么简单,闲话不说了!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

4
0
分享到:
评论
2 楼 cuisuqiang 2012-04-23  
lsp1988 写道
话说为什么不需要%呢

不是不需要,是在参数里面增加,格式是这样的:
Object[] para = new Object[]{"%c%"};
1 楼 lsp1988 2012-04-22  
话说为什么不需要%呢

相关推荐

    各种数据库的jdbc(mysql,orcal ,derby,hive,postgresql,monetdb-jdbc)

    JDBC(Java Database Connectivity)是Java编程语言中用于与关系型数据库进行交互的一套标准API。它是Java平台的标准,使得开发者能够用Java语言编写数据库应用程序,而无需关注底层数据库的具体实现。下面将详细...

    第24讲 JDBC编程2.ppt

    在Java的JDBC编程中,PreparedStatement是用于与数据库交互的重要组件,它是在JDBC中处理SQL语句的一种高效且安全的方式。本讲主要探讨PreparedStatement的使用及其优势,以及CallableStatement和数据库事务的相关...

    Stringbuffer JDBC 模糊查询

    在`JDBC`中,我们通常使用`PreparedStatement`来执行SQL语句,包括模糊查询。模糊查询通常涉及到SQL的`LIKE`关键字,配合通配符`%`来查找部分匹配的数据。`PreparedStatement`允许我们预编译SQL语句,提高执行效率并...

    利用JDBC的图书馆管理系统

    确保正确地配置数据库驱动,如Microsoft SQL Server的JDBC驱动(mssql-jdbc),并将其添加到项目的类路径中。 接下来,系统的核心部分是数据库设计。一个基本的图书馆管理系统通常包含以下表:图书信息(book)、...

    hive1.10jdbc包

    Hive是大数据处理领域的一个重要组件,主要用于结构化数据的查询和分析,它构建在Hadoop之上,提供了SQL-like的查询语言HQL(Hive Query Language)。Hive1.10是Hive的一个版本,其主要功能是为大规模数据集提供数据...

    JAVA—JDBC数据库查询小程序

    在`PreparedStatement`中,可以设置参数来实现模糊查询。 ```java String searchKeyword = "part"; pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE column LIKE ?"); pstmt.setString(1, "%" + ...

    电话本管理系统jdbc

    3. **添加功能**:在电话本中添加联系人信息时,通常会创建一个PreparedStatement对象,设置SQL的占位符参数(如?),然后绑定用户输入的数据。执行SQL的INSERT语句后,新记录将被添加到数据库中。 4. **删除功能**...

    jdbc项目.zip

    在项目中,可能使用了`LIKE`关键字配合通配符(如 `%` 和 `_`)来实现对用户输入的关键词进行模糊匹配,从而在数据库中找到匹配的记录。 7. **异常处理**:在JDBC编程中,正确处理数据库操作可能出现的异常至关重要...

    jdbc连接 ldap jar 包

    例如,你可以编写Java代码,创建一个JDBC连接,然后执行SQL-like的查询来查找 LDAP 目录中的用户信息。这对于那些已经熟悉SQL语法的开发者来说,大大降低了学习和使用LDAP的门槛。 以下是使用JDBC LDAP的基本步骤:...

    Cassandra JDBC Driver 0.8.2

    在实际应用中,Cassandra JDBC Driver 可用于构建数据迁移工具、数据分析应用、报表系统或者任何需要与 Cassandra 数据库交互的 Java 应用。其易用性和广泛的支持使得开发人员可以更轻松地将 Cassandra 集成到他们的...

    jdbc实现动态查询与分页查询的结合

    在Java的数据库编程中,JDBC(Java Database Connectivity)是一个重要的接口,用于连接Java应用程序和各种类型的数据库。本文将深入探讨如何使用JDBC实现动态查询和分页查询的结合,这对于开发人员来说是一项基础但...

    jdbc快速入门.pdf

    Java Database Connectivity (JDBC) 是Java编程语言中用于与各种关系型数据库进行交互的一种标准接口。由Sun Microsystems(现已被Oracle公司收购)定义,它的核心是定义了一套规范,允许开发者通过Java代码来操作...

    hive_jdbc_2.6.1.1001

    在实际开发中,开发者通常会将Hive JDBC驱动添加到项目的类路径中,然后通过`DriverManager.getConnection()`方法建立到Hive的连接,并通过`Statement`或`PreparedStatement`对象执行SQL命令。此外,为了优化性能,...

    jdbc 通过impala 连接hive库

    Hive提供了一个SQL-like接口来查询存储在Hadoop中的大数据集,而Impala则是一个高性能、实时查询的系统,设计用于处理大规模数据集。当需要从Java应用程序或者Web应用中访问Hive的数据时,可以通过JDBC(Java ...

    JDBC+struts1模糊查询分页

    在Java Web开发中,JDBC(Java Database Connectivity)和Struts1是两个非常重要的技术,它们分别用于数据库操作和MVC(Model-View-Controller)框架的实现。本篇文章将详细探讨如何结合JDBC和Struts1实现模糊查询与...

    JDBC和mysql

    - 步骤3: 创建 PreparedStatement 对象。 - 步骤4: 设置参数值。 - 步骤5: 执行更新操作。 - 步骤6: 关闭资源。 通过以上介绍,我们不仅了解了 MySQL 数据库的基础操作,还学习了如何使用 JDBC 进行数据库连接...

    JSP和JDBC分页代码

    ### JSP与JDBC在网页分页中的应用详解 #### 核心概念解析: **JSP(JavaServer Pages)**:是一种动态网页技术标准,它将动态生成的HTML页面发送到客户端,允许开发者将表现层(HTML)与业务逻辑层(Java)分离,...

    jdbc访问hive的jar包

    在大数据处理领域,Hive是Apache Hadoop生态系统中的一个数据仓库工具,允许用户通过SQL-like语句进行数据查询、分析和管理大规模数据。JDBC(Java Database Connectivity)是Java编程语言中用来规范客户端程序如何...

    JDBC部分 精华总结

    如果要执行参数化的SQL语句,则可以使用`PreparedStatement`。例如: ```java Statement stmt = conn.createStatement(); ``` 4. **执行查询或DML语句 (Execute a Query or DML Statement)** 使用`Statement`...

    数据库+jdbc.docx

    数据库和Java JDBC(Java Database Connectivity)是编程领域中与数据管理紧密相关的重要概念。本文将深入探讨SQL语言、数据库操作以及JDBC连接数据库的基本知识。 SQL(Structured Query Language),即结构化查询...

Global site tag (gtag.js) - Google Analytics