java實現mysql資料庫增刪改查
阿新 • • 發佈:2018-11-12
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); } }