JAVA基础知识点总结(十二)

12. 数据库【JDBC】

12.1 什么是JDBC?

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC作用就是访问数据库。

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

java.sql.DriverManager类[管理一组 JDBC 驱动程序的基本服务]

java.sql.ResultSet类[表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。]

java.sql.Connection接口 [与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。]

java.sql.Statement接口 [用于执行静态 SQL 语句并返回它所生成结果的对象]

java.sql.PreparedStatement接口[SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。]

使用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实体类

/**
 * 保存个人信息的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;
	}
}

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

/**
 * 数据库连接的管理类
 * 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;
	}
}

5. 用Statement完成具体的操作

/**
 * 用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;
	}
}

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

/**
 * 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;
					}
}

注:Statement和PreparedStatement的区别

Statement在执行sql语句的时候是通过拼接字符串的方式执行的,而PreparedStatement使用的是占位符的方式;PreparedStatement是预编译的,批处理比Statement效率高。

12.3 JDBC访问数据库的流程?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值