1. 程式人生 > >java實現mysql資料庫增刪改查

java實現mysql資料庫增刪改查

1.連線資料庫:

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnection {
	static String driver = "com.mysql.jdbc.Driver";
	static String url= "jdbc:mysql://localhost:3306/mydatabase01?useUnicode=true&characterEncoding=utf-8";
	static  String user = "root";
	static  String password = "123456";
	    
	    public Connection conn;
	    
	    static {
	    	
	    	try {
	    		System.out.println("驅動載入開始=====================");
				Class.forName(driver);
				System.out.println("驅動載入完畢==================");
				
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}// 載入驅動程式
	    }

	    public DBConnection() {

	        try {
	            
	            conn = (Connection) DriverManager.getConnection(url, user, password);// 連線資料庫
	            
	            if(!conn.isClosed())
	                System.out.println("Succeeded connecting to the Database!"); 
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }
	    
	    public void close() {
	        try {
	            this.conn.close();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }

}

2.資料庫操作

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



public class MysqlUtil {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String sqlstr = "INSERT  INTO student  (stuname,class,sex,major,mathstore,engstore,yuwenstore) VALUES('";
		
		sqlstr += "趙大眾','大四1班','2','計算機專業','50','80','100')";
	
		String delstr = " insert into student (stuname,class,sex,major,mathstore) values ('彭小杰','初三','1','全專業',90) ";
		
	
		System.out.println(add(delstr));
	}
	
	
    
    //插入操作
    public static int add(String sql) {
        int i=0;
     
        DBConnection db = new DBConnection();
        try {        
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
            preStmt.executeUpdate();
            //Statement statement = (Statement) db.conn.createStatement();
            //statement.executeUpdate(sql);
            
            preStmt.close();
            db.close();//關閉連線 
            i = 1;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return i;//返回影響的行數,1為執行成功
    }
    
    //查詢操作
    public static List< Map<String,String> > show(String sql, String[] params){
        // String sql ="select * from employee";
    	
    	
    	List< Map<String,String> > listmap = new ArrayList<>();
    	
         DBConnection db = new DBConnection();
         ResultSet rs = null;
         System.out.println("-----------------");
         System.out.println("姓名" +"\t"+ "郵箱" +"\t"+ "日期");
         System.out.println("-----------------");
         
         try {
            Statement stmt = (Statement) db.conn.createStatement();
            rs = (ResultSet) stmt.executeQuery(sql);//返回連結串列
            while(rs.next()){
            	
            	Map<String,String> map = new HashMap<String,String>();
            	for(int i = 0; i < params.length; i++) {
            		
            		map.put(params[i], rs.getString(params[i]));
            	}
            	listmap.add(map);
            }
            rs.close();
            db.close();//關閉連線 
        } catch (SQLException e) {
            e.printStackTrace();
        }
		return listmap; 
         
     
    }
    //更新操作
    public static int update( String sql ) {
        int i =0;
       // String sql="update employee set email=?,pwd=? where name=?";
        DBConnection db = new DBConnection();
        
        try {
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
//            preStmt.setString(1, uemail);
//            preStmt.setString(2, upwd);
//            preStmt.setString(3, uname);
            preStmt.executeUpdate();
            
            preStmt.close();
            db.close();//關閉連線 
            i = 1;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;//返回影響的行數,1為執行成功
    }
    //刪除操作
    public static int del(String sql) {
        int i=0;
      //  String sql="delete from employee where name=?";
        DBConnection db = new DBConnection();
        try {    
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
         
            preStmt.executeUpdate();
            
            preStmt.close();
            db.close();//關閉連線 
            
            i = 1;
        } catch (SQLException e){
            e.printStackTrace();
        }
        return i;//返回影響的行數,1為執行成功
    }
    
    
    public static List<Object> query(Class<?> obj, String sql) throws SQLException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        Statement  st=null;
        List<Object> list=new ArrayList<>();
   
        DBConnection db = new DBConnection();
        		Statement stmt = (Statement) db.conn.createStatement();
                ResultSet rs=st.executeQuery(sql);
                //獲取傳入類中的方法
                Method[] methods=obj.getMethods();
                //設定一個方法的list集合,下面將方法放入其中,以便呼叫
                List<Method> list_m= new ArrayList<>();
                //類中有許多方法,過濾一些方法,獲取自己想要的方法
                for(int i=0;i<methods.length;i++){ //過濾方法
                    //判斷方法名字中是否有set這個提取
                    if (methods[i].getName().contains("set")) {
                        //將方法新增到list中
                        list_m.add(methods[i]);
                    }
                }
                //建立字串string集合,獲取下面的欄位名存入
                List<String> fieldname=new ArrayList<>();
                //獲取類中的屬性,其屬性對應資料庫中的欄位
                Field[]    f=obj.getDeclaredFields();
                //迴圈將欄位中的名字首個變大寫
                for (int i = 0; i < f.length; i++) {
                    //獲取名字
                    String field=f[i].getName();
                    //變大小寫,存入fieldname集合
                    fieldname.add(upperCase(field));
                }
                //獲取得到結果集(rs)的結構,比如欄位數、欄位名等。
                ResultSetMetaData  rsmd=  rs.getMetaData();
                //迴圈讀取結果集中的資料新增到list集合中
                while (rs.next()) {
                    //建立一個傳入類物件user
                    Object user=obj.newInstance();
                    //遍歷方法的集合
                    for (Method m : list_m) {
                        //遍歷欄位的集合
                        for (int i = 0; i < f.length; i++) {
                            //方法和欄位作比較,檢視方法名中是否含有這個欄位名,兩者匹配
                            if (m.getName().contains("set"+fieldname.get(i))) {
                                //匹配成功 ,則去得到rsmd去獲取資料庫中的欄位名,rs.getObject,再根據獲取的這個欄位名去得到這個欄位值
                                Object value=rs.getObject(rsmd.getColumnName(i+1));
                                //獲取這個欄位的型別,以便去儲存這個值的型別
                                Class<?> type=f[i].getType();
                                //是int型別的轉化
                                if (type==int.class) {
                                    value=new Integer(value.toString());
                                }
                                //string型別的轉化
                                if (type==String.class) {
                                    value=value.toString();
                                }
                                //m是user物件中的方法,設定其值
                                m.invoke(user, value);
                            }
                        }
                    }
                    //將的到的user物件例項新增到list集合中
                    list.add(user);
                   
                }
                return list;
  }


	public static String upperCase(String str) {  
	    //先將字串轉換為字元陣列
	    char[] ch = str.toCharArray();  
	    //將陣列的第一個元素     即字串首字母,進行ASCII 碼前移,ASCII 中大寫字母從65開始,小寫字母從97開始,所以這裡減去32。
	    if (ch[0] >= 'a' && ch[0] <= 'z') {  
	        ch[0] = (char) (ch[0] - 32);  
	    }  
	    return new String(ch);  
	}  

}