国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

JavaWeb dbutils執行sql命令并遍歷結果集時不能查到內容的原因分析

2024-07-13 10:15:19
字體:
來源:轉載
供稿:網友

JAVAWEB dbutils執行sql命令并遍歷結果集時不能查到內容的原因及處理方法如下所示:

遍歷結果集時只遍歷bean對象才會只輸出第一行那種內容(第一行是輸出了UserEntity類實例化的對象),所以這里需要 re.getRepoTableName() 才能通過對象調用相對應的內容

這樣一來,就可以取到值了

javaweb,dbutils,sql命令,sql遍歷結果集

 

javaweb,dbutils,sql命令,sql遍歷結果集

PS:JavaWeb之DBUtils詳細介紹如下所示:

 

一、什么是DBUtils及作用

  DBUtils是apache公司寫的。DBUtils是java編程中的數據庫操作實用工具,小巧簡單實用。

  DBUtils封裝了對JDBC的操作,簡化了JDBC操作??梢陨賹懘a。

  1.對于數據表的讀操作,他可以把結果轉換成List,Array,Set等java集合,便于程序員操作;

  2.對于數據表的寫操作,也變得很簡單(只需寫sql語句)

  3.可以使用數據源,使用JNDI,數據庫連接池等技術來優化性能--重用已經構建好的數據庫連接對象

二、DBUtils的三個核心對象

  2.1、QueryRunner類

    QueryRunner中提供對sql語句操作的API.它主要有三個方法:query() 用于執行select,update() 用于執行insert update delete,batch() 批處理。等下下面的會詳細的介紹這幾種方法的用法。

  2.2、ResultSetHandler接口

    用于定義select操作后,怎樣封裝結果集.它總共有9個常用的實現類,下面我會詳細的為大家介紹怎么去使用。

  2.3、DbUtils類

    它就是一個工具類,定義了關閉資源與事務處理的方法

三、怎么去使用DBUtils框架

  3.1、使用步驟

    導入相對應的jar包

    創建QueryRunner對象

      使用query方法執行select語句

      使用ResultSetHandler封裝結果集

      使用DbUtils類釋放資源

  3.2、實例

    注:本人使用的是C3P0連接池

import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.ResultSetHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.junit.Test;import com.jxlg.domain.User;public class TestSelect { @Test public void testSelect(){ //創建一個QueryRunner對象 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try {  // new ResultSetHandler<List<User>>告訴我們如何封裝結果集  List<User> list = qr.query("select * from user", new ResultSetHandler<List<User>>(){  @Override  //query語句執行select語句后,結果一返回值的形式傳遞過來  public List<User> handle(ResultSet rs) throws SQLException {   List<User> list = new ArrayList<User>();   while(rs.next()){   User u = new User();   u.setId(rs.getInt(1));   u.setUsername(rs.getString(2));   u.setPassword(rs.getString(3));   u.setEmail(rs.getString(4));   u.setBirthday(rs.getDate(5));   list.add(u);   }   return list;  }  });  for (User user : list) {  System.out.println(user);  } } catch (SQLException e) {  e.printStackTrace(); }} @Test public void testSelect2(){ //創建一個QueryRunner對象 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try {  //執行sql語句,返回結果  List<User> list = qr.query("select * from user where id=? and username=?", new BeanListHandler<User>(User.class),1,"tom");  for (User user : list) {  System.out.println(user);  } } catch (SQLException e) {  e.printStackTrace(); } }}

四、DBUtils三個核心對象詳解

  4.1、QueryRunner對象

    4.1.1、構造函數

         new QueryRunner(); 它的事務可以手動控制。                    

也就是說此對象調用的方法(如:query、update、batch)參數中要有Connection對象。

           new QueryRunner(DataSource ds); 它的事務是自動控制的。一個sql一個事務。                           

此對象調用的方法(如:query、update、batrch)參數中無需Connection對象。

    4.1.2、常用方法 

javaweb,dbutils,sql命令,sql遍歷結果集

   javaweb,dbutils,sql命令,sql遍歷結果集

        javaweb,dbutils,sql命令,sql遍歷結果集

        javaweb,dbutils,sql命令,sql遍歷結果集

        javaweb,dbutils,sql命令,sql遍歷結果集

  4.2、ResultSetHandler接口

    4.2.1、它有9個結果處理器

      ArrayHandler:適合取1條記錄。把該條記錄的每列值封裝到一個數組中Object[]
      ArrayListHandler:適合取多條記錄。把每條記錄的每列值封裝到一個數組中Object[],把數組封裝到一個List中
      ColumnListHandler:取某一列的數據。封裝到List中。
      KeyedHandler:取多條記錄,每一條記錄封裝到一個Map中,再把這個Map封裝到另外一個Map中,key為指定的字段值。
      MapHandler:適合取1條記錄。把當前記錄的列名和列值放到一個Map中
      MapListHandler:適合取多條記錄。把每條記錄封裝到一個Map中,再把Map封裝到List中
      ScalarHandler:適合取單行單列數據
      BeanHandler
      BeanListHandler

    4.2.2、實例       

import static org.junit.Assert.*;import java.sql.SQLException;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.ArrayHandler;import org.apache.commons.dbutils.handlers.ArrayListHandler;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.ColumnListHandler;import org.apache.commons.dbutils.handlers.KeyedHandler;import org.apache.commons.dbutils.handlers.MapHandler;import org.apache.commons.dbutils.handlers.MapListHandler;import org.apache.commons.dbutils.handlers.ScalarHandler;import org.junit.Test;import com.jxlg.domain.User;public class TestResultSetHandler { @Test public void test1() { //ArrayHandler:適合取1條記錄。把該條記錄的每列值封裝到一個數組中Object[] QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try {  Object[] o = qr.query("select * from user where id=?", new ArrayHandler(),5);  for (Object object : o) {  System.out.println(object);  } } catch (SQLException e) {  e.printStackTrace(); } } @Test public void test2() throws SQLException { //ArrayListHandler:適合取多條記錄。把每條記錄的每列值封裝到一個數組中Object[],把數組封裝到一個List中 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); List<Object[]> list = qr.query("select * from user", new ArrayListHandler()); for (Object[] objects : list) {  for (Object object : objects) {  System.out.println(object);  }  System.out.println("----------------------"); } } @Test public void test3() throws SQLException { //ColumnListHandler:取某一列的數據。封裝到List中 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); List<Object> list = qr.query("select username,password from user ", new ColumnListHandler(1)); for (Object object : list) {  System.out.println(object); }  } @Test public void test4() throws SQLException { //KeyedHandler:取多條記錄,每一條記錄封裝到一個Map中, //再把這個Map封裝到另外一個Map中,key為指定的字段值。 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); //大的Map的key是表中的某列數據,小的Map的key是表的列名,所以大的map的key用的是Object類型,小的是String。 Map<Object, Map<String, Object>> map = qr.query("select * from user", new KeyedHandler(1)); for (Map.Entry<Object, Map<String,Object>> m : map.entrySet()) {  System.out.println(m);//就是id至,因為設置了“1”.  for (Map.Entry<String, Object> mm : m.getValue().entrySet()) {  System.out.println(mm);//取出小map中的key和value  }  System.out.println("--------------------"); } } @Test public void test5() throws SQLException { //MapHandler:適合取1條記錄。把當前記錄的列名和列值放到一個Map中 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); Map<String, Object> map = qr.query("select * from user", new MapHandler()); for (Map.Entry<String, Object> m : map.entrySet()) {  System.out.println(m.getKey()+"/t"+m.getValue());  //默認取第一行數據,需要去其它行用where加條件 } } @Test public void test6() throws SQLException { //MapListHandler:適合取多條記錄。把每條記錄封裝到一個Map中,再把Map封裝到List中 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); List<Map<String, Object>> list = qr.query("select * from user", new MapListHandler()); for (Map<String, Object> map : list) {  for (Map.Entry<String, Object> m : map.entrySet()) {  System.out.println(m);   }  System.out.println("-----------"); } } @Test public void test7() throws SQLException { //ScalarHandler:適合取單行單列數據 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); Object o = qr.query("select * from user", new ScalarHandler(2)); System.out.println(o); }  @Test public void test8() throws SQLException { //BeanHandler:適合取單行單列數據 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); User user = qr.query("select * from user", new BeanHandler<User>(User.class)); System.out.println(user); } }

五、使用DBUtils做一個增刪改查的例子  

import static org.junit.Assert.*;import java.sql.SQLException;import java.util.Date;import javax.crypto.spec.OAEPParameterSpec;import org.apache.commons.dbutils.QueryRunner;import org.junit.Test;public class TestInCURD { @Test public void testInsert() { //創建一個QueryRunner對象 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try {  qr.update("insert into user (username,password,email,birthday)values(?,?,?,?)", "guapi","4646","guapi@163.com",new Date()); } catch (SQLException e) {  e.printStackTrace(); } } @Test public void testUpdate() { //創建一個QueryRunner對象 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try {  qr.update("update user set username=?,password=? where id=4 ", "meizimeizi","520520"); } catch (SQLException e) {  e.printStackTrace(); } } @Test public void testDelete() { //創建一個QueryRunner對象 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try {  qr.update("delete from user where id=? ",4); } catch (SQLException e) {  e.printStackTrace(); } } @Test public void testBatch() { //創建一個QueryRunner對象 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try {  Object[][] params = new Object[10][]; //高維代表執行多少次sql語句  for(int i =0;i<params.length;i++){  params[i] =new Object[]{"guapi"+i,"4646","guapi@163.com",new Date()};   }  qr.batch("insert into user (username,password,email,birthday)values(?,?,?,?)", params ); } catch (SQLException e) {  e.printStackTrace(); } }}

總結

以上所述是小編給大家介紹的JavaWeb dbutils執行sql命令并遍歷結果集時不能查到內容的原因分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎兰屯市| 灌云县| 阳信县| 旬阳县| 临清市| 奉贤区| 望都县| 江油市| 常宁市| 抚松县| 黎平县| 科尔| 华安县| 云安县| 珠海市| 宜良县| 康定县| 莆田市| 靖江市| 青海省| 会宁县| 沙湾县| 德阳市| 赣榆县| 云浮市| 米脂县| 原平市| 康马县| 垣曲县| 汽车| 黑龙江省| 禄丰县| 申扎县| 广宁县| 三亚市| 沭阳县| 襄樊市| 达日县| 江西省| 芦溪县| 会同县|