12.数据库【JDBC】

12.数据库【JDBC
1.JDBC是什么?
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
Jdbc作用就是访问数据库。
在这里插入图片描述
首先我们知道我们是通过java程序去访问MySQL数据库的,java程序它只认识java对象;
其次被我们通过java程序所访问的数据库是关系型数据库MySQL,关系型数据库它只认识SQL语句;
那么我们的Java对象怎么要被转换成数据库所能认识的sql语句,以及数据库执行执行完成一个sql语句之后的结果,又怎么被转换成java对象,被java程序包识别???
这时我们就要去下载一个数据库驱动程序,这个数据库驱动程序可以帮助我们连接数据库,将java对象转换成sql语句由数据库去执行,并将数据库的执行结果,转成java对象,供我们的java程序使用。
说白了就是我们想要使用java程序访问mysql数据库,还需要下载一个mysql数据驱动程序。
2.Jdbc访问数据库需要用到的类,接口,方法?
Jdbc访问数据库需要的元素
1.数据库驱动程序【数据库驱动包】–自己下载
https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38
您要连接什么数据库,那么你就下载什么数据库的驱动。
2.java反射机制【Class.forname(classname)】–加载数据库驱动
3.java.sql.Connection接口
[与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。]
如何得到Connection接口
4.java.sql.DriverManager类[管理一组 JDBC 驱动程序的基本服务]
static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
url - jdbc:subprotocol:subname 形式的数据库 url[数据库位置]
user - 数据库用户,连接是为该用户建立的
password - 用户的密码
5.java.sql.Statement接口 [用于执行静态 SQL 语句并返回它所生成结果的对象]
如何得到Statement接口对象:
通过Connection接口得到Statement接口对象
1.Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
如何发送SQL语句给数据库执行
1.添加【insert…】,修改【update…】,删除【delete…】操作
int executeUpdate(String sql) 执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句
2.查询【select…】操作
ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
6.java.sql.PreparedStatement接口【SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。】
如何得到PreparedStatement接口对象:
通过Connection接口得到Statement接口对象
PreparedStatement prepareStatement(String sql)throws SQLException创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库
1.添加【insert…】,修改【update…】,删除【delete…】操作
int executeUpdate() 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。
2.查询【select…】操作
ResultSet executeQuery()
在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

可以为java程序表示的sql语句传递参数
void setXXXXX(int parameterIndex,Object x)throws SQLException
parameterIndex -第一个参数是 1,第二个参数是 2,……
Object x–实际数据值

7.java.sql.ResultSet[表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。]
Object getXXXXXX(int columnIndex)
columnIndex - 第一个列是 1,第二个列是 2,……
Object getXXXXXX(String columnLabel)
columnLabel- 列名
boolean next()将光标从当前位置向前移一行。
3.Jdbc访问数据库的流程?
在这里插入图片描述
JDBC访问数据库实例
1.下载数据库驱动包“mysql-connector-java-5.1.38.jar”
2.打开数据库创建保存数据的数据表
–创建数据库表
create table t_person(
per_id int primary key auto_increment,
per_name varchar(20),
per_age int,
per_sex bit,
per_address varchar(30)
);
3.创建一个普通的java工程
4.导入数据库驱动包到java工程
1.在java工程下创建一个“lib”文件夹,将下载好的数据库驱动赋值到lib文件夹中
2.选中工程—右键–Bulid Path–Configure Bulid Path–Libraries–Add Jars…–自己工程—lib–数据库驱动包—选中—OK
5.参照数据库表创建保存数据的java类

package com.click369.bean;
import java.io.Serializable;
/**
 * 保存个人信息的java类
 * @author Administrator
 *
 */
@SuppressWarnings("serial")
public class Person implements Serializable{
	private  int perid;
	private  String pername;
	private int perage;
	private boolean persex;
	private  String peraddress;
	public int getPerid() {
		return perid;
	}
	public void setPerid(int perid) {
		this.perid = perid;
	}
	public String getPername() {
		return pername;
	}
	public void setPername(String pername) {
		this.pername = pername;
	}
	public int getPerage() {
		return perage;
	}
	public void setPerage(int perage) {
		this.perage = perage;
	}
	public boolean isPersex() {
		return persex;
	}
	public void setPersex(boolean persex) {
		this.persex = persex;
	}
	public String getPeraddress() {
		return peraddress;
	}
	public void setPeraddress(String peraddress) {
		this.peraddress = peraddress;
	}
}

6.加载数据库驱动得到数据库连接

package com.click369.db;
/**
 * 数据库连接的管理类
 * 1.加载数据库驱动
 * 2.得到数据库连接
 * @author Administrator
 *
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class  DBConnection{
	//定义数据库驱动名称
	private  static  final String DRIVERNAME="com.mysql.jdbc.Driver";
	//定义连接数据库的url
	private  static  final String URL="jdbc:mysql://127.0.0.1:3306/mydb1";
	//定义数据库访问用户名
	private static final String USERNAME="root";
	//定义访问数据库的密码
	private static final String PASSWORD="123456";
	
	//加载数据库驱动
	//1.构造方法加载数据库驱动
	/*
	public  DBConnection(){
		//通过反射机制加载数据库驱动
		try {
			Class.forName(DRIVERNAME);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	*/
	//2.通过静态代码块加载驱动
	static{
		//通过反射机制加载数据库驱动
				try {
					Class.forName(DRIVERNAME);
				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				}
	   }
	/**
	 * 得到数据库连接
	 */
	public static Connection getMyConnection(){
		 //定义数据库连接对象
		Connection conn=null;
		//得到数据库连接
		try {
			conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
}

7.用Statement完成具体的增删改查操作

package com.click369.dbao;

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

import com.click369.bean.Person;
import com.click369.db.DBConnection;

/**
 * 用Statement完成具体的增删改查操作
 * @author Administrator
 *
 */
public class StatementPerson {
    /**
     * 完成Person数据的添加
     * @param person
     * @return
     * @throws Exception
     */
	public  boolean insertPerson(Person person)throws Exception{
		   boolean  flag=false;
		   Connection  conn=null;
		   Statement  statement=null;
		   conn=DBConnection.getMyConnection();
		   statement= conn.createStatement();
		   String insertsql="insert into t_person values(null,'"+person.getPername()
		                             +"',"+person.getPerage()+","+person.isPersex()+",'"+person.getPeraddress()+"');";
		   System.out.println(insertsql);
		   if(statement.executeUpdate(insertsql) > 0) flag=true;
		   statement.close();
		   conn.close();
		   return flag;
	}
	
	/**
     * 完成Person数据的修改
     * @param person
     * @return
     * @throws Exception
     */
	public  boolean updatePerson(Person person)throws Exception{
		   boolean  flag=false;
		   Connection  conn=null;
		   Statement  statement=null;
		   conn=DBConnection.getMyConnection();
		   statement= conn.createStatement();
		   StringBuilder updatesql=new StringBuilder();
		   updatesql.append("update t_person set per_name='"+person.getPername()+"',");
		   updatesql.append("per_age="+person.getPerage()+",");
		   updatesql.append("per_sex="+person.isPersex()+",");
		   updatesql.append("per_address='"+person.getPeraddress()+"' ");
		   updatesql.append("where per_id="+person.getPerid()+";");
		   System.out.println(updatesql.toString());
		   if(statement.executeUpdate(updatesql.toString()) > 0) flag=true;
		   statement.close();
		   conn.close();
		   return flag;
	}
	/**
     * 完成Person数据的删除
     * @param person
     * @return
     * @throws Exception
     */
	public  boolean deletePerson(int perid)throws Exception{
		   boolean  flag=false;
		   Connection  conn=null;
		   Statement  statement=null;
		   conn=DBConnection.getMyConnection();
		   statement= conn.createStatement();
		  String  deletesql="delete from  t_person where per_id="+perid+";";
		   System.out.println(deletesql);
		   if(statement.executeUpdate(deletesql) > 0) flag=true;
		   statement.close();
		   conn.close();
		   return flag;
	}
	
	/**
     * 完成Person数据的查询所有
     * @param person
     * @return
     * @throws Exception
     */
	public  List<Person> selectPerson()throws Exception{
		  List<Person>  personList=null;
		   Connection  conn=null;
		   Statement  statement=null;
		   ResultSet  resultSet=null;
		   conn=DBConnection.getMyConnection();
		   statement= conn.createStatement();
		  String  selectsql="select * from t_person;";
		   System.out.println(selectsql);
		   resultSet=statement.executeQuery(selectsql);
		   personList=new ArrayList<Person>();
		   while(resultSet.next()){
			   //得到每一行中每一个列的具体数据值
			 int perid=resultSet.getInt("per_id");
			 String  pername=resultSet.getString("per_name");
			 int perage=resultSet.getInt("per_age");
			boolean persex= resultSet.getBoolean("per_sex");
			String peraddress=resultSet.getString("per_address");
			//将得到的每一列数据保存java对象
			Person  person=new Person();
			person.setPerid(perid);
			person.setPername(pername);
			person.setPerage(perage);
			person.setPersex(persex);
			person.setPeraddress(peraddress);
			//将保存有数据的java对象添加到集合中
			personList.add(person);
		   }
		   resultSet.close();
		   statement.close();
		   conn.close();
		   return personList;
	}
	
	/**
     * 完成Person数据根据id查询的操作
     * @param person
     * @return
     * @throws Exception
     */
	public  Person selectPersonById(int perid)throws Exception{
		   Person  person=null;
		   Connection  conn=null;
		   Statement  statement=null;
		   ResultSet  resultSet=null;
		   conn=DBConnection.getMyConnection();
		   statement= conn.createStatement();
		  String  selectsqlbyid="select * from t_person  where per_id="+perid+";";
		   System.out.println(selectsqlbyid);
		   resultSet=statement.executeQuery(selectsqlbyid);
		   if(resultSet.next()){
			   //得到一行中每一个列的具体数据值
			 int perid1=resultSet.getInt("per_id");
			 String  pername=resultSet.getString("per_name");
			 int perage=resultSet.getInt("per_age");
			boolean persex= resultSet.getBoolean("per_sex");
			String peraddress=resultSet.getString("per_address");
			//将得到的每一列数据保存java对象
			person=new Person();
			person.setPerid(perid1);
			person.setPername(pername);
			person.setPerage(perage);
			person.setPersex(persex);
			person.setPeraddress(peraddress);
		   }
		   resultSet.close();
		   statement.close();
		   conn.close();
		   return person;
	}
}

8.用PreparedStatement完成具体的增删改查操作

package com.click369.dbao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.click369.bean.Person;
import com.click369.db.DBConnection;
/**
 * 8.用PreparedStatement完成具体的增删改查操作
 * @author Administrator
 *
 */
public class PreparedStatementPerson {
   /**
    * 添加Person信息
    * @param person
    * @return
    * @throws Exception
    */
	public  boolean  insertPerson(Person person)throws Exception{
		boolean flag=false;
		Connection  conn=null;
		PreparedStatement ps=null;
		conn=DBConnection.getMyConnection();
		String  insertsql="insert  into t_person values(null,?,?,?,?);";
		ps=conn.prepareStatement(insertsql);
		//为占位符“?”传递数据值
		ps.setString(1,person.getPername());
		ps.setInt(2,person.getPerage());
		ps.setBoolean(3,person.isPersex());
		ps.setString(4,person.getPeraddress());
		if(ps.executeUpdate() > 0) flag=true;
		ps.close();
		conn.close();
		return flag;
	}
	
	 /**
	    * 修改Person信息
	    * @param person
	    * @return
	    * @throws Exception
	    */
		public  boolean  updatePerson(Person person)throws Exception{
			boolean flag=false;
			Connection  conn=null;
			PreparedStatement ps=null;
			conn=DBConnection.getMyConnection();
			String  updatesql="update t_person set per_name=?,per_age=?,per_sex=?,per_address=? where per_id=?";
			ps=conn.prepareStatement(updatesql);
			//为占位符“?”传递数据值
			ps.setString(1,person.getPername());
			ps.setInt(2,person.getPerage());
			ps.setBoolean(3,person.isPersex());
			ps.setString(4,person.getPeraddress());
			ps.setInt(5,person.getPerid());
			if(ps.executeUpdate() > 0) flag=true;
			ps.close();
			conn.close();
			return flag;
		}
		
		 /**
		    * 删除Person信息
		    * @param person
		    * @return
		    * @throws Exception
		    */
			public  boolean  deletePerson(int perid)throws Exception{
				boolean flag=false;
				Connection  conn=null;
				PreparedStatement ps=null;
				conn=DBConnection.getMyConnection();
				String  deletesql="delete from t_person where per_id=?";
				ps=conn.prepareStatement(deletesql);
				//为占位符“?”传递数据值
				ps.setInt(1,perid);
				if(ps.executeUpdate() > 0) flag=true;
				ps.close();
				conn.close();
				return flag;
			}
			
			 /**
			    * 查询所有Person信息
			    * @param person
			    * @return
			    * @throws Exception
			    */
				public  List<Person>  selectPerson()throws Exception{
					 List<Person>  personlist=null;
					Connection  conn=null;
					PreparedStatement ps=null;
					ResultSet resultSet=null;
					conn=DBConnection.getMyConnection();
					String  deletesql="select * from t_person;";
					ps=conn.prepareStatement(deletesql);
					resultSet=ps.executeQuery();
					personlist=new ArrayList<Person>();
					while(resultSet.next()){
						Person  person=new Person();
						person.setPerid( resultSet.getInt("per_id")); 
						person.setPername(resultSet.getString("per_name"));
						person.setPerage(resultSet.getInt("per_age"));
						person.setPersex(resultSet.getBoolean("per_sex"));
						person.setPeraddress(resultSet.getString("per_address"));
						personlist.add(person);
					}
					resultSet.close();
					ps.close();
					conn.close();
					return personlist;
				}
				 /**
				    * 查询一个Person信息
				    * @param person
				    * @return
				    * @throws Exception
				    */
					public  Person  selectPersonById(int perid)throws Exception{
						 Person  person=null;
						Connection  conn=null;
						PreparedStatement ps=null;
						ResultSet resultSet=null;
						conn=DBConnection.getMyConnection();
						String  deletesql="select * from t_person where per_id=?;";
						ps=conn.prepareStatement(deletesql);
						ps.setInt(1,perid);
						resultSet=ps.executeQuery();
						if(resultSet.next()){
							person=new Person();
							person.setPerid( resultSet.getInt("per_id")); 
							person.setPername(resultSet.getString("per_name"));
							person.setPerage(resultSet.getInt("per_age"));
							person.setPersex(resultSet.getBoolean("per_sex"));
							person.setPeraddress(resultSet.getString("per_address"));
						}
						resultSet.close();
						ps.close();
						conn.close();
						return person;
					}
}

9.单元测试【junit】
1.下载Junit单元测试包
junit-4.11.jar
hamcrest-core-1.3.jar
2.导入工程
使用:
package com.click369.test;
import org.junit.Test;
import com.click369.bean.Person;
import com.click369.dbao.PreparedStatementPerson;
/**

  • 通过Junit单元测试
  • 1.下载Junit单元测试包
  • 2.导入工程
  • @author Administrator
    */
    public class TestClass {
    @Test
    public void insert()throws Exception{
    PreparedStatementPerson psperson=new PreparedStatementPerson();
    Person person=new Person();
    person.setPername(“lisi”);
    person.setPerage(24);
    person.setPersex(false);
    person.setPeraddress(“北京”);
    System.out.println( psperson.insertPerson(person));
    //psperson.insertPerson(person);
    }
    正确:
    在这里插入图片描述
    错误:
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值