JSP简单访问数据库

Java代码

public class DBHelper {

private String driverName;

private String url;

private String user;

private String password;

private Connection connection;

private String createTableSql;

private String dropTableSql;

public void getConnection() {

if (null == connection) {

try {

Class.forName(driverName);

connection = DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException | SQLException e) {

e.printStackTrace();

}

}

}

public void closeConnection() {

if (null != connection) {

try {

connection.close();

connection = null; //connection.close won't set the connection to be null

System.out.println("closed db connection.");

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public void createTable() {

getConnection();

Statement stmt = null;

try {

stmt = connection.createStatement();

stmt.execute(createTableSql);

System.out.println("Executed sql [" + createTableSql + "] success.");

} catch (SQLException e) {

e.printStackTrace();

}

closeConnection();

}

public void dropTable() {

getConnection();

Statement stmt = null;

try {

stmt = connection.createStatement();

stmt.execute(dropTableSql);

System.out.println("Executed sql [" + dropTableSql + "] success.");

} catch (SQLException e) {

e.printStackTrace();

}

closeConnection();

}

public String getDriverName() {

return driverName;

}

public void setDriverName(String driverName) {

this.driverName = driverName;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getUser() {

return user;

}

public void setUser(String user) {

this.user = user;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getCreateTableSql() {

return createTableSql;

}

public void setCreateTableSql(String createTableSql) {

this.createTableSql = createTableSql;

}

public String getDropTableSql() {

return dropTableSql;

}

public void setDropTableSql(String dropTableSql) {

this.dropTableSql = dropTableSql;

}

}

  Java代码

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Test connecting mysql db</title>

</head>

<body>

<jsp:useBean id="dbHelper" class="com.jesse.jsp.bean.DBHelper" />

<jsp:setProperty property="driverName" name="dbHelper" value="com.mysql.jdbc.Driver"/>

<jsp:setProperty property="url" name="dbHelper" value="jdbc:mysql://192.168.1.104:3306/db_jesse?useUnicode=true&characterEncoding=GBK"/>

<jsp:setProperty property="user" name="dbHelper" value="jesse"/>

<jsp:setProperty property="password" name="dbHelper" value="jesse"/>

<jsp:setProperty property="createTableSql" name="dbHelper" value="create table test_tbl(id int)"/>

<jsp:setProperty property="dropTableSql" name="dbHelper" value="drop table test_tbl"/>

<%!

private int id = 0;

%>

<%

System.out.println(this); //to check if the servlet is singleton

id++;

synchronized(com.jesse.jsp.bean.DBHelper.class) {

dbHelper.createTable();

System.out.println(id + " created the table.");

Thread.sleep(5000);

dbHelper.dropTable();

System.out.println(id + " dropped the table.");

}

%>

</body>

</html>

  Java代码

org.apache.jsp.pages.mysql_jsp@567e0fb8

Executed sql [create table test_tbl(id int)] success.

closed db connection.

1 created the table.

org.apache.jsp.pages.mysql_jsp@567e0fb8

Executed sql [drop table test_tbl] success.

closed db connection.

2 dropped the table.

Executed sql [create table test_tbl(id int)] success.

closed db connection.

2 created the table.

Executed sql [drop table test_tbl] success.

closed db connection.

2 dropped the table.

  Note:本意是要让log打印出来是哪个session在执行,看到结果...又长知识了 <%! %> 查了下,觉得这种说法有道理,暂不深究: <%%>是代码段,在由jsp转换成Servlet后 <%%>中的代码是放在serive方法中,相当于doGet()和doPost()方法 <%!%>是jsp声明,用来定义属性和方法的,在由jsp转换成Servlet后 <%!%>中的代码是放serive方法之外的.

技术分享:www.kaige123.com

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

微信jsapi扫一扫接口实现(4) - 2016-09-20 14:09:19

微信扫一扫功能在我们日常生活中很常见,那么微信jsapi是如何实现扫一扫功能的呢,接来下给大家详细介绍,并附有代码实现。 微信扫一扫  @V型知识库  原创 调起微信扫一扫接口 1 2 3 4 5 6 7 wx.scanQRCode({      needResult: 0,  // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,      scanType: [ "qrCode" , "barCode" ],  // 可以指定扫二维码还是一维码,默认二者都有      success:  func

mysql操作指令 - 2016-09-19 18:09:09

一、连接mysql   进入 mysql 的安装目录;   $ bin/mysql -p [host IP 如果是登录本地的mysql 可以不写 -p 直接 -u] -u [userName] -p   输入密码,回车,接连; 二、权限操作[如果你很了解mysql数据库后,你可以直接去修改系统表,然后用 mysql flush privileges; 指令让权限生效] 1、赋权   mysqlGRANT ALL[权限名,all 表示所有权限] PRIVILEGES ON [dataBaseName *.*
ws-http.java 好久没有敲过java代码了,今天我家妹纸问我怎么写http post,第一想起来的就是 httpclient,找了下写个简单的东西搞个这么大的库,顺顺觉得杀鸡用牛刀了,记得以前jdk里面是自带httpclient的 sun.net.www.http.HttpClient ,jdk8里面好像移除了,没办法,整个简单的吧,够用就行. 仓库地址:  https://github.com/toohamster/ws-http.java Response httpResponse = ne

XML - JAXP技术 - DOM解析 - 2016-09-19 18:09:12

中秋节刚过去,龙哥布置的几个任务还没做完。唉,又开始学XML了。   DOM解析的基本思路: 1、将整个XML文件一次性读入内存 2、将整个XML看做一棵树 3、XML中的每一个标签,属性,文本都看做是树上的一个结点 4、然后可以对结点进行增删改查的操作   话不多说,上代码。 1、首先我在D:\ABC中新建了一个文本文件,重命名为stus.xml,以下是文件中的内容 ?xml version = "1.0" encoding = "GBK" ? stus class = "S160401A" stu n

java新手入门 - 2016-09-19 17:09:16

java新手入门 Java总有它的千般好处使你选择它,但这些随便翻翻书或在网上逛一圈就能找到答案。在本文中,笔者把自己学习Java的一些切身体会和过程写出来,供Java培训初学者做个参考。 我在学习Java的过程中主要围绕以下几个方面来学习: 1.时刻提醒自己Java是一种OOP语言工具,而不仅仅是编码,只有这样才能总体把握和运用Java。 2.在学习的过程中,最好能够了解Java的底层机制,而不是仅仅停留在表层,不是抄书上的例子运行出结果就可以。要注意,即便对一个简单的例子也要有耐心去琢磨、调试、改动。

自动id生成器类 - 2016-09-19 17:09:13

import java.util.concurrent.atomic.AtomicInteger;AtomicInteger idCreate = new AtomicInteger();idCreate.incrementAndGet();//返回int类型 //获取当前的值 public final int get() //取当前的值,并设置新的值 public final int getAndSet(int newValue) //获取当前的值,并自增 public final int getAnd
[size=medium]    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.jb51.net / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 19

JAVA 常量池与String - 2016-09-19 14:09:50

  提到常量池,一般是指运行时常量池,是方法区的一部分。方法区就是通常说的永久代。那么常量池中会存储那些数据呢?   ①编译期生成的各种字面量和符号引用   ②也有可能将运行期间的常量放入常量池   先看第一种: 编译期生成的各种字面量和符号引用,这部分数据经过编译后存在.class文件的‘常量池’中,注意这个所谓的‘常量池’是‘静态常量池’,静态常量池的数据会在类加载后放入运行时常量池。举个例子   测试一 public class ConstantPoolAndStrTest { String str

btrace跟踪组数创建 - 2016-09-19 14:09:44

之前有人问我怎么用btrace跟踪数组的创建,这里记录一下。 需要靠Kind.NEWARRAY,比如要跟踪int数组的创建可以这么写 @BTracepublic class BtraceCreateArray { @OnMethod(clazz = "/.*/", method = "/.*/", location = @Location(value = Kind.NEWARRAY, clazz = "int") ) public static void findCreateIntArray() { pri

操作json - 2016-09-19 14:09:07

总是记不住一些零碎的知识点,这次开个专栏来记录,不定期更新: 1:json格式互转 1.1 :model转换json JSONObject jsonObject = JSONObject.fromObject(model);