日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之jdbc的学习

發布時間:2024/9/20 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之jdbc的学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.什么是jdbc:
根據Sun的聲明,JDBC是一個商標的術語,并非Java DataBase Connectivity。但將其當成Java DataBase Connectivity更容易理解。jdbc是java程序訪問數據庫的一套接口,它結合了SQL語句。因為市場上有多種數據庫,他們的訪問協議不同,因此數據訪問方式不同。針對于這種情況,java提供了驅動管理器與數據庫驅動的概念,訪問方式有數據庫驅動提供,是具體的數據庫廠商寫的。而java程序需要哪種方式訪問數據庫,只需要將這種數據庫的驅動注冊到驅動管理器就ok了(這樣java程序才知道以何種方式訪問數據庫)。
2.jdbc的操作步驟
(1)注冊jdbc驅動:向java驅動管理器注冊使用的數據庫驅動。
(2)連接數據庫:建立通信,先接通才能操作數據庫。
(3)操作數據庫:增,刪,改,查等。
(4)關閉數據庫。
以MySql為例:
1.先要下載mysql數據庫的驅動:
http://pan.baidu.com/share/link?shareid=1725761810&uk=3056808396
將其加載到編寫的java工程中,剛測試了下載Android無法使用jdbc訪問數據,報一大堆錯誤,看stackoverflow上說建議使用webservice訪問數據庫。


2.編寫代碼:
(1)注冊jdbc驅動

?

[java]?view plaincopy
  • //?向驅動管理器注冊一個jdbc驅動??
  • ????????????Class.forName(driver).newInstance();??
  • ????????????System.out.println("驅動注冊成功");??

  • (2)連接數據庫:建立通信,先接通才能操作數據庫。

    [java]?view plaincopy
  • conn?=?DriverManager.getConnection(url,?username,?password);??
  • ????????????System.out.println("獲取鏈接成功");??

  • (3)操作數據庫:增,刪,改,查等。

    [java]?view plaincopy
  • //實現增刪改??
  • public?boolean?updateDB(String?sql,?List<Object>?params)??
  • ????{??
  • ????????boolean?retFlag?=?false;??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????//?notice:if(params?!=null?&&?!params.equals(""))這個要加上,避免params為空??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????return?pstm.executeUpdate()?>?0???true?:?false;??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?retFlag;??
  • ????}??
  • ????//實現查詢??
  • ????public?Map<String,?Object>?QueryDB(String?sql,?List<Object>?params)??
  • ????{??
  • ????????Map<String,?Object>?map?=?null;??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????map?=?new?HashMap<String,?Object>();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????//?數據庫中的值可能為空??
  • ????????????????????if?(columnVal?==?null)??
  • ????????????????????{??
  • ????????????????????????columnVal?=?"";??
  • ????????????????????}??
  • ????????????????????map.put(columnName,?columnVal);??
  • ????????????????}??
  • ??????????????????
  • ????????????}??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?map;??
  • ??????????
  • ????}??
  • ??????
  • ????//?這個完全可以代替單個查詢??
  • ????public?List<Map<String,?Object>>?QueryMoreDB(String?sql,?List<Object>?params)??
  • ????{??
  • ????????List<Map<String,?Object>>?retList?=?new?ArrayList<Map<String,?Object>>();??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ??????????????
  • ????????????ResultSet?rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????Map<String,?Object>?map?=?new?HashMap<String,?Object>();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????if?(columnVal?==?null)??
  • ????????????????????{??
  • ????????????????????????columnVal?=?"";??
  • ????????????????????}??
  • ????????????????????map.put(columnName,?columnVal);??
  • ????????????????}??
  • ????????????????retList.add(map);??
  • ????????????}??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????return?retList;??
  • ????}??
  • ??????
  • ????//?利用反射機制實現數據庫的操作??
  • ????public?<T>?T?QueryDBObj(String?sql,?List<Object>?params,?Class<T>?cls)??
  • ????{??
  • ????????T?t?=?null;??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????t?=?cls.newInstance();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????//?這個field是類加載器級別的,用于管理其類的屬性??
  • ????????????????????Field?field?=?cls.getDeclaredField(columnName);??
  • ??????????????????????
  • ????????????????????field.setAccessible(true);??
  • ????????????????????field.set(t,?columnVal);??
  • ????????????????}??
  • ????????????}??
  • ????????????return?t;??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(InstantiationException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(IllegalAccessException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(SecurityException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(NoSuchFieldException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?t;??
  • ????}??
  • ??????
  • ????//?利用反射機制實現數據庫的操作,知道其cls的結構??
  • ????public?<T>?List<T>?QueryDBMoreObj(String?sql,?List<Object>?params,?Class<T>?cls)??
  • ????{??
  • ????????List<T>?rstList?=?new?ArrayList<T>();??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????T?t?=?cls.newInstance();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????//?這個field是類加載器級別的,用于管理其類的屬性??
  • ????????????????????Field?field?=?cls.getDeclaredField(columnName);??
  • ????????????????????//?應用Fied??
  • ????????????????????field.setAccessible(true);??
  • ????????????????????field.set(t,?columnVal);??
  • ????????????????}??
  • ????????????????rstList.add(t);??
  • ????????????}??
  • ????????????return?rstList;??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(InstantiationException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(IllegalAccessException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(SecurityException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(NoSuchFieldException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?rstList;??
  • ????}??
  • ??????

  • 4.關閉數據庫

    [java]?view plaincopy
  • public?void?releaseJdbc()??
  • ????{??
  • ??????????
  • ????????try??
  • ????????{??
  • ????????????//?后生成的先釋放掉??
  • ????????????if?(rs?!=?null)??
  • ????????????{??
  • ????????????????rs.close();??
  • ????????????}??
  • ????????????if?(pstm?!=?null)??
  • ????????????{??
  • ????????????????pstm.close();??
  • ????????????}??
  • ????????????if?(conn?!=?null)??
  • ????????????{??
  • ????????????????conn.close();??
  • ????????????}??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????}??

  • 完整源碼:
    jdbcUtil.java

    [java]?view plaincopy
  • package?utl;??
  • ??
  • import?java.lang.reflect.Field;??
  • 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.util.ArrayList;??
  • import?java.util.HashMap;??
  • import?java.util.List;??
  • import?java.util.Map;??
  • ??
  • public?class?jdbcUtil??
  • {??
  • ????private?String?url?=?"jdbc:mysql://localhost:3306/moondatabase";??
  • ??????
  • ????private?String?username?=?"root";??
  • ??????
  • ????private?String?password?=?"byd";??
  • ??????
  • ????private?String?driver?=?"com.mysql.jdbc.Driver";??
  • ??????
  • ????private?String?driver1?=?"org.gjt.mm.mysql.Driver";??
  • ??????
  • ????//?預定義聲明對象,用于操作數據庫??
  • ????PreparedStatement?pstm;??
  • ??????
  • ????//?java程序與數據庫建立的鏈接??
  • ????Connection?conn;??
  • ??????
  • ????//?查詢數據庫返回的對象??
  • ????ResultSet?rs;??
  • ??????
  • ????public?jdbcUtil(String?url,?String?username,?String?password)??
  • ????{??
  • ????????super();??
  • ????????this.url?=?url;??
  • ????????this.username?=?username;??
  • ????????this.password?=?password;??
  • ????????try??
  • ????????{??
  • ????????????//?向驅動管理器注冊一個jdbc驅動??
  • ????????????Class.forName(driver).newInstance();??
  • ????????????System.out.println("驅動注冊成功");??
  • ????????}??
  • ????????catch?(ClassNotFoundException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(InstantiationException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(IllegalAccessException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • ??????
  • ????public?jdbcUtil()??
  • ????{??
  • ????????try??
  • ????????{??
  • ????????????//?向驅動管理器注冊一個jdbc驅動??
  • ????????????Class.forName(driver1);??
  • ????????????System.out.println("驅動注冊成功");??
  • ????????}??
  • ????????catch?(ClassNotFoundException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • ??????
  • ????public?void?getConnection()??
  • ????{??
  • ????????try??
  • ????????{??
  • ????????????conn?=?DriverManager.getConnection(url,?username,?password);??
  • ????????????System.out.println("獲取鏈接成功");??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • ??????
  • ????public?boolean?updateDB(String?sql,?List<Object>?params)??
  • ????{??
  • ????????boolean?retFlag?=?false;??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????//?notice:if(params?!=null?&&?!params.equals(""))這個要加上,避免params為空??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????return?pstm.executeUpdate()?>?0???true?:?false;??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?retFlag;??
  • ????}??
  • ??????
  • ????public?Map<String,?Object>?QueryDB(String?sql,?List<Object>?params)??
  • ????{??
  • ????????Map<String,?Object>?map?=?null;??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????map?=?new?HashMap<String,?Object>();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????//?數據庫中的值可能為空??
  • ????????????????????if?(columnVal?==?null)??
  • ????????????????????{??
  • ????????????????????????columnVal?=?"";??
  • ????????????????????}??
  • ????????????????????map.put(columnName,?columnVal);??
  • ????????????????}??
  • ??????????????????
  • ????????????}??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?map;??
  • ??????????
  • ????}??
  • ??????
  • ????//?這個完全可以代替單個查詢??
  • ????public?List<Map<String,?Object>>?QueryMoreDB(String?sql,?List<Object>?params)??
  • ????{??
  • ????????List<Map<String,?Object>>?retList?=?new?ArrayList<Map<String,?Object>>();??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ??????????????
  • ????????????ResultSet?rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????Map<String,?Object>?map?=?new?HashMap<String,?Object>();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????if?(columnVal?==?null)??
  • ????????????????????{??
  • ????????????????????????columnVal?=?"";??
  • ????????????????????}??
  • ????????????????????map.put(columnName,?columnVal);??
  • ????????????????}??
  • ????????????????retList.add(map);??
  • ????????????}??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????return?retList;??
  • ????}??
  • ??????
  • ????//?利用反射機制實現數據庫的操作??
  • ????public?<T>?T?QueryDBObj(String?sql,?List<Object>?params,?Class<T>?cls)??
  • ????{??
  • ????????T?t?=?null;??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????t?=?cls.newInstance();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????//?這個field是類加載器級別的,用于管理其類的屬性??
  • ????????????????????Field?field?=?cls.getDeclaredField(columnName);??
  • ??????????????????????
  • ????????????????????field.setAccessible(true);??
  • ????????????????????field.set(t,?columnVal);??
  • ????????????????}??
  • ????????????}??
  • ????????????return?t;??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(InstantiationException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(IllegalAccessException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(SecurityException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(NoSuchFieldException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?t;??
  • ????}??
  • ??????
  • ????//?利用反射機制實現數據庫的操作,知道其cls的結構??
  • ????public?<T>?List<T>?QueryDBMoreObj(String?sql,?List<Object>?params,?Class<T>?cls)??
  • ????{??
  • ????????List<T>?rstList?=?new?ArrayList<T>();??
  • ????????try??
  • ????????{??
  • ????????????pstm?=?conn.prepareStatement(sql);??
  • ????????????if?(params?!=?null?&&?!params.equals(""))??
  • ????????????{??
  • ????????????????for?(int?i?=?0;?i?<?params.size();?i++)??
  • ????????????????{??
  • ????????????????????pstm.setObject(i?+?1,?params.get(i));??
  • ????????????????}??
  • ????????????}??
  • ????????????rs?=?pstm.executeQuery();??
  • ????????????ResultSetMetaData?rsMetaData?=?rs.getMetaData();??
  • ????????????while?(rs.next())??
  • ????????????{??
  • ????????????????T?t?=?cls.newInstance();??
  • ????????????????for?(int?i?=?0;?i?<?rsMetaData.getColumnCount();?i++)??
  • ????????????????{??
  • ????????????????????String?columnName?=?rsMetaData.getColumnName(i?+?1);??
  • ????????????????????Object?columnVal?=?rs.getObject(i?+?1);??
  • ????????????????????//?這個field是類加載器級別的,用于管理其類的屬性??
  • ????????????????????Field?field?=?cls.getDeclaredField(columnName);??
  • ????????????????????//?設置這個屬性可以訪問??
  • ????????????????????field.setAccessible(true);??
  • ????????????????????field.set(t,?columnVal);??
  • ????????????????}??
  • ????????????????rstList.add(t);??
  • ????????????}??
  • ????????????return?rstList;??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(InstantiationException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(IllegalAccessException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(SecurityException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????catch?(NoSuchFieldException?e)??
  • ????????{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????????return?rstList;??
  • ????}??
  • ??????
  • ????public?void?releaseJdbc()??
  • ????{??
  • ??????????
  • ????????try??
  • ????????{??
  • ????????????//后生成的先釋放掉??
  • ????????????if?(rs?!=?null)??
  • ????????????{??
  • ????????????????rs.close();??
  • ????????????}??
  • ????????????if?(pstm?!=?null)??
  • ????????????{??
  • ????????????????pstm.close();??
  • ????????????}??
  • ????????????if?(conn?!=?null)??
  • ????????????{??
  • ????????????????conn.close();??
  • ????????????}??
  • ????????}??
  • ????????catch?(SQLException?e)??
  • ????????{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ????}??
  • }??

  • Test.java

    [java]?view plaincopy
  • package?test;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • import?java.util.Map;??
  • ??
  • import?bean.User;??
  • ??
  • import?utl.jdbcUtil;??
  • ??
  • public?class?Test??
  • {??
  • ??????
  • ????/**?
  • ?????*?@param?args?
  • ?????*/??
  • ????public?static?void?main(String[]?args)??
  • ????{??
  • ????????jdbcUtil?jUtilTest?=?new?jdbcUtil();??
  • ????????jUtilTest.getConnection();??
  • ????????//?sql語句通配符對應的字段??
  • ????????List<Object>?params?=?new?ArrayList<Object>();??
  • ????????//?創建表??
  • ????????String?createTable?=??
  • ????????????"create?table?if?not?exists?userinfo?(id?int?primary?key?auto_increment,username?varchar(64),pswd?varchar(64))";??
  • ????????jUtilTest.updateDB(createTable,?null);??
  • ??????????
  • ????????//?插入數據??
  • ????????for?(int?i?=?0;?i?<?10;?i++)??
  • ????????{??
  • ????????????String?insertOne?=?"insert?into?userinfo?(username,pswd)?values?(?,?)";??
  • ????????????params.clear();??
  • ????????????params.add("byd"?+?i);??
  • ????????????params.add("123"?+?i);??
  • ????????????jUtilTest.updateDB(insertOne,?params);??
  • ????????}??
  • ??????????
  • ????????//?刪除一條數據,sql語句對大小寫不敏感,delete/Delete/DELETE等均可??
  • ????????String?deleteOne?=?"DeLete?from?userinfo?where?username?=??";??
  • ????????params.clear();??
  • ????????params.add("byd0");??
  • ????????jUtilTest.updateDB(deleteOne,?params);??
  • ??????????
  • ????????//?改變數據??
  • ????????String?updateOne?=?"update?userinfo?set?pswd?=???where?username?=?";??
  • ????????params.clear();??
  • ????????params.add("bydxxoo");??
  • ????????params.add("byd");??
  • ????????jUtilTest.updateDB(updateOne,?params);??
  • ??????????
  • ????????//?查詢一條數據??
  • ????????String?findOne?=?"select?*?from?userinfo?where?username?=??";??
  • ????????//?notice:數據庫的列下標是從1開始計數的??
  • ????????params.clear();??
  • ????????params.add("byd2");??
  • ????????Map<String,?Object>?rstOne?=?jUtilTest.QueryDB(findOne,?params);??
  • ????????System.out.println("-->"?+?rstOne);??
  • ??????????
  • ????????//?查詢多條數據??
  • ????????String?findMore?=?"select?*?from?userinfo";??
  • ????????List<Map<String,?Object>>?rstMore?=?jUtilTest.QueryMoreDB(findMore,?null);??
  • ????????System.out.println("-->"?+?rstMore);??
  • ??????????
  • ????????//?反射查詢一條數據??
  • ????????String?findOneRefl?=?"select?*?from?userinfo?where?username?=?";??
  • ????????params.clear();??
  • ????????params.add("byd2");??
  • ????????User?userOne?=?jUtilTest.QueryDBObj(findOneRefl,?params,?User.class);??
  • ????????System.out.println("-->"?+?userOne);??
  • ??????????
  • ????????//?反射查詢多條數據??
  • ????????String?findMoreRefl?=?"select?*?from?userinfo";??
  • ????????List<User>?userMore?=?jUtilTest.QueryDBMoreObj(findMoreRefl,?null,?User.class);??
  • ????????System.out.println("-->"?+?userMore);??
  • ??????????
  • ????????//?刪除表??
  • ????????//?String?sql3?=?"delete?from?userinfo";??
  • ????????//?jUtilTest.updateDB(sql3,?null);??
  • ????????//?notice:斷開數據庫連接前,要釋放一些資源??
  • ????????jUtilTest.releaseJdbc();??
  • ????}??
  • ??????
  • }??

  • User.java

    [java]?view plaincopy
  • package?bean;??
  • public?class?User??
  • {??
  • ????private?int?id;??
  • ????private?String?username="";??
  • ????@Override??
  • ????public?String?toString()??
  • ????{??
  • ????????return?"User?[id="?+?id?+?",?username="?+?username?+?",?pswd="?+?pswd?+?"]";??
  • ????}??
  • ????private?String?pswd="";??
  • ????public?int?getId()??
  • ????{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(int?id)??
  • ????{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getUsername()??
  • ????{??
  • ????????return?username;??
  • ????}??
  • ????public?void?setUsername(String?username)??
  • ????{??
  • ????????this.username?=?username;??
  • ????}??
  • ????public?String?getPswd()??
  • ????{??
  • ????????return?pswd;??
  • ????}??
  • ????public?void?setPswd(String?pswd)??
  • ????{??
  • ????????this.pswd?=?pswd;??
  • ????}??
  • }??

  • ======================================================華麗的分隔符==============================================================

    下面在說下安裝mysql遇到的問題:

    MySql安裝包:http://pan.baidu.com/share/link?shareid=2375321572&uk=3056808396

    1.安裝MySQl-5.5.22老是最后一步開在start Service
    安裝的 MySQL 5.1.48 或是 MySQL 5.5.8,配置好最后點擊 Execute 按鈕了,但是進行不到 Start service 這一步。檢查了下 MySQL 系統服務已添加,但是無法啟動,手工也不行。這時候用事件查看器可以看到程序事件里有幾個來自于 MySQL 的錯誤:?

    Plugin 'InnoDB' registration as a STORAGE ENGINE failed.?
    Unknown/unsupported table type: INNODB?

    原來是因為這兩版本的 MySQL 默認使用了支持事物的 INNODB 引擎,打開 my.ini 文件,在 MySQL 的安裝文件夾, 如 c:program filesMySQL 中,看到:?

    ?

    default-storage-engine=INNODB?
    解決辦法是把該設置改為?

    default-storage-engine=MYISAM?

    ?

    仍然使用 MyISAM 作為默認的數據庫引擎,保存 my.ini 文件,然后手工啟動 MySQL 服務,成功;再把剛剛的配置窗口關掉就行了。?
    你完全可以在創建數據庫時指定所創建數據庫所用的數據庫引擎,或創建表時所用的數據庫引擎,或者創建后再更改都可以。?
    你可以再次回憶一下剛剛配置的過程:?
    安裝的最后一個步驟,在點 Finish 按鈕時,可以選擇 Configure the MySQL Server now,或者是從開始菜單里直接運行 MySQL 的 MySQL Server Instance Configuration Wizard 來進行配置數據庫,在選擇 database usage 時有三個選項:?

    1) Multifunctional Database?
    2) Transactional Database Only?
    3) No-Transactional Database Only?

    默認是第一項,選第二項也會讓數據庫默認的引擎為 INNODB,生成的 my.ini 文件里都會是 default-storage-engine=INNODB。至于在 my.ini 中注釋掉了 --skip-innodb 并不太會影響到數據庫的啟動,只是決定了數據庫的事物特性。?

    那么在最后一步 Processing configuration ... 里寫完 my.ini 文件后,進行到 Start service 就不動了,也就是啟動不了 MySQL 服務,在系統服務里已經加了 MySQL 服務名。?

    如果你這一步選擇的是第三項,不使用支持事件的數據庫,那么在 my.ini 文件里就是 default-storage-engine=MYISAM,那么你也很幸運,能順利配置成功,并啟動好數據庫。不過這將使你不能使用 INNODB 引擎(ERROR 1286 (42000): Unknown table engine 'InnoDB'),其實也就是把 my.ini 中的 skip-innodb 給啟用了,你可以把它再次注釋掉試試事物。?

    作者 mywaylife

    如果還是不能解決可以參考下面的方法:

    安裝MySQL時無法啟動服務(could not start the service )?

    1、建議使用360卸載已經安裝的mysql數據庫,因為360會查看相關的注冊信息,卸載比較徹底。?
    2、檢查3306端口是否已經占用,如果已經占有,殺死此進程。?
    3、查看服務列表中,是否還有mysql的服務進程。?
    4、要確保安裝目錄的訪問權限是everyone,這里我建議不要把mysql安裝的c盤中,因為xp有時候為了系統安全,會限制文件夾的訪問權限。?
    5、建議安裝在干凈的文件夾里,如果安裝在上次安裝過的文件夾,建議刪除文件夾下的所有文件。?

    mysql安全設置后導致mysql無法運行,建議重置運行mysql服務的登陸用戶名密碼,然后進服務里面重新輸入剛修改的用戶名與密碼,這樣就可以了

    如果還是不可以,我們可以通過查看錯誤日志的方法解決:

    mysql錯誤日志位于mysql安裝目錄下的擴展名為.err的文件,復制一份通過記事本等工具打開即開,如果err日志過大建議不要用記事本,可以用editplus打開?

    詳細出處參考:http://www.jb51.net/article/30866.htm

    ?

    2.利用Navigate for MySql工具查看數據庫,保存數據庫等操作時報 ?“can't creat/write to file”

    解決辦法:

    打開MySql的安裝路徑:找到my.ini,在其中的[mysqld]下面添加?tmpdir="C:/Program Files/MySQL/MySQL Server 5.5/Temp",后面指定的Temp路徑,沒有的話先自己建一個在指定,路徑注意分隔符是否正確。

    或者:
    1、C:\Windows\TEMP 文件夾權限不夠,至少也要給出 USERS 組的可讀可寫權限;------------你的服務器裝了 MCAFEE 殺毒軟件,它的訪問保護禁止了 TEMP 文件可寫,修改訪問保護設置;
    2、C:\Windows\TEMP 文件夾的磁盤滿了,文件寫不進去了,清空 TEMP 文件夾;-------------------還是MCAFEE殺毒軟件的問題,解決步驟:按訪問掃描屬性 - 所有進程 - 檢測項 - 掃描文件(在寫入磁盤時 )勾去掉就好了。

    3、第三方限制(如殺毒軟件的限制)----------------------------關閉殺毒試試

    ====================================================================================================================================

    本人技術很菜,如果文中存在錯誤,還請給位多多指出!

    轉載于:https://www.cnblogs.com/tfy1332/p/3655797.html

    總結

    以上是生活随笔為你收集整理的Android之jdbc的学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。