JDBC1

本文介绍了JDBC(Java Database Connectivity)的基本概念,包括JDBC的作用、访问数据库所需的类、接口和方法。详细讲解了DriverManager类、Connection接口、Statement接口、PreparedStatement接口以及ResultSet接口的使用,还涵盖了JDBC访问数据库的流程。
摘要由CSDN通过智能技术生成

JDBC1

1.JDBC是什么?

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

      我们通常说的JDBC是面向关系型数据库的。

2.JDBC访问数据库需要用到的类、接口、方法?

      2.1 java.sqlDriverManager类--负责加载各种不同驱动程序(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.sqlConnection接口---数据库连接,负责与进行数据库间通讯,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.sqlPreparedStatement接口--用以执行包含动态参数的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.sqlResultSet接口 --- 数据库结果集的数据表,通常通过执行查询数据库的语句生成。

            ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

            默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。

            boolean  next()--将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false。在 while 循环中使用它来迭代结果集。

            由于通过next方法将指针移动到下一行,我们现在就可以取出指针指向的当前行的数据值。要获取当前行中保存的数据值,就需要一列一列的取出数据值,所以ResultSet会有一组获取指定列数据的方法。

            getXXXX(int colindex)---int colindex[当前需要获取数据值的列在当前行中的位置【从1开始】]

            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(1);

            int  id=ResultSet对象.getInt(“id”);

            //id==1

            String name=ResultSet对象.getString(2);

            String name=ResultSet对象.getString(“name”);

            //name==zhangsan

            int  age=ResultSet对象.getInt(3);

            int  age=ResultSet对象.getInt(“age”);

            //age==23

      3.JDBC访问数据库的流程

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

1、创建数据库表

create table t_user(
t_id int primary key auto_increment,
t_name char(20),
t_age int,
t_address char(20)
);

2、创建java项目,导入数据库启动包

3、创建保存用户信息的java类

package com.wangxing.jdbcdemo1.bean;
/**
 * 保存用户信息的java类
 * @author Administrator
 *
 */
public class UserBean {
	private int id;
	private String name;
	private int age;
	private String address;
	public int getId(){
		return id;
	}
	public void setId(int id){
		this.id=id;
	}
	public String getname(){
		return name;
	}
	public void setname(String name){
		this.name=name;
	}
	public int getAge(){
		return age;
	}
	public void setAge(int age){
		this.age=age;
	}
	public String getAddress(){
		return address;
	}
	public void setAddress(String address){
		this.address=address;
	}
}

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

package com.wangxing.jdbcdemo1.bean;

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/jdbc";
	//定义数据库的登录名
	private static final String USERNAME="root";
	//定义数据库的登录密码
	private static final String PASSWORD="200120";
	//加载数据库驱动[静代码块]
	static{
		try{
			Class.forName(DRIVERNAME);
		}catch(Exception e){
			System.out.println("数据库驱动加载失败");
			e.printStackTrace();
		}
	}
	/**
	 * 得到数据库连接对象
	 */
	public static Connection getMyConnection(){
		Connection connection=null;
		try {
			connection=DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (SQLException e) {
			System.out.println("数据库连接获取失败");
			e.printStackTrace();
		}
		return connection;
	}
}

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

package com.wangxing.jdbcdemo1.bean;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * 用户数据表的访问对象
 * @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.getname()+"',"+userBean.getAge()+",'"+userBean.getAddress()+"');";
			System.out.println(insert);
			//创建Statement对象
			statement=conn.createStatement();
			//执行添加sql
			int temp=statement.executeUpdate(insert);
			if(temp>0){
				System.out.println("添加信息成功");
			}
		} catch (SQLException e) {
			System.out.println("添加信息失败");
			e.printStackTrace();
		}finally{
			if(statement!=null && conn!=null){
				try {
					statement.close();
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	//根据用户id修改用户信息
	public void updataUser(UserBean userBean){
		Connection conn=null;
		Statement statement=null;
		try {
			//得到数据库连接
			conn=DBConnection.getMyConnection();
			//创建修改数据的sql语句
			String updat="update t_user set t_name='" + userBean.getname() + "',t_age=" + userBean.getAge()
				+ ",t_address='" + userBean.getAddress() + "' where t_id=" + userBean.getId() + ";";
			System.out.println(updat);
			//创建Statement对象
			statement=conn.createStatement();
			//执行修改sql
			int temp= statement.executeUpdate(updat);
			System.out.println(temp);
			if(temp>0){
				System.out.println("修改信息成功");
			}
		} catch (SQLException e) {
			System.out.println("修改信息失败");
			// TODO Auto-generated catch block
			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;
		//得到数据库连接
		conn=DBConnection.getMyConnection();
		//创建根据用户id查询用户信息的sql语句
		String select="select * from t_user where t_id="+userid+";";
		System.out.println(select);
		try {
			//创建Statement对象
			statement=conn.createStatement();
			//执行查询sql语句
			resultset=statement.executeQuery(select);
			if(resultset.next()){
				int id=resultset.getInt("t_id");
				String name=resultset.getString("t_name");
				int age=resultset.getInt("t_age");
				String address=resultset.getString("t_address");
				userbean=new UserBean();
				userbean.setId(id);
				userbean.setname(name);
				userbean.setAge(age);
				userbean.setAddress(address);
			}
		} catch (SQLException e) {
			System.out.println("查询信息失败");
			// TODO Auto-generated catch block
			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> list=new ArrayList<UserBean>();
		Connection conn=null;
		Statement statement=null;
		ResultSet resultset=null;
		//得到数据库连接
		conn=DBConnection.getMyConnection();
		//创建查询所有用户信息的sql语句
		String select="select * from t_user;";
		try {
			//得到Statement对象
			statement=conn.createStatement();
			//执行查询sql语句
			resultset=statement.executeQuery(select);
			while(resultset.next()){
				int id=resultset.getInt("t_id");
				String name =resultset.getString("t_name");
				int age=resultset.getInt("t_age");
				String address=resultset.getString("t_address");
				UserBean userbean=new UserBean();
				userbean.setId(id);
				userbean.setname(name);
				userbean.setAge(age);
				userbean.setAddress(address);
				list.add(userbean);
			}
		} catch (SQLException e) {
			System.out.println("查询信息失败");
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(resultset!=null && statement!=null && conn!=null){
				try{
					resultset.close();
					conn.close();
					statement.close();
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		}
		return list;
	}
	
	//根据id删除信息
	public void deleteUserById(int userid){
		Connection conn=null;
		Statement statement=null;
		//获取数据库连接
		conn=DBConnection.getMyConnection();
		//创建根据id删除信息的sql语句
		String delete="delete from t_user where t_id="+userid+";";
		System.out.println(delete);
		try {
			//获取Statement对象
			statement=conn.createStatement();
			//执行删除sql语句
			int temp=statement.executeUpdate(delete);
			if(temp>0){
				System.out.println("删除信息成功");
			}
		} catch (SQLException e) {
			System.out.println("删除信息失败");
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(statement!=null && conn!=null){
				try{
					statement.close();
					conn.close();
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		}
	}
}

测试

package com.wangxing.jdbcdemo1.bean;

import java.util.ArrayList;
import java.util.List;

public class TestMain {
	public static void main(String args[]){
		//测试添加数据 
//		UserBean userbean=new UserBean();
//		userbean.setname("zhangsan");
//		userbean.setAge(23);
//		userbean.setAddress("西安");
//		UserDaoObject userDao=new UserDaoObject();
//		userDao.insertUser(userbean);
		
		//测试修改数据
//		UserBean userbean=new UserBean();
//		userbean.setId(1);
//		userbean.setname("wangwu");
//		userbean.setAge(55);
//		userbean.setAddress("上海");
//		UserDaoObject userDao=new UserDaoObject();
//		userDao.updataUser(userbean);
		
		//测试根据id查询用户信息
//		UserDaoObject userDao=new UserDaoObject();
//		UserBean user=userDao.selectUserById(2);
//		if(user!=null){
//			System.out.println(user.getId()+"\t"+user.getname()+"\t"+user.getAge()+"\t"+user.getAddress());
//		}
		
		//测试查询所有用户信息
//		UserDaoObject userDao=new UserDaoObject();
//		List<UserBean> list=new ArrayList<UserBean>();
//		list=userDao.selectUser();
//		if(list.size()>0){
//			for(UserBean user:list){
//				System.out.println(user.getId()+"\t"+user.getname()+"\t"+user.getAge()+"\t"+user.getAddress());
//			}
//		}
		
		//测试根据id删除用户信息
		UserDaoObject userDao=new UserDaoObject();
		userDao.deleteUserById(1);
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值