java JDBC
2017-10-14 09:47 晨曦曙光 阅读(425) 评论(0) 编辑 收藏 举报1.什么是JDBC?
JDBC全称为java data base connectivity(java 数据连接)连接数据库的桥梁,由 java语言编写的类和接口组成。可以为多种数据库提供统一的访问。
2.jdbc 的安装步骤:
(1)进入mysql 的官网下载java与mysql 的连接器:https://dev.mysql.com/downloads/connector/j/
(2)在eclipse 中创建一个java工程 ,在在这个工程中创建一个文件夹(lib),如图
(2)解压文件,复制当中的jar文件到lib 文件中
(3)配置jdbc文件
3.JDBC 在使用中常见的有以下三类:
JDBC-ODBC 桥连接:是SUN 在JDK的开发包中提供的最标准的一套JDBC 操作类库,使用的时候将JDBC-ODB-数据库,中间要经过一个ODBC 的连接,那么就意味着整体的性能将会降低,所以在开发中是绝对不会去使用JDBC-ODBC的连接方式的。
JDBC 连接,使用各个数据库提供商给定的数据库驱动程序,完成JDBC的开发,使用的时候需要在classpath中配置数据库的驱动程序
JDBC 网络连接:主要使用通过网络连接数据库
4.JDBC 的操作步骤
在进行JDBC 操作的时候可以按照以下的步骤完成:
1、加载数据库驱动程序,加载的时候需要将驱动程序配置到classpath之中
2、连接数据库,通过Connection 接口和 DriverManager 类完成
3、操作数据库,通过Statement(声明)、PreparedStatement(事先准备好的声明)、ResultSet(结果集) 三个接口完成
4、关闭数据库,在实际开发中数据库资源非常有限,操作完之后必须关闭
5。数据库连接操作
在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成
1、通过Class.forName()加载数据库的驱动程序
2、通过DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码
3、通过Connection 接口接收连接
package com.j1702.db;
import java.sql.*;
public class DBUtil {
private static final String URL="jdbc:mysql://127.0.0.1:3306/jdbc_test";
private static final String USER="root";
private static final String PASSWORD="";
public static void main(String[] args)throws Exception {
//1.加载mysql驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接对象conn
Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);
//3.创建查询语句
Statement stmt=conn.createStatement();
//4.stmt 执行 sql 语句
ResultSet res =stmt.executeQuery("select * from Student");
//5.遍历输出结果集
while (res.next()){
System.out.println("id:"+res.getInt("id")+",姓名:"+res.getString("name")+",年龄:"+res.getInt("age"));
}
}
}
6.MVC 三层架构模式
7.java JDBC mvc(三层架构)代码实例:
(1)db层M:DBUtil.java 获取数据库的连接(工具类)
package com.j1702.db;
import java.sql.*;
public class DBUtil {
private static final String URL="jdbc:mysql://127.0.0.1:3306/jdbc_test";
private static final String USER="root";
private static final String PASSWORD="";
private static Connection conn = null;
static {
try {
// 1.加载mysql驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获得数据库链接对象conn
setConn(DriverManager.getConnection(URL, USER, PASSWORD));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConn() {
return conn;
}
public static void setConn(Connection conn) {
DBUtil.conn = conn;
}
}
(2) 模型层M:Student.java 类,和数据库字段相对应
package com.j1702.model; public class Student { private Integer id; private String name; private Integer age; private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
(3)dao层:StudentDao.java 增删改查方法。
package com.j1702.dao; import java.sql.*; import java.util.*; import com.j1702.db.DBUtil; import com.j1702.model.Student; public class StudentDao { public static void main(String[] args) throws Exception{ Student stu =new Student(); stu.setName("翠花"); stu.setAge(21); stu.setId(1002); //update(stu); //query(stu); //add(stu); /// delete(1005); //queryWithId(1004); Map<String,Object> map = new HashMap<String,Object>(); map.put("key", "name"); map.put("value","'张全蛋'"); Map<String,Object> map2 = new HashMap<String,Object>(); map2.put("key", "age"); map2.put("value", 25); List<Map<String,Object>> li= new ArrayList<Map<String,Object>>(); li.add(map); li.add(map2); queryWithParam(li); } //1.增 public static void add(Student stu) throws Exception{ //通过工具类,获取数据库链接对象 Connection conn= DBUtil.getConn(); //创建 sql 语句 String sql = "insert Student (name,age) value (?,?)"; //创建 预加载 的sql 语句执行对象 PreparedStatement ptmt=conn.prepareStatement(sql); //给名字赋值 ptmt.setString(1, stu.getName()); //给年龄赋值 ptmt.setInt(2, stu.getAge()); //执行 sql 语句 ptmt.execute(); // if(ptmt.execute()){ // System.out.println("数据插入到数据库成功"); // }else{ // System.out.println("数据插入到数据库失败"); // } } //2.删 public static void delete(Integer id) throws Exception{ //通过工具类,获取数据库链接对象 Connection conn= DBUtil.getConn(); //创建 sql 语句 String sql = " delete from Student where id =?"; //创建 预加载 的sql 语句执行对象 PreparedStatement ptmt=conn.prepareStatement(sql); //给名字赋值 ptmt.setInt(1,id); ptmt.execute(); } //3.改 public static void update(Student stu) throws Exception{ //通过工具类,获取数据库链接对象 Connection conn= DBUtil.getConn(); //创建 sql 语句 String sql = "update Student set name=?,age=? where id =?"; //创建 预加载 的sql 语句执行对象 PreparedStatement ptmt=conn.prepareStatement(sql); //给名字赋值 ptmt.setString(1, stu.getName()); //给年龄赋值 ptmt.setInt(2, stu.getAge()); ptmt.setInt(3, stu.getId()); //执行 sql 语句 ptmt.execute(); } //4.查所有 public static void query(Student stu ) throws Exception{ //通过工具类,获取数据库链接对象 Connection conn= DBUtil.getConn(); //创建 sql 语句 String sql = "select * from Student"; //创建 预加载 的sql 语句执行对象 Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery(sql); while(rs.next()){ System.out.println("id:"+rs.getInt("id")+"\t \tname:"+rs.getString("name")+"\tage"+rs.getInt("age")); } } //5.查某个 public static void queryWithId(Integer id) throws Exception{ Connection conn= DBUtil.getConn(); //创建 sql 语句 String sql = "select * from Student where id=?"; //创建 预加载 的sql 语句执行对象 PreparedStatement ptmt= conn.prepareStatement(sql); ptmt.setInt(1, id); ResultSet rs=ptmt.executeQuery(); while(rs.next()){ System.out.println("id:"+rs.getInt("id")+"\t \tname:" +rs.getString("name")+"\tage:"+rs.getInt("age")); } } //6.条件查询 public static void queryWithParam(List<Map<String,Object>>param) throws Exception{ Connection conn= DBUtil.getConn(); //创建 sql 语句 StringBuffer sql = new StringBuffer(); sql.append("select * from Student where 1=1"); for (Map<String, Object> map : param) { sql.append(" and "+map.get("key") +"="+map.get("value")); } //创建 预加载 的sql 语句执行对象 PreparedStatement ptmt= conn.prepareStatement(sql.toString()); ResultSet rs=ptmt.executeQuery(); while(rs.next()){ System.out.println("id:"+rs.getInt("id")+"\t \tname:" +rs.getString("name")+"\tage:"+rs.getInt("age")); } } }
(4)actich层,控制层
package com.j1702.action; import com.j1702.dao.StudentDao; import com.j1702.model.Student; //这一层是我们的controller 层:他是view和model层的服务员 public class StudentAction { //想数据库中插入一条数据 public static void insert(Student stu) throws Exception{ StudentDao.add( stu); } //根据传入的id 删除学生 public static void delete(Integer id) throws Exception{ StudentDao.delete(id); } //更新学生信息数据 public static void update(Student stu) throws Exception{ StudentDao.update(stu); } //查找Student public static void find(Integer id) throws Exception{ StudentDao.queryWithId(id); } }
(5)view层:TestView.java 终端操作界面层
package com.j1702.view; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; import com.j1702.dao.*; import com.j1702.db.DBUtil; import com.j1702.model.Student; public class TestView { public static void main(String[] args) throws Exception{ //编程以终端为view 层,实现数据的增、删、改 /** * 请输入你要做的操作:A-添加,D-删除,U更新,F-查询,exit-退出 * * A 请输入插入的数据 name,age,address * */ login(); } public static void login(){ System.out.println("请输入你要做的操作:A-添加,D-删除,U更新,F-查询,exit-退出"); Scanner in= new Scanner (System.in); String xz=in.next(); switch(xz){ case "A" : try { add(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case "D": try { delete(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case "U": try { update(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case "F" : find(); break; case "exit": exit(); break; default : System.out.println("没有你输入的选项,请重新选择"); login(); } } public static void add() throws Exception{ Student stu=new Student(); System.out.println("请输入插入的数据 name:"); Scanner cn=new Scanner (System.in); String name=cn.next(); System.out.println("请输入插入的数据 age:"); Scanner ca=new Scanner (System.in); int age=ca.nextInt(); System.out.println("请输入插入的数据 address :"); Scanner cd=new Scanner (System.in); String address = cd.next(); stu.setName(name); stu.setAge(age); stu.setAddress(address); StudentDao l1 =new StudentDao(); l1.add(stu); System.out.println("数据插入成功!"); System.out.println("请选择:1 继续插入数据, 2.返回上一层"); Scanner in= new Scanner (System.in); int x2=in.nextInt(); switch (x2) { case 1: add(); break; case 2: login(); break; default: System.out.println("没有你要的选项,请重新输入!"); } } public static void delete() throws Exception{ Connection conn= DBUtil.getConn(); System.out.println("请输入你要删除数据的ID"); Scanner in=new Scanner (System.in); Integer xid=in.nextInt(); StudentDao l2=new StudentDao(); l2.delete(xid); System.out.println("数据删除成功!"); System.out.println("请选择:1 继续继续数据, 2.返回上一层"); Scanner in1= new Scanner (System.in); int x2=in1.nextInt(); switch (x2) { case 1: delete(); break; case 2: login(); break; default: System.out.println("没有你要的选项,请重新输入!"); } } public static void update() throws Exception{ Student stu1=new Student(); System.out.println("请输入修改的数据 ID:"); Scanner ci=new Scanner (System.in); int id=ci.nextInt(); System.out.println("请输入修改的数据 name:"); Scanner cn1=new Scanner (System.in); String name=cn1.next(); System.out.println("请输入修改的数据 age:"); Scanner ca1=new Scanner (System.in); int age=ca1.nextInt(); System.out.println("请输入修改的数据 address :"); Scanner cd1=new Scanner (System.in); String address = cd1.next(); stu1.setId(id); stu1.setName(name); stu1.setAge(age); stu1.setAddress(address); StudentDao l3=new StudentDao(); l3.update(stu1); System.out.println("数据修改成功!"); System.out.println("请选择:1 继续修改数据, 2.返回上一层"); Scanner in1= new Scanner (System.in); int x2=in1.nextInt(); switch (x2) { case 1: update(); break; case 2: login(); break; default: System.out.println("没有你要的选项,请重新输入!"); } } public static void find(){ System.out.println("请选择:1.查询所有 2.查询某个 3.条件查询"); Scanner in= new Scanner (System.in); int xz3=in.nextInt(); switch(xz3){ case 1: Student stu=new Student(); StudentDao st=new StudentDao(); try { st.query(stu); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } cgf(); break; case 2: System.out.println("请输入要查询的ID:"); Scanner cid=new Scanner(System.in); Integer id1=cid.nextInt(); try { StudentDao st1=new StudentDao(); st1.queryWithId(id1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } cgf(); break; case 3: tiaojian(); break; } } public static void exit(){ System.out.println("谢谢使用,再见!"); return; } public static void cgf(){ System.out.println("数据查询成功!"); System.out.println("请选择:1 继续查询数据, 2.返回上一层"); Scanner in3= new Scanner (System.in); int x3=in3.nextInt(); switch (x3) { case 1: find(); break; case 2: login(); break; default: System.out.println("没有你要的选项,请重新输入!"); } } public static void cgf1(){ System.out.println("数据查询成功!"); System.out.println("请选择:1 继续查询数据, 2.返回上一层"); Scanner in3= new Scanner (System.in); int x3=in3.nextInt(); switch (x3) { case 1: tiaojian(); break; case 2: login(); break; default: System.out.println("没有你要的选项,请重新输入!"); } } public static void tiaojian(){ System.out.println("请选择要查询的字段:1.id 查询 2.name 查询 3.age 查询 4.address 查询"); Scanner tjcx=new Scanner(System.in); int tx3=tjcx.nextInt(); switch(tx3){ case 1: System.out.println("请输入要查询的ID:"); Scanner cid=new Scanner(System.in); Integer id1=cid.nextInt(); try { StudentDao st1=new StudentDao(); st1.queryWithId(id1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } cgf1(); break; case 2: System.out.println("请输入你要查询的 name:"); Scanner cn1=new Scanner(System.in); String sname1=cn1.next(); Map<String,Object> map = new HashMap<String,Object>(); map.put("key", "name"); map.put("value",sname1); List<Map<String,Object>> li= new ArrayList<Map<String,Object>>(); li.add(map); try { StudentDao l4=new StudentDao(); l4.queryWithParam1(li); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } cgf1(); break; case 3: System.out.println("请输入你要查询的 age:"); Scanner cn2=new Scanner(System.in); String sage=cn2.next(); Map<String,Object> map1 = new HashMap<String,Object>(); map1.put("key", "age"); map1.put("value",sage); List<Map<String,Object>> li1= new ArrayList<Map<String,Object>>(); li1.add(map1); try { StudentDao l4=new StudentDao(); l4.queryWithParam2(li1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } cgf1(); break; case 4: System.out.println("请输入你要查询的 address:"); Scanner cn3=new Scanner(System.in); String sadd=cn3.next(); Map<String,Object> map2 = new HashMap<String,Object>(); map2.put("key", "address"); map2.put("value",sadd); List<Map<String,Object>> li2= new ArrayList<Map<String,Object>>(); li2.add(map2); try { StudentDao l4=new StudentDao(); l4.queryWithParam3(li2); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } cgf1(); break; } } }