JDBC操作数据库查询数据实例代码。
查询数据
在查询数据时,既可以利用Statement实例通过执行静态SELECT语句完成,也可以利用PreparedStatement实例通过执行动态SELECT语句完成,还可以利用CallableStatement实例通过执行存储过程来完成。
利用Statement实例通过执行静态SELECT语句完成数据查询的典型代码如下:
ResultSet rs = statement.executeQuery(“select * from tb_record where sex=’” + sex + “‘”);
利用PreparedStatement实例通过执行动态SELECT语句完成数据查询的典型代码如下:
preparedStatement = connection.prepareStatement(“select * from tb_record where sex=?”);
preparedStatement.setString(1, sex);
ResultSet rs = preparedStatement.executeQuery();
利用CallableStatement实例通过执行存储过程来完成数据查询的典型代码如下:
callableStatement = connection.prepareCall(“{call select_by_sex(?)}”);
callableStatement.setString(1, sex);
ResultSet rs = callableStatement.executeQuery();
无论利用哪种方式查询记录,都需要执行executeQuery()方法,并且该方法将返回一个ResultSet型的结果集,在该结果集中不仅包含所有满足查询条件的记录,还包含相应数据表的相关信息,例如每一列的名称、类型和列的数量等。在执行executeQuery()方法时可能抛出SQLException类型的异常,所以需要通过try-catch语句进行捕获。
下面通过一个例子,详细讲解ResultSet结果集的使用方法。
在查询记录时,通常情况下将返回的结果集遍历成一个List型的集合,在List集合中存放的是数组对象,每一个数组对象代表一条满足条件的记录。
通常情况下利用while循环遍历ResultSet结果集,并通过执行next()方法判断是否还存在满足查询条件的记录,如果存在则返回true,并将指针移动到下一条记录上,如果不存在则返回false。遍历ResultSet结果集的典型代码如下:
srccommwqTestSelect.java关键代码:
prpdStmt = conn.prepareStatement(“select * from tb_testSelect where sex=?”);
prpdStmt.setString(1, sex);
ResultSet rs = prpdStmt.executeQuery();
while (rs.next()) {// 利用while循环遍历ResultSet结果集,并通过next()方法判断是否存在下一条记录
Object note[] = new Object[3];// 创建一个数组,每个数组代表一条满足条件的记录
for (int i = 0; i < note.length; i++) {// 利用for循环将记录信息读取到数组中
note[i] = rs.getObject(i + 1);
}
list.add(note);// 将数组添加到List集合中
}
注意:
数组的索引从0开始,而ResultSet结果集中数据列的索引从1开始,必须注意区分,否则将导致列索引越界异常,即“Column index 0 is out of range”。
下面利用ResultSet结果集读取数据表信息,并不能通过ResultSet实例直接读取,需要执行ResultSet实例的getMetaData()方法,通过返回ResultSetMetaData型的实例读取,例如下面的代码:
srccommwqTestSelect.java关键代码:
ResultSet rs = stmt.executeQuery(“select * from tb_testSelect”);
ResultSetMetaData rsmd = rs.getMetaData();
int column = rsmd.getColumnCount();// 列的数量
Object[] columnNames = { “列的名称”, “列值的类型”, “对应JAVA类型”, “列值的最大宽度”,
“是否允许为空”, “是否默认自增”, “是否为只读” };
list.add(columnNames);
for (int i = 1; i <= column; i++) {
Object[] columnInfo = new Object[columnNames.length];
columnInfo[0] = rsmd.getColumnName(i);// 列的名称
columnInfo[1] = rsmd.getColumnTypeName(i);// 列值的类型
columnInfo[2] = rsmd.getColumnClassName(i);// 对应Java类型
columnInfo[3] = rsmd.getColumnDisplaySize(i);// 列值的最大宽度,以字符为单位
columnInfo[4] = rsmd.isNullable(i);// 是否允许为空,0为不允许为空,1为允许为空
columnInfo[5] = rsmd.isAutoIncrement(i);// 是否默认自增
columnInfo[6] = rsmd.isReadOnly(i);// 是否为只读
list.add(columnInfo);
}
通过上面的代码得到数据表tb_testSelect的常用信息如图1所示。
图1 利用ResultSet结果集读取数据表信息
完整代码:
srccommwqTestSelect.java完整代码:
package com.mwq;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class TestSelect {
private static final String DRIVERCLASS = “com.microsoft.jdbc.sqlserver.SQLServerDriver”;
private final String url = “jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=db_database12″;
private final String username = “sa”;
private final String password = “”;
private Connection conn;
private Statement stmt;
private PreparedStatement prpdStmt;
private CallableStatement cablStmt;
static {
try {
Class.forName(DRIVERCLASS);
} catch (ClassNotFoundException e) {
System.out.println(“—— 在加载数据库驱动时抛出异常,内容如下:”);
e.printStackTrace();
}
}
// 执行静态SELECT语句
public List<Object[]> selectStatic(String sex) throws SQLException {
List<Object[]> list = new ArrayList<Object[]>();
conn = DriverManager.getConnection(url, username, password);
stmt = conn.createStatement();
ResultSet rs = stmt
.executeQuery(“select * from tb_testSelect where sex=’” + sex
+ “‘”);
while (rs.next()) {
Object note[] = new Object[3];
for (int i = 0; i < note.length; i++) {
note[i] = rs.getObject(i + 1);
}
list.add(note);
}
stmt.close();
conn.close();
return list;
}
// 执行动态SELECT语句
public List<Object[]> selectDynamic(String sex) throws SQLException {
List<Object[]> list = new ArrayList<Object[]>();
conn = DriverManager.getConnection(url, username, password);
prpdStmt = conn
.prepareStatement(“select * from tb_testSelect where sex=?”);
prpdStmt.setString(1, sex);
ResultSet rs = prpdStmt.executeQuery();
while (rs.next()) {// 利用while循环遍历ResultSet结果集,并通过next()方法判断是否存在下一条记录
Object note[] = new Object[3];// 创建一个数组,每个数组代表一条满足条件的记录
for (int i = 0; i < note.length; i++) {// 利用for循环将记录信息读取到数组中
note[i] = rs.getObject(i + 1);
}
list.add(note);// 将数组添加到List集合中
}
prpdStmt.close();
conn.close();
return list;
}
// 通过存储过程执行SELECT语句
public List<Object[]> selectProcedure(String sex) throws SQLException {
List<Object[]> list = new ArrayList<Object[]>();
conn = DriverManager.getConnection(url, username, password);
cablStmt = conn.prepareCall(“{call select_by_sex(?)}”);
cablStmt.setString(1, sex);
ResultSet rs = cablStmt.executeQuery();
while (rs.next()) {
Object note[] = new Object[3];
for (int i = 0; i < note.length; i++) {
note[i] = rs.getObject(i + 1);
}
list.add(note);
}
cablStmt.close();
conn.close();
return list;
}
// 查询所有记录
public List<Object[]> selectAll() {
List<Object[]> list = new ArrayList<Object[]>();
try {
conn = DriverManager.getConnection(url, username, password);
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(“select * from tb_testSelect”);
while (rs.next()) {
Object note[] = new Object[3];
for (int i = 0; i < note.length; i++) {
note[i] = rs.getObject(i + 1);
}
list.add(note);
}
stmt.close();
conn.close();
} catch (SQLException e) {
System.out.println(“—— 在检索记录时抛出异常,内容如下:”);
e.printStackTrace();
}
return list;
}
// 利用ResultSet结果集读取数据表信息
public List<Object[]> tableInfo() throws SQLException {
List<Object[]> list = new ArrayList<Object[]>();
conn = DriverManager.getConnection(url, username, password);
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(“select * from tb_testSelect”);
ResultSetMetaData rsmd = rs.getMetaData();
int column = rsmd.getColumnCount();// 列的数量
Object[] columnNames = { “列的名称”, “列值的类型”, “对应JAVA类型”, “列值的最大宽度”,
“是否允许为空”, “是否默认自增”, “是否为只读” };
list.add(columnNames);
for (int i = 1; i <= column; i++) {
Object[] columnInfo = new Object[columnNames.length];
columnInfo[0] = rsmd.getColumnName(i);// 列的名称
columnInfo[1] = rsmd.getColumnTypeName(i);// 列值的类型
columnInfo[2] = rsmd.getColumnClassName(i);// 对应JAVA类型
columnInfo[3] = rsmd.getColumnDisplaySize(i);// 列值的最大宽度,以字符为单位
columnInfo[4] = rsmd.isNullable(i);// 是否允许为空,0为不允许为空,1为允许为空
columnInfo[5] = rsmd.isAutoIncrement(i);// 是否默认自增
columnInfo[6] = rsmd.isReadOnly(i);// 是否为只读
list.add(columnInfo);
}
stmt.close();
conn.close();
return list;
}
}
index.jsp完整代码
<%@ page language=”java” import=”java.util.*” pageEncoding=”GBK”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>查询数据</title>
<style type=”text/css”>
<!–
table {
font-family: “宋体”;
font-size: 12px;
}
.mrkjTitle {
font-family: “宋体”;
font-size: 14px;
font-weight: bold;
color: #0000FF;
}
.slTitle {
font-family: “宋体”;
font-size: 22px;
font-weight: bold;
color: #FF0000;
}
–>
</style>
<script language=”javascript” type=”">
<!–
function redirect(){
window.location=”table_info.jsp”;
}
//–>
</script>
</head>
<body>
<form action=”select.jsp” method=”post”>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”10%”></td>
<td width=”80%”></td>
<td width=”10%”></td>
</tr>
<tr>
<td> </td>
<td align=”center” bgcolor=”#33CCFF”><table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td>明日科技图书配套光盘实例</td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td>——查询数据</td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td><table border=”0″ cellspacing=”0″ cellpadding=”4″>
<tr>
<td><input type=”radio” name=”testNum” value=”1″ checked></td>
<td>1、利用静态SELECT语句查询记录!</td>
</tr>
<tr>
<td><input type=”radio” name=”testNum” value=”2″></td>
<td>2、利用动态SELECT语句查询记录!</td>
</tr>
<tr>
<td><input type=”radio” name=”testNum” value=”3″></td>
<td>3、利用存储过程查询记录!</td>
</tr>
<tr>
<td><input type=”radio” name=”testNum” value=”3″ onmouseup=”redirect()”></td>
<td>4、利用ResultSet结果集读取数据表信息!</td>
</tr>
<tr align=”right”>
<td> </td>
<td><input type=”submit” name=”Submit” value=”提交”></td>
</tr>
</table></td>
</tr>
<tr>
<td> </td>
</tr>
</table></td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
select.jsp完整代码
<%@ page language=”java” import=”java.util.*” pageEncoding=”GBK”%>
<jsp:useBean id=”ts” scope=”page”></jsp:useBean>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>查询数据</title>
<style type=”text/css”>
<!–
table {
font-family: “宋体”;
font-size: 12px;
}
.mrkjTitle {
font-family: “宋体”;
font-size: 14px;
font-weight: bold;
color: #0000FF;
}
.slTitle {
font-family: “宋体”;
font-size: 22px;
font-weight: bold;
color: #FF0000;
}
.tableTitle {
font-family: “宋体”;
font-size: 12px;
font-weight: bold;
}
–>
</style>
<script language=”javascript” type=”">
<!–
function checkEmpty(formName){
for(i=0;i<formName.length;i++){
if(formName.elements[i].value==”"){
alert(“请认真填写所有信息!!!”);
return false;
}
}
}
//–>
</script>
</head>
<body>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”10%”></td>
<td width=”80%”></td>
<td width=”10%”></td>
</tr>
<tr>
<td> </td>
<td align=”center” bgcolor=”#33CCFF”><table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td>明日科技图书配套光盘实例</td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td>——查询数据</td>
</tr>
<tr>
<td> </td>
</tr>
<form method=”post” action=”show.jsp?testNum=<%=request.getParameter(“testNum”) %>”>
<tr align=”center”>
<td>性别:<select name=”sex”>
<option>男</option>
<option>女</option>
</select>
<input type=”submit” name=”Submit” value=”查询”></td>
</tr>
</form>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td><table border=”1″ cellspacing=”0″ cellpadding=”4″>
<tr align=”center” bgcolor=”#FF9966″>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
</tr>
<%
List<Object[]> list=ts.selectAll();
for(int l=0;l<list.size();l++){
Object[] note=list.get(l);
%>
<tr align=”center” bgcolor=”#FFCCCC”>
<%
for(int n=0;n<note.length;n++){
%>
<td><%=note[n] %></td>
<%
}
%>
</tr>
<%
}
%>
</table></td>
</tr>
<tr>
<td> </td>
</tr>
</table></td>
<td> </td>
</tr>
</table>
</body>
</html>
show.jsp完整代码
<%@ page language=”java” import=”java.util.*” pageEncoding=”GBK”%>
<jsp:useBean id=”ts” scope=”page”></jsp:useBean>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>查询数据</title>
<style type=”text/css”>
<!–
table {
font-family: “宋体”;
font-size: 12px;
}
a {
font-family: “宋体”;
font-size: 14px;
font-weight: bold;
color: #FF66FF;
text-decoration: none;
}
.mrkjTitle {
font-family: “宋体”;
font-size: 14px;
font-weight: bold;
color: #0000FF;
}
.slTitle {
font-family: “宋体”;
font-size: 22px;
font-weight: bold;
color: #FF0000;
}
.tableTitle {
font-family: “宋体”;
font-size: 12px;
font-weight: bold;
}
–>
</style>
</head>
<body>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”10%”></td>
<td width=”80%”></td>
<td width=”10%”></td>
</tr>
<tr>
<td> </td>
<td align=”center” bgcolor=”#33CCFF”><table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td>明日科技图书配套光盘实例</td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”center” class=”slTitle”>
<td>——查询数据</td>
</tr>
<tr>
<td> </td>
</tr>
<%
String sex=request.getParameter(“sex”);
sex=new String(sex.trim().getBytes(“ISO8859-1″),”GB2312″);
List<Object[]> list=null;
int num=Integer.parseInt(request.getParameter(“testNum”));
switch(num){
case 1:
list=ts.selectStatic(sex);
break;
case 2:
list=ts.selectDynamic(sex);
break;
case 3:
list=ts.selectProcedure(sex);
break;
default:
}
%>
<tr align=”center”>
<td><table border=”1″ cellspacing=”0″ cellpadding=”4″>
<tr align=”center” bgcolor=”#FF9966″ class=”tableTitle”>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
</tr>
<%
for(int l=0;l<list.size();l++){
Object[] note=list.get(l);
%>
<tr align=”center” bgcolor=”#FFCCCC”>
<%
for(int n=0;n<note.length;n++){
%>
<td><%=note[n] %></td>
<%
}
%>
</tr>
<%
}
%>
</table></td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”right”>
<td><a href=”index.jsp”>返回首页</a> </td>
</tr>
<tr>
<td> </td>
</tr>
</table></td>
<td> </td>
</tr>
</table>
</body>
</html>
table_info.jsp完整代码
<%@ page language=”java” import=”java.util.*” pageEncoding=”GBK”%>
<jsp:useBean id=”ts” class=”com.mwq.TestSelect” scope=”page”></jsp:useBean>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>查询数据</title>
<style type=”text/css”>
<!–
table {
font-family: “宋体”;
font-size: 12px;
}
a {
font-family: “宋体”;
font-size: 14px;
font-weight: bold;
color: #FF66FF;
text-decoration: none;
}
.mrkjTitle {
font-family: “宋体”;
font-size: 14px;
font-weight: bold;
color: #0000FF;
}
.slTitle {
font-family: “宋体”;
font-size: 22px;
font-weight: bold;
color: #FF0000;
}
.tableTitle {
font-family: “宋体”;
font-size: 12px;
font-weight: bold;
}
–>
</style>
</head>
<body>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”10%”></td>
<td width=”80%”></td>
<td width=”10%”></td>
</tr>
<tr>
<td> </td>
<td align=”center” bgcolor=”#33CCFF”><table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td> </td>
</tr>
<tr align=”center” class=”mrkjTitle”>
<td>明日科技图书配套光盘实例</td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”center” class=”slTitle”>
<td>——查询数据</td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”center”>
<td><table border=”1″ cellspacing=”0″ cellpadding=”4″>
<%
List<Object[]> list=ts.tableInfo();
%>
<tr align=”center” bgcolor=”#FF9966″ class=”tableTitle”>
<%
Object[] columnNames=list.get(0);
for(int i=0;i<columnNames.length;i++){
out.println(“<td>”+columnNames[i]+”</td>”);
}
%>
</tr>
<%
for(int r=1;r<list.size();r++){
Object[] note=list.get(r);
%>
<tr align=”center” bgcolor=”#FFCCCC”>
<%
for(int c=0;c<note.length;c++){
%>
<td><%=note[c] %></td>
<%
}
%>
</tr>
<%
}
%>
</table></td>
</tr>
<tr>
<td> </td>
</tr>
<tr align=”right”>
<td><a href=”index.jsp”>返回首页</a> </td>
</tr>
<tr>
<td> </td>
</tr>
</table></td>
<td> </td>
</tr>
</table>
</body>
</html>
WEB-INFweb.xml完整代码
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.4″
xmlns=”http://java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”>
</web-app>