好久没发博客,因为解决一些技术问题后要做业务开发。
欢迎大家访问我的博客来和我交流: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
相关推荐
JDBC(Java Database Connectivity)是Java编程语言中用于与关系型数据库进行交互的一套标准API。它是Java平台的标准,使得开发者能够用Java语言编写数据库应用程序,而无需关注底层数据库的具体实现。下面将详细...
在Java的JDBC编程中,PreparedStatement是用于与数据库交互的重要组件,它是在JDBC中处理SQL语句的一种高效且安全的方式。本讲主要探讨PreparedStatement的使用及其优势,以及CallableStatement和数据库事务的相关...
在`JDBC`中,我们通常使用`PreparedStatement`来执行SQL语句,包括模糊查询。模糊查询通常涉及到SQL的`LIKE`关键字,配合通配符`%`来查找部分匹配的数据。`PreparedStatement`允许我们预编译SQL语句,提高执行效率并...
确保正确地配置数据库驱动,如Microsoft SQL Server的JDBC驱动(mssql-jdbc),并将其添加到项目的类路径中。 接下来,系统的核心部分是数据库设计。一个基本的图书馆管理系统通常包含以下表:图书信息(book)、...
Hive是大数据处理领域的一个重要组件,主要用于结构化数据的查询和分析,它构建在Hadoop之上,提供了SQL-like的查询语言HQL(Hive Query Language)。Hive1.10是Hive的一个版本,其主要功能是为大规模数据集提供数据...
在`PreparedStatement`中,可以设置参数来实现模糊查询。 ```java String searchKeyword = "part"; pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE column LIKE ?"); pstmt.setString(1, "%" + ...
3. **添加功能**:在电话本中添加联系人信息时,通常会创建一个PreparedStatement对象,设置SQL的占位符参数(如?),然后绑定用户输入的数据。执行SQL的INSERT语句后,新记录将被添加到数据库中。 4. **删除功能**...
在项目中,可能使用了`LIKE`关键字配合通配符(如 `%` 和 `_`)来实现对用户输入的关键词进行模糊匹配,从而在数据库中找到匹配的记录。 7. **异常处理**:在JDBC编程中,正确处理数据库操作可能出现的异常至关重要...
例如,你可以编写Java代码,创建一个JDBC连接,然后执行SQL-like的查询来查找 LDAP 目录中的用户信息。这对于那些已经熟悉SQL语法的开发者来说,大大降低了学习和使用LDAP的门槛。 以下是使用JDBC LDAP的基本步骤:...
在实际应用中,Cassandra JDBC Driver 可用于构建数据迁移工具、数据分析应用、报表系统或者任何需要与 Cassandra 数据库交互的 Java 应用。其易用性和广泛的支持使得开发人员可以更轻松地将 Cassandra 集成到他们的...
在Java的数据库编程中,JDBC(Java Database Connectivity)是一个重要的接口,用于连接Java应用程序和各种类型的数据库。本文将深入探讨如何使用JDBC实现动态查询和分页查询的结合,这对于开发人员来说是一项基础但...
Java Database Connectivity (JDBC) 是Java编程语言中用于与各种关系型数据库进行交互的一种标准接口。由Sun Microsystems(现已被Oracle公司收购)定义,它的核心是定义了一套规范,允许开发者通过Java代码来操作...
在实际开发中,开发者通常会将Hive JDBC驱动添加到项目的类路径中,然后通过`DriverManager.getConnection()`方法建立到Hive的连接,并通过`Statement`或`PreparedStatement`对象执行SQL命令。此外,为了优化性能,...
Hive提供了一个SQL-like接口来查询存储在Hadoop中的大数据集,而Impala则是一个高性能、实时查询的系统,设计用于处理大规模数据集。当需要从Java应用程序或者Web应用中访问Hive的数据时,可以通过JDBC(Java ...
在Java Web开发中,JDBC(Java Database Connectivity)和Struts1是两个非常重要的技术,它们分别用于数据库操作和MVC(Model-View-Controller)框架的实现。本篇文章将详细探讨如何结合JDBC和Struts1实现模糊查询与...
- 步骤3: 创建 PreparedStatement 对象。 - 步骤4: 设置参数值。 - 步骤5: 执行更新操作。 - 步骤6: 关闭资源。 通过以上介绍,我们不仅了解了 MySQL 数据库的基础操作,还学习了如何使用 JDBC 进行数据库连接...
### JSP与JDBC在网页分页中的应用详解 #### 核心概念解析: **JSP(JavaServer Pages)**:是一种动态网页技术标准,它将动态生成的HTML页面发送到客户端,允许开发者将表现层(HTML)与业务逻辑层(Java)分离,...
在大数据处理领域,Hive是Apache Hadoop生态系统中的一个数据仓库工具,允许用户通过SQL-like语句进行数据查询、分析和管理大规模数据。JDBC(Java Database Connectivity)是Java编程语言中用来规范客户端程序如何...
如果要执行参数化的SQL语句,则可以使用`PreparedStatement`。例如: ```java Statement stmt = conn.createStatement(); ``` 4. **执行查询或DML语句 (Execute a Query or DML Statement)** 使用`Statement`...
数据库和Java JDBC(Java Database Connectivity)是编程领域中与数据管理紧密相关的重要概念。本文将深入探讨SQL语言、数据库操作以及JDBC连接数据库的基本知识。 SQL(Structured Query Language),即结构化查询...