Servlet变量范围使用指南以及数据库连接

Servlet变量范围使用指南

1. 在Java语言中,有类变量、实例变量、方法变量和代码块变量,每种变量都有自己的作用域和生命周期。

public class VariableScopeDemo {

/*1、类变量,生命周期:从该类被虚拟机加载直到到该类被卸载,该变量都存在;

* 作用域:可以被该类的所有实例访问*/

private static double PI=3.1415926;

/*2、实例变量,生命周期:从该类的一个实例创建到被垃圾回收,该变量存在;

* 作用域:可以被该实例的所有方法中使用

* **/

private double radius;

public double square(){

/*

* 3、方法变量,生命周期:从该被调用,运行到变量的声明处到该方法返回,该变量都存在

* 作用域:变量的声明到方法结束前都可以访问

* */

double square=PI*radius*radius;//square声明周期开始

/**

*4、 代码块,其中K是代码块变量,生命周期:从代码块中声明该变量开始到代码块结束

* 作用域:从代码块中声明该变量开始到代码块结束

* */

{

int k=0;//k生命周期开始

k++;

}//k生命周期结束

return square;

}//square声明周期结束

public double zhouchang(){

double zhouchang=2*PI*radius;

return zhouchang;

}

public void setRadius(double radius) {

this.radius = radius;

}

}

2、为什么要有这么多变量类型?我们知道程序运行时间变量都会被分配内存。比如方法变量,在方法调用结束后,我们就不需要该变量了,这时间就可以释放它占用的内存。由于内存不是无限的,在一个变量不需要使用的时候,我们就要及时释放它占用的内存,以免内存被耗尽。

3、Java中不定参数的传递方法。

3.1 同种类型变量传递,比如我们常见的主方法。可以接收不定个数的字符串参数

public static void main(String[] args) {

}

3.2 异种类型变量传递。方法是参数是一个Map,这样我们就可以传递不定参数进去。

import java.util.HashMap;

import java.util.Map;

//该对象用户封装请求请求参数,模拟HttpRequest对象

public class Request {

Map<String, Object> parameter=new HashMap<String, Object>();

public void setAttibute(String name,Object value){

parameter.put(name, value);

}

public Object getAttibute(String name){

return parameter.get(name);

}

}

//该方法用于模拟我们怎么创建在一个方法中设置对象,并把它作为参数传递给//另外一个函数

public class VariableParameterDemo {

public static void test(Request request){

Integer age=(Integer) request.getAttibute("age");

String name=(String) request.getAttibute("name");

System.out.println("age="+age+";name="+name);

}

public static void main(String[] args) {

Request mapP=new Request();

mapP.setAttibute("age", new Integer(20));

mapP.setAttibute("name", "zhangsan");

//我们通过Request对象把不定参数的对象传递给了test方法。

test(mapP);

}

}

4、Servlet对象之间对象传递。

4.1在Servlet对象中,我们有时间需要转发,调用另外一个Servlet(JSP本质也是一个Servlet):

request.getRequestDispatcher("logon").forward(request, response);

如果我们需要把一个对象传递给下一个Servlet使用,由于我们要传递多少个对象个数不是事先能确定的,属于异种不定参数个数传递,我们就需要使用Map这种形式的传递,我们在request调用setAttibute,我们就可以在下一个Servlet中使用。

4.2 Servlet几种不同生命周期。

根据Web开发具体情况,Servlet规范把变量声明周期分为request,session和application.(其实也有page,就是在service方法中声明的变量).

4.3 request变量

在Web开发中,我们可能查询满足一定条件记录。例如我们查询一个表中今天的订单记录集合并把它显示在页面中,那么我们就需要从数据库查询出该记录并传递给显示页面JSP。这个集合对象只需要在我们当前请求中使用,不需要在以后使用。

这个时间我们就考虑作为要传递的对象生命周期多长合适?过长了浪费服务器内存,短了不能满足要求,根据HttpRequest对象的生命周期:当用户请求到达服务器,Servlet引擎开始封装Http请求为HttpRequest请求,然后调用Servlet,最后Servlet的doPost等方法返回给Servlet引擎,把响应传递给浏览器,request对象的生命周期刚好符合我们这里的应用需求。这样我们就可以调用HttpRequest对象setAtrribute设置要传递的对象,我们在页面上就可以调用request对象的getAtribute获取被传递的对象。

4.3 session变量

在Web开发中,我们可能在网上购买商品,我们要浏览商品,查看各个商品的信息,然后决定是否购买。在这种情况下,我们就发出了多次请求,我们需要记录下我们购买过的商品,直到我们购买完商品结账。在Servlet中采用会话跟踪技术来满足这种应用。我们在编程时间只需要调用HttpSession接口的setAtrribute方法,就可以把我们的东西保存下来传递给同一个会话中的其他Servlet使用,使用getAtribute获取被传递的对象。

4.4 application变量

在Web开发中,我们有时间需要记录某个页面被访问的次数,这个时间不是针对某个客户,而是对所有客户的所有对该页面的访问,使用会话显然不太合适了,Servlet给我们提供了一个ServletContext接口,我们在编程时间只需要调用ServletContext接口的setAtrribute方法,就可以把我们的东西保存下来,在以后的所有Servlet都可以使用getAtribute获取被传递的对象。

5 示例程序:

5.1 request例子

5.1.1 新建一个Web项目,命名为requestDemo

5.1.2 使用 新建数据库jsptest1并执行以下脚本

/*

Navicat MySQL Data Transfer

Source Server : mysql

Source Server Version : 50509

Source Host : localhost:3306

Source Database : jsptest

Target Server Type : MYSQL

Target Server Version : 50509

File Encoding : 65001

Date: 2011-04-20 14:40:32

*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for `user`

-- ----------------------------

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`id` int(11) NOT NULL,

`name` varchar(10) DEFAULT NULL,

`password` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of user

-- ----------------------------

INSERT INTO `user` VALUES ('1', '张三', '123');

INSERT INTO `user` VALUES ('2', '李四', '456');

INSERT INTO `user` VALUES ('3', '王五', '789');

5.1.3 添加mysql数据驱动。

5.1.4 编写user对应的JavaBan。

package cn.hnpi;

public class User {

private String name;

private String password;

private int id;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

}

5.1.5编写UserService方法,获取用户列表。具体方法可参考JDBC挽救实验,也可以参考下面代码,注意数据名,密码等要修改为你本机上合适的:

package cn.hnpi;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

public class UserService {

public List<User> getUserList() throws SQLException {

List<User> users = new ArrayList<User>();

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

String sql = "select * from user ";

try {

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsptest1", "root", "root");

stmt = conn.createStatement();

System.out.println("打开数据库连接");

rs = stmt.executeQuery(sql);

while (rs.next()) {

User user = new User();

user.setId(rs.getInt("id"));

user.setName(rs.getString("name"));

user.setPassword(rs.getString("password"));

users.add(user);

}

} catch (Exception ex) {

System.err.println("打开数据库时出错: " + ex.getMessage());

} finally {

if (rs != null) {

rs.close();

}

if (stmt != null) {

stmt.close();

}

if (conn != null) {

conn.close();

}

}

return users;

}

}

5.1.6 新建一个Servlet:

(1)在项目单击邮件,选择new->Servlet,弹出“new Servlet”对话框

(2)Package中输入合适的包名,在Name中输入Servlet的名称,单击“Next”。

(3)修改内容如下图所示。单击“Finish”,完成

5.1.7 修改生成的Servlet类

package cn.hnpi;

import java.io.IOException;

import java.sql.SQLException;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class UserListServlet extends HttpServlet {

/**

* Constructor of the object.

*/

public UserListServlet() {

super();

}

/**

* Destruction of the servlet. <br>

*/

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

// Put your code here

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=gbk");

//1、获取用户列表,并设置到request对象中,以便传递到JSp页面显示

UserService us=new UserService();

List<User> users;

try {

users = us.getUserList();

request.setAttribute("users", users);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//2、转发,注意我们传递的是同一个request和response对象

request.getRequestDispatcher("userList.jsp").forward(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

public void init() throws ServletException {

// Put your code here

}

}

5.1.8 在WebRoot下新建JSP页面:userList.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%@page import="cn.hnpi.User"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

List<User> users=(List<User>)request.getAttribute("users");

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>用户列表</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<h3 align="center">用户列表</h3>

<table align="center" style="border-bottom-style: dotted;">

<tr>

<th>用户ID</th>

<th>姓名</th>

<th>密码</th>

</tr>

<%if(users!=null&&users.size()>0){

for(int i=0;i<users.size();i++){

User user=users.get(i);

%>

<tr>

<td><%=user.getId() %></td>

<td><%=user.getName()%></td>

<td><%=user.getPassword() %></td>

</tr>

<%}}else {%>

<tr><td colspan="3">无记录</td></tr>

<%} %>

</table>

</body>

</html>

5.1.9 发布并运行项目

http://lenovo-pc:8080/requestDemo/UserListServlet

5.2 Session应用项目

需求:我们要控制用户未登录时,只能通过登陆页面访问网站;一旦登陆后就不需要再重新输入密码重新登陆。这明显是针对一个客户端的多次请求,需要使用会话对象。

5.2.1 新建一个Web项目sessionDemo

5.2.2 修改index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<form action="LoginServlet">

<input type="text" name="name"><br/>

<input type="password" name="password"><br/>

<input type="submit">

</form>

</body>

</html>

5.2.3 新建LoginServlet

package cn.hnpi;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

/**

* Constructor of the object.

*/

public LoginServlet() {

super();

}

/**

* Destruction of the servlet. <br>

*/

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

// Put your code here

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

String name=request.getParameter("name");

String password=request.getParameter("password");

if ("admin".equals(name)&&"admin".equals(password)) {

request.getSession().setAttribute("flag", 1);//记录用户是否成功登陆

request.getRequestDispatcher("success.jsp").forward(request, response);

} else {

request.getRequestDispatcher("index.jsp").forward(request, response);

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

public void init() throws ServletException {

// Put your code here

}

}

5.2.4 新建success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%

//该代码的意思是如果用户已经登陆,那么存储在session的对象就存在且值为1;若不成立则把页面重定向到

//index.jsp页面进行登陆。从而控制未登陆时间只能从登陆页面登陆;登陆后就不需要每次请求时间都

//从登陆页面登陆

if(session.getAttribute("flag")==null||!((Integer)session.getAttribute("flag")).equals(1)){

response.sendRedirect("index.jsp");

}

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'success.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

成功登陆!

</body>

</html>

5.2.5 发布运行。

用户首先输入:

http://127.0.0.1:8080/sessionDemo/success.jsp

则会重定向到index.jsp页面登陆

在用户名和密码都输入admin后成功登陆,这个时间在地址栏输入

http://127.0.0.1:8080/sessionDemo/success.jsp

就不用在重新输入密码了。

5.3 application应用

需求:我们要记录一个网页被访问的次数。这个时间是针对所有用户了,这个用别的范围变量不合适。

5.3.1 新建applicationDemo的Web项目

5.3.2 修改页面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<%

Integer counter=0;

if( application.getAttribute("counter")==null){

application.setAttribute("counter",1);

counter++;

}else{

counter= (Integer)application.getAttribute("counter")+1;

application.setAttribute("counter",counter);

}

%>

该页面被访问了<%=counter %>次

</body>

</html>

5.3.3 发布运行

用户可以打开多个浏览器窗口测试,看看是否正确记录了访问次数。

JAVA写入Mysql中文乱码解决方法


页面传值中有中文的时候,可以使用filter来搞掂,可是好容易System.out.println可以出中文了,插入到Mysql里,还是乱码。

怎么办呢,做到以下几点:

1。创建数据库的时候:

CREATEDATABASE`Db`
CHARACTERSET'utf8'
COLLATE'utf8_general_ci';


2.建表的时候:

CREATETABLE`TableA`(
`ID`varchar(40)NOTNULLdefault'',
`UserID`varchar(40)NOTNULLdefault'',)
ENGINE=InnoDBDEFAULTCHARSET=utf8;

3.设置URL的时候:

jdbc:mysql://localhost:3306/database?useUnicode=true&amp;characterEncoding=UTF-8

JDBC挽救实验
JDBC挽救实验
1说明:本指导主要讲述如何使用Mysql客户端建立数据库、执行脚本和使用
JDBC编程。
2 Mysql客户端的使用(在MyEclipse中)
2.1 在MyEclipse菜单中选择:Window->Show View->other…,出现“Show
View”对话框,在上部文本框输入DB,就会看到DB Browser,双击,就会在
MyEclipse中显示该视图。如图2.2 右下底部。


2.3
1、在DB Browser右击,选择某个已有的数据连接配置名称,在弹出菜单中选
择:Open Connetion…打开连接。
2、新建
具体操作见Pdf文档


3JDBC编程(Java项目)
3.1新建一个Java项目:MyEclipse中选择菜单:File->New->Java Project,此时出现 “New
Java Project”向导对话框,如图1:在“Project name”输入项目名(不要用中文名称),然后单
击“Finsh”按钮完成项目创建。此时在图2中左侧“Package Explorer”窗格出现新建的项
目,在“JDBCDemo”项目上双击可以展开和折叠项目。
图1 新建项目向导

图2 完成项目创建
3.2 添加Mysql驱动:
方法一:
在“JDBCDemo”项目上右击,选择 Properties,将出现下图的对话框:首先左侧单
击“Java Build Path”,然后在右侧选择“Libraries”页,然后单击“Add External
JARS…”按钮,出现“JAR Select”对话框,找到Mysql驱动器所在的位置,然后选中,单
击“打开”,就完成了Mysql的JDBC添加。(MyEclipse中添加Jar类库方法都如此).
图3 项目属性对话框
4 JAR文件选择对话框
3.3 建立数据表user对应的JavaBean类User。
1、这种JavaBean一般放到*.entity包内,在本例中我们把它放到cn.hnpi.
java1002.entity包中。
2、新建一个Java类,右击项目,选择New->Class,出现“New Java Class”对话框,
在“Package”中输入“cn.hnpi.java1002.entity”,在“Name”中输入User,单
击“Finsh”按钮,此时在Myeclipse中显示出新建的类。
3、输入两个字段:userName和userPwd.
4、为该字段生成getter/setter方法
在上图中间,右击出现快捷菜单,选择Source->Generate getters and setters…,此时出
现“Generate getters and setters”对话框,单击“Select All”按钮,然后单击“OK”按钮,
完成方法生成。此时的User满足JavaBean规范要求:(1)类非final;(2)属性私有;
(3)公有的getter和setter方法;(3)有一个无参的构造函数。
3.4 在该项目新建四个类:DelUser,AddUser,UpdateUser和SelectUser,他们都位
于cn.hnpi.java1002.dao包中。对数据库的操作基本就是增、删、改和查
(CRUD)。
1、AddUser:
package cn.hnpi.java1002.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class AddUser {

public static void main(String[] args) throws SQLException {
//1、加载驱动器,注意forName中给出包名加类名(即全限定名)
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection conn=null;
Statement stmt=null;
try {
//2、获取到数据库的连接:jdbc:mysql://是数据库协议,127.0.0.1是IP地址,
本机用这个IP,3306端口号,jdbctest数据库名称
//第二个参数是数据库用户名,第三个参数是密码。
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/
jsptest", "root", "root");
//3.1、准备sql语句
String sql="insert into user values(4,'zhangsan','123')";
//3.2,获取Statement对象来执行语句
stmt=conn.createStatement();
//3.3执行语句,由于insert,delete和update通常调用executeUpdate,不成功
返回0
int result=stmt.executeUpdate(sql);
if (result==0) {
System.out.println("添加失败");
} else {
System.out.println("添加成功");
}

} catch (SQLException e) {//5、异常处理
// TODO Auto-generated catch block
e.printStackTrace();
}finally{//4、关闭数据库:先关闭Statement对象,然后是Connection对象
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}

}
2、DelUser
package cn.hnpi.java1002.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;


public class DelUser {
public static void main(String[] args) throws SQLException {
//1、加载驱动器,注意forName中给出包名加类名(即全限定名)
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection conn=null;
PreparedStatement pstmt=null;
try {
//2、获取到数据库的连接:jdbc:mysql://是数据库协议,127.0.0.1是IP地
址,本机用这个IP,3306端口号,jdbctest数据库名称
//第二个参数是数据库用户名,第三个参数是密码。
conn=DriverManager.getConnection("jdbc:
mysql://127.0.0.1:3306/jsptest", "root", "root");
//3.1、准备sql语句
String sql="delete from user where id=?";
//3.2,获取Statement对象来执行语句
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, 4);
//3.3执行语句,由于insert,delete和update通常调用executeUpdate,不
成功返回0
int result=pstmt.executeUpdate();
if (result==0) {
System.out.println("删除失败");
} else {
System.out.println("删除成功");
}

} catch (SQLException e) {//5、异常处理
// TODO Auto-generated catch block
e.printStackTrace();
}finally{//4、关闭数据库:先关闭Statement对象,然后是Connection对象
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
}
}
3、Update
package cn.hnpi.java1002.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class UpdateUser {
public static void main(String[] args) throws SQLException {
//1、加载驱动器,注意forName中给出包名加类名(即全限定名)
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection conn=null;
PreparedStatement pstmt=null;
try {
//2、获取到数据库的连接:jdbc:mysql://是数据库协议,127.0.0.1是IP地
址,本机用这个IP,3306端口号,jdbctest数据库名称
//第二个参数是数据库用户名,第三个参数是密码。
conn=DriverManager.getConnection("jdbc:
mysql://127.0.0.1:3306/jsptest", "root", "root");
//3.1、准备sql语句
String sql="update user set password=? where id=?";
//3.2,获取Statement对象来执行语句
pstmt=conn.prepareStatement(sql);
//3.2password在数据库中是字符型
pstmt.setString(1, "1234");
pstmt.setInt(2, 1);
//3.3执行语句,由于insert,delete和update通常调用executeUpdate,不
成功返回0
int result=pstmt.executeUpdate();
if (result==0) {
System.out.println("更新失败");
} else {
System.out.println("更新成功");
}

} catch (SQLException e) {//5、异常处理
// TODO Auto-generated catch block
e.printStackTrace();
}finally{//4、关闭数据库:先关闭Statement对象,然后是Connection对象
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
}
}
4、SelectUser:查询用户 package cn.hnpi.java1002.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import cn.hnpi.java1002.entity.User;

public class SelectUser {
public static void main(String[] args) throws SQLException {
//1、加载驱动器类,注意forName中给出包名加类名(即全限定名)
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection conn=null;//数据库连接对象
Statement stmt=null;
ResultSet rs=null;

try {
//2、获取到数据库的连接:jdbc:mysql://是数据库协议,127.0.0.1是IP地
址,本机用这个IP,3306端口号,jdbctest数据库名称
//第二个参数是数据库用户名,第三个参数是密码。
conn=DriverManager.getConnection("jdbc:
mysql://127.0.0.1:3306/jsptest", "root", "root");
//3.1、准备sql语句
String sql="select * from user";
//3.2,获取Statement对象来执行语句
stmt=conn.createStatement();

//3.3执行语句,检索结果
rs=stmt.executeQuery(sql);
List<User> users=new ArrayList<User>();
while (rs.next()) {
User user=new User();
user.setUserName(rs.getString("name"));
user.setUserPwd(rs.getString("password"));
users.add(user);
System.out.println("name="+user.getUserName()+";
password="+user.getUserPwd());
}

} catch (SQLException e) {//5、异常处理
// TODO Auto-generated catch block
e.printStackTrace();
}finally{//4、关闭数据库:先关闭Statement对象,然后是Connection对象
if(rs!=null){
rs.close();
}
if(stmt!=null){
stmt.close();
}

if(conn!=null){
conn.close();
}
}
}
}
4、思考题目:
1、我们发现这四个类中如:数据库驱动加载,连接对象获取;对象关闭都是
相同的,我们如何重构使得代码量减少。
2、使用JDBC编程工作量在那一部分?使用JDBC需要的基础是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值