1. 程式人生 > >JDBC(Java資料庫連線)

JDBC(Java資料庫連線)

Stu類:存表中記錄

package cn.jdbc.entity;

import java.io.Serializable;


public class Stu implements Serializable{
	
	private String sid;
	private String sname;
	private Integer age;
	private String gender;
	

	
	public Stu() {
		super();
	}
	public Stu(String sid, String sname, Integer age, String gender) {
		super();
		this.sid = sid;
		this.sname = sname;
		this.age = age;
		this.gender = gender;
	}
	public String getSid() {
		return sid;
	}
	public void setSid(String sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}

}

操作資料庫的 java程式碼

package cn.jdbc.dao;

import java.util.List;

import cn.jdbc.entity.Stu;

public interface StudentDao {
	/**
	 * 查詢所有學生資訊
	 * @return
	 */
	List<Stu>getUsersList();
/**
 * 根據學號和姓名獲取資訊
 * @param name
 * @param id
 * @return
 */
	Stu getStu(String id,String name);
	/**
	 * 模糊查詢學生資訊
	 * @param name
	 * @return
	 */
	List<Stu> getUserListLikeName(String name);
	
	/**
	 * 插入學生資訊
	 * @param stu
	 * @return
	 */
	Boolean insert(Stu stu);
	/**
	 * 刪除學生資訊
	 * @param stu
	 * @return
	 */
	Boolean delete(String sname);
	/**
	 * 修改學生資訊
	 */
	Boolean update(String sid,Integer Sage);
}














3. 實現StudentDao介面的實現類

package cn.jdbc.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.sql.*;
import com.mysql.jdbc.PreparedStatement;

import cn.jdbc.entity.Stu;

public class StudentDaoImpl extends BaseDao implements StudentDao {
	
	private final String URL="jdbc:mysql://localhost:3306/db_person";
	private final String USENAME="root";
	private final String PASSWORD="123yeszjingqi";
	private final String DRIVE="com.mysql.jdbc.Driver";
	
	public List<Stu> getUsersList() {
		Connection conn=null;
		Statement stmt=null;
		ResultSet rs=null;
		List <Stu> stulist =new ArrayList<Stu>();        		
		try {
			//1.載入(mysql)jdbc驅動包
			Class.forName("com.mysql.jdbc.Driver");
			//2.建立資料庫連線物件
				conn = DriverManager.getConnection(URL, USENAME, PASSWORD);
				//sql語句
				String sql="select `sid`,`sname`,`age`,`gender` from stu";
				//3.建立執行sql語句物件
				stmt=conn.createStatement();
				//4.執行查詢,返回結果集物件ResultSet
				rs=stmt.executeQuery(sql);
				Stu stud=null;
				while (rs.next()){
					stud = new Stu(rs.getString(1),
							rs.getString("sname"),
							rs.getInt("age"),
							rs.getString("gender"));
					stulist.add(stud);
				}

		
		} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//5.釋放資源
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(stmt!=null){
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
		return stulist;
	}
	@Override
	public Stu getStu( String id,String name) {
		Connection conn=null;
		Statement stmt=null;
		ResultSet rs=null;
		Stu stud=null;
		//1.載入(mysql)jdbc驅動包;
		try {
			Class.forName(DRIVE);
			//2.建立資料庫連線物件
			conn=DriverManager.getConnection(URL,USENAME,PASSWORD);
		//	System.out.println(name+"---"+id);
			String sql="select * from stu where sid='"+id+"'and sname='"+name+"'";
			
			//3.建立state物件執行sql語句。
			stmt=conn.createStatement();
			//4執行查詢,返回結果集物件ResultSet
			rs=stmt.executeQuery(sql);
			while(rs.next()){//遍歷每行
				stud = new Stu(rs.getString(1),//每行的每個元素
						rs.getString("sname"),
						rs.getInt("age"),
						rs.getString("gender"));
				
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(stmt!=null){
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return stud;
	}
	@Override
	public List<Stu> getUserListLikeName(String name) {
		Connection conn=null;
		java.sql.PreparedStatement stmt=null;
		ResultSet rs=null;
		List <Stu> stulist =new ArrayList<Stu>();        		
		try {
			//1.載入(mysql)jdbc驅動包
			Class.forName("com.mysql.jdbc.Driver");
			//2.建立資料庫連線物件
				conn = DriverManager.getConnection(URL, USENAME, PASSWORD);
				//sql語句
				String sql="select `sid`,`sname`,`age`,`gender` from stu where sname like ?";
				
				//3.建立執行sql語句物件
				stmt=conn.prepareStatement(sql);
				stmt.setString(1,"%"+name+"%");
				
				//4.執行查詢,返回結果集物件ResultSet
				rs=stmt.executeQuery();
				Stu stud=null;
				while (rs.next()){//
					stud = new Stu(rs.getString(1),
							rs.getString("sname"),
							rs.getInt("age"),
							rs.getString("gender"));
					stulist.add(stud);
				}
		} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//5.釋放資源
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(stmt!=null){
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
		return stulist;
	}
	@Override
	public Boolean insert(Stu stu) {
		Connection conn=null;
		java.sql.PreparedStatement stmt=null;
		ResultSet rs=null;
		Boolean flag=false;        		
		try {
			//1.載入(mysql)jdbc驅動包
			Class.forName("com.mysql.jdbc.Driver");
			//2.建立資料庫連線物件
				conn = DriverManager.getConnection(URL, USENAME, PASSWORD);
				//sql語句
				String sql="insert into `stu`(`sid`,`sname`,`age`,`gender`)"
				+"values (DEFAULT,?,?,?)";//default預設 自增長
				
				//3.建立執行sql語句物件
				stmt=conn.prepareStatement(sql);
				stmt.setString(1,stu.getSname());
				stmt.setInt(2,stu.getAge());
				stmt.setString(3, stu.getGender());
				//4.執行插入,返回受影響行數
				int num =stmt.executeUpdate();
				flag=num>0?true:false;
		} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//5.釋放資源
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(stmt!=null){
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
		return flag;
	}
	@Override
	public Boolean delete(String sname) {
		Connection conn =null;
		PreparedStatement stmt=null;
		Boolean flag=false;
		try {
			conn=getConn();
			String sql="delete from stu where ` = ?";
			stmt=(PreparedStatement) conn.prepareStatement(sql);
			stmt.setString(1, sname);
			flag=stmt.executeUpdate()> 0 ? true:false;
			
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}finally{
			close(conn,stmt,null);
		}
		return flag;
	}
	@Override
	public Boolean update(String sid ,Integer age) {
		Connection conn =null;
		PreparedStatement stmt=null;
		Boolean flag=false;
		try {
			conn=getConn();
			String sql="update stu set `age` = ? where `sid`= ? ";
			stmt=(PreparedStatement) conn.prepareStatement(sql);
			stmt.setInt(1, age);
			stmt.setString(2, sid);
			flag=stmt.executeUpdate()> 0 ? true:false;
			
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}finally{
			close(conn,stmt,null);
		}
		return flag;
	}
	
}

 把重複程式碼寫進 工具類

package cn.jdbc.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.PreparedStatement;
/**
 * 工具類
 * @author 123
 *
 */
public class BaseDao implements Serializable{
	private final String URL="jdbc:mysql://localhost:3306/db_person";
	private final String USENAME="root";
	private final String PASSWORD="123yeszjingqi";
	private final String DRIVE="com.mysql.jdbc.Driver";
	static{
		//1.載入(mysql)jdbc驅動包
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * @param args
	 */
		/**
		 * 獲取資料庫的連線資源
		 * @return
		 */
		public Connection getConn(){
		
			Connection conn=null;
			//2.建立資料庫連線物件
			try {
				conn = DriverManager.getConnection(URL, USENAME, PASSWORD);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return conn;
		}
		/**
		 * 釋放資源,
		 * 釋放順序必須  從後往前釋放
		 * @param conn
		 * @param stmt
		 * @param rs
		 */
		public void close(Connection conn,PreparedStatement stmt,ResultSet rs){
			try{				
				if(rs!=null){
					rs.close();
				}
				if(stmt!=null){
					stmt.close();
				}
				if(conn!=null){
					conn.close();
				}
			}catch(SQLException e){
				e.printStackTrace();
			}
		}

}

測試類: 

package cn.jdbc.test;

import java.util.List;

import cn.jdbc.dao.StudentDao;
import cn.jdbc.dao.StudentDaoImpl;
import cn.jdbc.entity.Stu;

public class Client {

	public static void main(String[] args) {
		StudentDao stuDao=new StudentDaoImpl();
//		List<Stu>stulist =stuDao.getUsersList();
//		System.out.println(stulist.size());
		//查詢學號為1001,姓名為liu的同學的性別
		/*
		Stu stu=stuDao.getStu( "1001","liu");
		System.out.println("stu的性別:"+stu.getGender());
		//查詢姓名為zhang的有幾個
		
		 List<Stu>stulist =stuDao.getUserListLikeName("zhang");
		System.out.println(stulist.size());
		
		 */
		//加入一條資訊:
		
		Stu stu=new Stu();
		
		stu.setSname("heeh");
		stu.setAge(16);
		stu.setGender("female");
		if(stuDao.insert(stu)){
			System.out.println("插入成功!");
		}
		 
		//刪除一條資訊
		/*
		Stu stu=stuDao.getStu(null, "lia");
		System.out.println("性別:"+stu.getGender());
		if(stu!=null&&stuDao.delete(stu.getSname())){
			System.out.println("刪除成功!");
		}		
		*/
		//修改
		 /*
		Stu stu=stuDao.getStu("1004", "li");
		stu.setAge(10);
		if(stu!=null&&stuDao.update(stu.getSid(),stu.getAge())){
			System.out.println("修改成功!");
		}*/
		
	}

}