介绍
访问数据库的规范(接口+类),主要放在java.sql包,jacax.sql包
数据库驱动以及驱动类名
三种数据库MySQL,SQL Server,Oracle
- MySQL——mysql-connector-java.jar
驱动类名:com.mysql.jdbc.Driver - Oracle——ojdbc.jar
驱动类名:oracle.jdbc,driver.OracleDriver - SQL Server(三个)
1.msbase.jar //底层连接类
2.mssqlserver.jar //驱动类
3.msutil.jar //工具类
驱动类名:com.microsoft.sqlserver.jdbc.SQLServerDriver
URL(String表示)
- MySQL
jdbc:mysql://localhost:3306/数据库名称 - Oracle
jdbc:oracle:thin@localhost:1521:sid - SQL Server
jdbc:sqlserver://localhost:1433;DatabaseName=数据库名称
基本步骤(连接到SQL Server)
- 下载相关jar包(链接如下)
进去之后看标题为报错一-问题仍未得到解决的部分 - 导入jar包
将正确的jar包导入到工程的lib或者其他中,具体怎么导入请自行查找 - 加载驱动程序
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); - 建立数据库连接
String url = “jdbc:sqlserver://localhost:1433;DatabaseName=spdb”;
Connection ct=DriverManager.getConnection(url,“sa”, “123456”); - 创建Statement对象,用来将 SQL 语句发送到数据库
Statement sm=ct.createStatement(); - 获取执行结果
① 返回查询结果,select:ResultSet rs=sm.executeQuery(“select * from users”);
② 返回改变的记录数,update:int rows=sm.executeUpdate(“insert into…”);
基本程序
普通纯Java驱动
只创建Java与数据库的连接
package com.yyxx.day17;
import java.sql.*;
public class Jdbc {
public static void main(String[] args) throws SQLException {
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
int a=0;
try {
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=spdb";
// 连接数据库-forName:返回与带有给定字符串名的类或接口相关联的 Class 对象
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 得到连接-getConnection:建立到给定数据库 URL 的连接
ct = DriverManager.getConnection(url,
"sa", "123456");
// 创建Statement-将 SQL 语句发送到数据库
sm = ct.createStatement();
rs = sm.executeQuery("select * from users");
while(rs.next()){
System.out.println(rs.getInt("userID")+","+rs.getString("userName")+","+rs.getString("passwd"));
}
} catch (ClassNotFoundException e) {
// TODO: handle exception
System.out.println("error loading driver:" + e);
}
if (rs!=null)
rs.close();
if (sm!=null) {
sm.close();
}
if (ct!=null) {
ct.close();
}
}
}
Sevlet与数据库的连接at
与(点进去)这里面的“方式三简单示例”大致一样,只不过添加了JDBC的功能,除了Login.java和LoginCl.java有所变化之外,其他不变
package com.yyxx.simpleone;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doGet(req, resp);
try {
//中文显示
resp.setContentType("text/html;charset=gbk");
PrintWriter pw = resp.getWriter();
pw.println("<html>");
pw.println("<head>");
pw.println("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>");
pw.println("<title>Insert title here</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<h1><font size=12>");
pw.println("登录界面");
pw.println("</h1></font>");
pw.println("<form action=logincl method=get>");
pw.println("用户名:<input type=text name=username><br>");
pw.println("密 码:<input type=password name=password><br>");
pw.println("<input type=submit value=login><br>");
pw.println("</form>");
String info=req.getParameter("info");
if(info!=null){
if (info.equals("nouname")) {
pw.println("用户名不存在,请重新输入");
}
if (info.equals("pwerror")) {
pw.println("你的密码错误,请重新输入");
}
}
pw.println("</body>");
pw.println("</html>");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doPost(req, resp);
}
}
package com.yyxx.simpleone;
import javax.servlet.ServletException;
import java.sql.*;
import javax.servlet.http.*;
import java.io.*;
public class LoginCl extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doGet(req, resp);
Connection ct = null;
Statement sm = null;
ResultSet rs = null;
try {
// 中文显示
resp.setContentType("text/html;charset=gbk");
PrintWriter pw = resp.getWriter();
// 接受用户名和密码
String u = req.getParameter("username");
String p = req.getParameter("password");
// 连接数据库-forName:返回与带有给定字符串名的类或接口相关联的 Class 对象
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 得到连接-getConnection:建立到给定数据库 URL 的连接
ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=spdb", "sa", "123456");
// 创建Statement-将 SQL 语句发送到数据库
sm = ct.createStatement();
rs = sm.executeQuery("select top 1 passwd from users where username='" + u + "'");
pw.println("<html>");
pw.println("<head>");
pw.println("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>");
pw.println("<title>Insert title here</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("window.alert("+u+")");;
pw.println("</body>");
pw.println("</html>");
// 验证
// if(u.equals("yangxiao")&&p.equals("123456")) {
if (rs.next()) { //数据库里有对应的用户名
// 密码正确
if (rs.getString(1).equals(p)) {
// 将用户名和密码放入session中
HttpSession hs = req.getSession(true);
hs.setAttribute("uname", u);
hs.setAttribute("pword", p);
// 设定储存时间
hs.setMaxInactiveInterval(10);
// 跳转到欢迎界面
resp.sendRedirect("wel?uname=" + u + "&pword=" + p);
}
else {
//密码错误
// 跳转到登录界面Login
resp.sendRedirect("login?info=pwerror");// 内容为url
}
} else {
// 用户名不存在
// 跳转到登录界面Login
resp.sendRedirect("login?info=nouname");// 内容为url
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} finally { // 使用完数据库之后一定要关闭
try { //先关rs再关ct
if (rs!=null)
rs.close();
if (sm!=null) {
sm.close();
}
if (ct!=null) {
ct.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doPost(req, resp);
}
}