JDBC
JDBC的主要作用是什么?
JDBC访问数据时常用的类和接口有哪些,它们的作用是什么?
JDBC访问数据的步骤是什么?
PreparedStatement与Statement相比,具有什么优势?
JDBC访问数据时常用的类和接口有哪些,它们的作用是什么?
JDBC访问数据的步骤是什么?
PreparedStatement与Statement相比,具有什么优势?
JDBC API
提供者:Sun公司
内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:
DriverManager类
Connection接口
Statement接口
ResultSet接口
DriverManager
提供者:Sun公司
作用:管理各种不同的JDBC驱动
JDBC 驱动
提供者:数据库厂商
作用:负责连接各种不同的数据库
JDBC API主要功能:与数据库建立连接、执行SQL 语句、处理结果
DriverManager :依据数据库的不同,管理JDBC驱动
Connection :负责连接数据库并担任传送数据的任务
Statement :由 Connection 产生、负责执行SQL语句
ResultSet:负责保存Statement执行后所产生的查询结果
使用纯Java方式连接数据库
由JDBC驱动直接访问数据库
优点:完全Java代码,快速、跨平台
缺点:访问不同的数据库需要下载专用的JDBC驱动
JDBC
package com.hisoft.java.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.hisoft.java.bean.Student;
public class JdbcDemo {
Connection con;
Statement state;
ResultSet rs;
public static void main(String[] args) {
JdbcDemo jd = new JdbcDemo();
jd.getConnect();
}
public void getConnect(){
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建连接
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/javatest", "root", "root");
// 根据连接创建一个state对象
state = con.createStatement();
// 执行sql,将查询结果返回给ResultSet对象
rs = state.executeQuery("select * from students;");
// 对查询结果进行操作
while(rs.next()){
// int id = rs.getInt(1);
// String name = rs.getString(2);
// int age = rs.getInt("stu_age");
// String sex = rs.getString("stu_sex");
// String grade = rs.getString("grade");
// System.out.println(id+"\t"+name+"\t"+age+"\t"+sex+"\t"+grade);
// 将每次从ResultSet集合中遍历的数据封装成一个Student对象
Student stu = new Student();
stu.setStu_id(rs.getInt("stuid"));
stu.setName(rs.getString("stu_name"));
stu.setAge(rs.getInt("stu_age"));
stu.setSex(rs.getString("stu_sex"));
stu.setGrade(rs.getString("grade"));
System.out.println(stu.getStu_id()+"\t"+stu.getName()+"\t"+stu.getSex()+"\t"+stu.getAge()+"\t"+stu.getGrade());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
rs.close();
state.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
工具
package com.hisoft.java.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUtils {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
String url = "jdbc:mysql://localhost:3306/javatest";
String username = "root";
String psw = "root";
Connection con = DriverManager.getConnection(url, username, psw);
return con;
}
/**
* 关闭资源
* @param conn
* @param stmt
*/
public static void close(Connection conn,Statement stmt){
// 6,释放资源,后找开先关闭
try {
if(stmt !=null){
stmt.close();
stmt=null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null){
conn.close();
conn=null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Statement getStatement(Connection conn){
Statement sta = null;
try {
sta = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return sta;
}
public static void close(Connection conn,Statement stmt,ResultSet rs){
// 6,释放资源,后找开先关闭
try {
if(rs != null){
rs.close();
rs=null;//gc
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(stmt !=null){
stmt.close();
stmt=null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(conn != null){
conn.close();
conn=null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
登陆
package com.hisoft.java.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
public class MasterLogin {
Connection con;
// Statement sta;
PreparedStatement pre;
ResultSet rs;
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("用户登录");
System.out.println("请输入用户名");
String name = sc.next();
System.out.println("请输入密码");
String psw = sc.next();
MasterLogin ms = new MasterLogin();
ms.login(name, psw);
}
public void login(String name,String psw){
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/javatest","root","root");
// sta = con.createStatement();
pre = con.prepareStatement("select * from master ma where ma.name=? and ma.password=?");
// StringBuffer sb = new StringBuffer("select * from master ma where ma.name=");
// sb.append("'"+name+"' and ma.password ='"+psw+"'");
// System.out.println(sb.toString());
// rs = sta.executeQuery(sb.toString());
pre.setString(1, name);
pre.setString(2, psw);
rs = pre.executeQuery();
if(rs.next()){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
1023

被折叠的 条评论
为什么被折叠?



