java---JDBC

1. JDBC是什么?
DBC(java database connectivity)Java数据库连接。是Java语言中用来规范客户端程序如何来访问数据库[关系型数据库]的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

我们通常说的JDBC是面向关系型数据库的。
在这里插入图片描述

2. JDBC访问数据库需要用到的类、接口、方法?
2.1 java.sql包DriverManager类–负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接。 驱动程序,会将自身加载到DriverManager中去。
2.1.1数据驱动程序(Driver)— 根据所连接的数据库不同需要下载对应数据库的驱动程序。

例如:MySQL数据库----https://downloads.mysql.com/archives/c-j/
mysql-connector-java-5.1.38-bin.jar
通过java的反射机制,来给DriverManager,提供被加载的数据库驱动名称。
Class.forName(“数据库驱动名称【包名+类名】”);
数据库驱动名称来自mysql-connector-java-5.1.38-bin.jar中Driver的java类的全名称。
Class.forName(“com.mysql.jdbc.Deiver”);

2.1.2向调用者返回相应的数据库连接
DriverManager类中的静态方法getConnection(url,username,password)向调用者返回相应的数据库连接
static Connection getConnection(url,username,password)
参数url—指定被连接的数据库位置
【jdbc:mysql://数据库服务器IP:端口/数据库名称】
参数username—登陆数据库服务器的用户名
参数password----登陆数据库服务器的密码

2.2 java.sql包Connection接口—数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
1.产生用以执行SQL的Statement。
[用以执行SQL查询和更新(针对静态SQL语句和单次执行)]
Statement createStatement()
select * from t_user where uid=12;[拼接字符串]
2.产生用以执行SQL的PreparedStatement。
[用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)]
PreparedStatement prepartatement(Sql)
参数sql—包含动态参数的SQL语句
select * from t_user where uid=?;【需要给sql动态传递参数值】
?—占位符
2.3 java.sql包Statement接口—用以执行SQL查询和更新(针对静态SQL语句和单次执行)
以执行SQL更新【insert / update /delete】
int executeUpdate(SQL)
参数SQL—[insert / update /delete]字符串类型的sql语句。
以执行SQL查询【select】
ResultSet executeQuery(SQL)
参数SQL—[select]字符串类型的sql语句。
2.4 java.sql包PreparedStatement接口–用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)
以执行SQL更新【insert / update /delete】
int executeUpdate()
以执行SQL查询【select】
ResultSet executeQuery()
注意:PreparedStatement需要执行的sql语句

  1. sql语句是在创建PreparedStatement对象的时候传入执行,不是在调用executeUpdate()/executeQuery()的时候传入。
  2. PreparedStatement对象所执行的sql语句中有“?【占位符】”
    有一组填补sql语句占位符的方法
    setInt(参数1,参数2) int–int
    setLong(参数1,参数2) long—bigint
    setDouble(参数1,参数2) double–double
    setString(参数1,参数2) String–varchar/char

    参数1—SQL语句中“?”的位置【从1开始】
    参数2—SQL语句中“?”具体数据值
    2.5.java.sql包ResultSet接口 — 数据库结果集的数据表,通常通过执行查询数据库的语句生成。
    ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
    默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。
    在这里插入图片描述
    boolean next()–将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false。在 while 循环中使用它来迭代结果集。
    由于通过next方法将指针移动到下一行,我们现在就可以取出指针指向的当前行的数据值。要获取当前行中保存的数据值,就需要一列一列的取出数据值,所以ResultSet会有一组获取指定列数据的方法。
    getXXXX(int colindex)—int colindex[当前需要获取数据值的列在当前行中的位置【从0开始】]
    getXXXX(String colname)–String colname[当前需要获取数据值的列名称]
1 [int]–[id]Zhangsan [varchar]–[name]23 [int]–[age]
2[int]–[id]Lisi [varchar]–[name]24 [int]–[age]
3[int]–[id]Wangwu [varchar]–[name]25 [int]–[age]
通过ResultSet对象得到第一行数据值
int  id=ResultSet对象.getInt(0);
int  id=ResultSet对象.getInt(“id”);
//id==1
String name=ResultSet对象.getString(1);
String name=ResultSet对象.getString(“name”);
//name==zhangsan
int  age=ResultSet对象.getInt(2);
int  age=ResultSet对象.getInt(“age”);
//age==23

3.JDBC访问数据库的流程
在这里插入图片描述

1.测试基于Statement接口的数据库访问

1、创建数据库表

create  table t_user(
u_id  int  primary key auto_increment,
u_name varchar(20),
u_age int,
u_address varchar(30)
);

2、创建java项目,导入数据库启动包
3、创建保存用户信息的java类

package com.wangxing.jdbcdemo1.bean;
/**
 * 保存用户信息的java类
 * @author Administrator
 *
 */
public class UserBean {
	private  int  uid;
	private  String uname;
	private  int uage;
	private  String uaddress;
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public int getUage() {
		return uage;
	}
	public void setUage(int uage) {
		this.uage = uage;
	}
	public String getUaddress() {
		return uaddress;
	}
	public void setUaddress(String uaddress) {
		this.uaddress = uaddress;
	}
}

4、创建数据库驱动管理类

package com.wangxing.jdbcdemo1.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 数据库驱动管理类--加载数据库启动,得到数据库连接
 * @author Administrator
 *
 */
public class DBConnection {
	//定义数据库表驱动名称
	private static  final String DRIVERNAME="com.mysql.jdbc.Driver";
	//定义数据库的url
	//【jdbc:mysql://数据库服务器IP:端口/数据库名称】
	private static  final String URL="jdbc:mysql://127.0.0.1:3306/test";
	//定义数据库的登陆名
	private static  final String USERNAME="root";
	//定义数据库的登陆密码
	private static  final String PASSWORD="123456";
	//加载数据库驱动
	static{
		try {
			Class.forName(DRIVERNAME);
		} catch (ClassNotFoundException e) {
			System.out.println("数据库驱动加载失败!");
			e.printStackTrace();
		}
	}
	/**
	 * 得到数据库连接对象
	 */
	public static  Connection getMyConnection(){
		Connection  conncetion=null;
		try {
			conncetion=DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (SQLException e) {
			System.out.println("数据库连接获取失败!");
			e.printStackTrace();
		}
		return conncetion;
	}
}

5.创建数据库用户表信息的访问类

package com.wangxing.jdbcdemo1.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.wangxing.jdbcdemo1.bean.UserBean;
import com.wangxing.jdbcdemo1.db.DBConnection;
/**
 * 用户数据库表的访问对象
 * 
 * @author Administrator
 *
 */
public class UserDaoObject {
	// 添加用户信息
	public void insertUser(UserBean userBean) {
		Connection conn = null;
		Statement statement = null;
		try {
			// 得到数据库连接
			conn = DBConnection.getMyConnection();
			// 创建添加数据的sql语句
			String insert = "insert into t_user values(null,'" + userBean.getUname() + "'," + userBean.getUage() + ",'"
					+ userBean.getUaddress() + "');";
			System.out.println(insert);
			// 创建Statement对象
			statement = conn.createStatement();
			// 执行添加sql
			int temp = statement.executeUpdate(insert);
			if (temp > 0) {
				System.out.println("添加信息成功");
			}
		} catch (Exception e) {
			System.out.println("添加信息失败");
			e.printStackTrace();
		} finally {
			if (statement != null && conn != null) {
				try {
					statement.close();
					conn.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

	// 根据用户id修改用户信息
	public void updateUser(UserBean userBean) {
		Connection conn = null;
		Statement statement = null;
		try {
			// 得到数据库连接
			conn = DBConnection.getMyConnection();
			// 创建修改数据的sql语句
			String update = "update t_user set u_name='" + userBean.getUname() + "',u_age=" + userBean.getUage()
					+ ",u_address='" + userBean.getUaddress() + "' where u_id=" + userBean.getUid() + ";";
			System.out.println(update);
			// 创建Statement对象
			statement = conn.createStatement();
			// 执行修改sql
			int temp = statement.executeUpdate(update);
			if (temp > 0) {
				System.out.println("修改信息成功");
			}
		} catch (Exception e) {
			System.out.println("修改信息失败");
			e.printStackTrace();
		} finally {
			if (statement != null && conn != null) {
				try {
					statement.close();
					conn.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

	// 根据用户id查询用户信息
	public UserBean selectUserById(int userid) {
		UserBean  userbean=null;
		Connection conn = null;
		Statement statement = null;
		ResultSet resultSet=null;
		try {
			// 得到数据库连接
			conn = DBConnection.getMyConnection();
			// 创建根据用户id查询用户信息sql语句
			String select = "select * from t_user where u_id="+userid+";";
			System.out.println(select);
			// 创建Statement对象
			statement = conn.createStatement();
			// 执行查询sql
			resultSet=statement.executeQuery(select);
			if(resultSet.next()){
				int id=resultSet.getInt("u_id");
				String name=resultSet.getString("u_name");
				int age=resultSet.getInt("u_age");
				String address=resultSet.getString("u_address");
				userbean=new UserBean();
				userbean.setUid(id);
				userbean.setUname(name);
				userbean.setUage(age);
				userbean.setUaddress(address);
			}
		} catch (Exception e) {
			System.out.println("查询信息失败");
			e.printStackTrace();
		} finally {
			if (resultSet!=null && statement != null && conn != null) {
				try {
					resultSet.close();
					statement.close();
					conn.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return userbean;
	}

	// 查询所有用户信息
	public List<UserBean> selectUser() {
		List<UserBean> userlist=new ArrayList<UserBean>();
		Connection conn = null;
		Statement statement = null;
		ResultSet resultSet=null;
		try {
			// 得到数据库连接
			conn = DBConnection.getMyConnection();
			// 创建查询所有用户信息sql语句
			String select = "select * from t_user;";
			System.out.println(select);
			// 创建Statement对象
			statement = conn.createStatement();
			// 执行查询sql
			resultSet=statement.executeQuery(select);
			while(resultSet.next()){
				int id=resultSet.getInt("u_id");
				String name=resultSet.getString("u_name");
				int age=resultSet.getInt("u_age");
				String address=resultSet.getString("u_address");
				UserBean userbean=new UserBean();
				userbean.setUid(id);
				userbean.setUname(name);
				userbean.setUage(age);
				userbean.setUaddress(address);
				userlist.add(userbean);
			}
		} catch (Exception e) {
			System.out.println("查询信息失败");
			e.printStackTrace();
		} finally {
			if (resultSet!=null && statement != null && conn != null) {
				try {
					resultSet.close();
					statement.close();
					conn.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return userlist;
	}

	// 根据id删除用户信息
	public void deleteUserById(int userid) {
		Connection conn = null;
		Statement statement = null;
		try {
			// 得到数据库连接
			conn = DBConnection.getMyConnection();
			// 创建删除数据的sql语句
			String delete = "delete from t_user where u_id="+userid+";";
			System.out.println(delete);
			// 创建Statement对象
			statement = conn.createStatement();
			// 执行删除sql
			int temp = statement.executeUpdate(delete);
			if (temp > 0) {
				System.out.println("删除信息成功");
			}
		} catch (Exception e) {
			System.out.println("删除信息失败");
			e.printStackTrace();
		} finally {
			if (statement != null && conn != null) {
				try {
					statement.close();
					conn.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}

测试:

package com.wangxing.jdbcdemo1.test;

import java.util.List;

import com.wanging.jdbcdemo1.bean.UserBean;
import com.wangxing.jdbcdemo1.dao.UserDaoObject;

public class TestMain {
/**
 * 
 * @param args
 */
	public static void main(String[] args) {
		/*
		//测试添加数据
		UserBean userbean=new UserBean();
		userbean.setUname("张三");
		userbean.setUage(23);
		userbean.setUaddress("西安");
		UserDaoObject userDao=new UserDaoObject();
		userDao.insertUser(userbean);
		*/
		
		/*
		// 测试修改数据
		UserBean userbean = new UserBean();
		userbean.setUid(2);
		userbean.setUname("王五");
		userbean.setUage(55);
		userbean.setUaddress("上海");
		UserDaoObject userDao = new UserDaoObject();
		userDao.updateUser(userbean);
		*/
		
		/*
		//根据用户id查询用户信息
		UserDaoObject userDao = new UserDaoObject();
		UserBean userbean=userDao.selectUserById(2);
		System.out.println(userbean.getUname()+"\t"+userbean.getUage()+"\t"+userbean.getUaddress());
		*/
		
		/*
		//查询所有用户信息
		UserDaoObject userDao = new UserDaoObject();
		List<UserBean> userlist=userDao.selectUser();
		if(userlist.size()>0){
		for(UserBean user:userlist){
			System.out.println(user.getUname()+"\t"+user.getUage()+"\t"+user.getUaddress());
		  }
		}else{
			System.out.println("没有数据");
		}
		*/
		
		/*
		//根据id删除用户信息
		UserDaoObject userDao = new UserDaoObject();
		userDao.deleteUserById(2);
		*/
		
		
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值