一、导入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;
}
}
}