Eclipse中jsp与数据库基本(笔记)

一、导入jar包

将准备好的与数据库相对应的jar包放在项目目录下,BuildPath即可。

二、连接数据库之前

 需要确认连接字符串。不同数据库需要的连接字符串不同

//oracle
"jdbc:oracle:thin:@localhost:端口号(1521):数据库实例名"
//mysql
"jdbc:mysql://localhost:端口号(3306)/数据库实例名"

而后是导入驱动类,包含在我们导入的jar包中。选择自己下载的数据库对应的驱动类名称即可(以下分别是oracle,mysql和microsoft的jar包名。

//驱动类
"oracle:orac.jdbc.OracleDriver"
"mysql:com.mysql.jdbc.Driver"
"microsoft:com.crosoft.sqlserver.jdbc.SQLServerDriver"

三、java数据库连接基本模板

本篇使用的为MySQL,以下为基本模板。mysql及jar包整合.rar-MySQL文档类资源-CSDN下载

(以下模板为杂糅,使用时请调整。存储过程以及存储函数使用未在其中)

若在JSP中直接使用,请不要忘记在页面中导入库。

<%@page import="java.sql.*" %>

若在Class.forName出报错,请检查是否导入Jar包成功。

            String URL= "jdbc:mysql://localhost:3306/数据库名称";//连接字符
	        String USERNAME = "root";//用户名
		    String PWD = "";//密码
			Statement stmt = null;//执行SQL语句方式一
			PreparedStatement pstmt = null;//执行SQL语句方式二
			Connection connection = null;
            ResultSet rs = null;//储存查询结果
			try {
				Class.forName("com.mysql.jdbc.Driver");//导入数据库的驱动
				connection = DriverManager.getConnection(URL,USERNAME,PWD);

                //增删改(此处演示增加)
				//(1)createStatement创建语句
				stmt = connection.createStatement();
				String sql = "insert into students values(13,'zs')";
				//执行语句,并记录返回条数
				int count = stmt.executeUpdate(sql);
				if(count>0) {
					System.out.println("成功,共有:"+count+"条");
				}
				else {
					System.out.println("失败");
				}
		
	
				//(2)PreparedStatement创建语句
				String sql = "insert into students values(?,?)";//预先编译
				pstmt = connection.prepareStatement(sql);
				pstmt.setInt(1, 1232);//(位置,内容)。从1开始
				pstmt.setString(2,"xm");
				//执行语句,并记录返回条数
				int count = pstmt.executeUpdate();
				if(count>0) {
					System.out.println("成功,共有:"+count+"条");
				}
				else {
					System.out.println("失败");
				}


                //查询
            	//(1)createStatement创建语句
                sql = "select * from students where name= 'zs' ";
				//执行语句,并记录返回条数
				rs = stmt.executeQuery(sql);//默认指向结果集前一行,通过next下移,同时判断,有数据为true,无为false
				//rs.getXXX()获取当前指向数据
				while(rs.next()) {
					String sno =rs.getString("sno");//也可以用1,2,3下标表示,从一开始
					String sname = rs.getString("sname");
					System.out.printf("code:%s,name:%s\n",sno,sname);
				}
                

                //(2)PreparedStatement创建语句
                sql = "select count(*) from students where name = ? and sno = ?";
			    pstmt = connection.prepareStatement(sql);
			    pstmt.setString(1, "zs");
			    // 执行语句,并记录返回条数
			    rs = pstmt.executeQuery();//默认指向结果集前一行,通过next下移,同时判断,有数据为true,无为false
				//rs.getXXX()获取当前指向数据
				while(rs.next()) {
					String sno =rs.getString("sno");//也可以用1,2,3下标表示,从一开始
					String sname = rs.getString("sname");
					System.out.printf("code:%s,name:%s\n",sno,sname);
				}
                

			}
			catch(ClassNotFoundException e) {
				e.printStackTrace();
			}
			catch(SQLException e) {
				e.printStackTrace();
			}
			catch(Exception e) {
				e.printStackTrace();
			}
			finally {
				try {
                    //先打开的组件,后关闭
                    if(rs!=null)rs.close();
					if(stmt!=null)stmt.close();
					if(pstmt!=null)pstmt.close();
					if(connection!=null)connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

四、Statement与PreparedStatement 

Statement包含有PreparedStatement ,为父类。但使用时,尽量使用PreparedStatement进行查询。

PreparedStatement优点:

  • 编码简单
  • SQL语句为预编译,可以在循环体中减少执行时间(仅改变“?”即可)。
  • 可防止SQL注入

五、JSP调用Java API 注意

虽然以上代码可以直接放入JSP之中,但是并不方便查看,故尝试将其分离。

将其通过接口进行传参从JSP传入Java文件中,而后返回结果即可。

路径应为根目录(指该项目的webapp或构建路径如src等buildpath为sourcefile的,查找时会自动从所有根路径出发)的相对路径

  • 注意九大内置对像在Java中无法使用。
  • 注意完成Java代码后是否已BuildPath(如下图)

  • 注意是否在JSP页面导入了该包
  • Java包不能使用默认名
<%@page import="webtest.LoginDao" %>

通用DBUtil

此处为保证通用查询(并未使用泛型等方式优化)因而直接返回Resultset类型结果,因此并未关闭开关。

package util;

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


public class DBUtil {
	private static final String URL= "jdbc:mysql://localhost:3306/数据库名称";//连接字符
	private static final String USERNAME = "root";//用户名
	private static final String PASSWORD = "";//密码
	//通用增删改
	public static boolean executeUpdate(String sql,Object[] params) {
		Connection connection = null;
		PreparedStatement pstmt = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
			pstmt = connection.prepareStatement(sql);
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			int count = pstmt.executeUpdate();
			if(count>0) {
				return true;
			}
			else 
				return false;			
		}
		catch(ClassNotFoundException e){
			e.printStackTrace();
			return false;
		}
		catch(SQLException e) {
			e.printStackTrace();
			return false;
		}
		catch(Exception e) {
			e.printStackTrace();
			return false;
		}
		finally{
			try {
				if(pstmt!=null)pstmt.close();
				if(connection!=null)connection.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	//通用查询
	public static ResultSet executeQuery(String sql,Object[] params) {
		Connection connection = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
			pstmt = connection.prepareStatement(sql);
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			rs = pstmt.executeQuery();
			return rs;
			
		}
		catch(ClassNotFoundException e){
			e.printStackTrace();
			return null;
		}
		catch(SQLException e) {
			e.printStackTrace();
			return null;
		}
		catch(Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值