JFinal框架操做oracle數據庫

JFinal框架操做oracle數據庫,須要在configPlugin()方法中配置連接oracle數據庫的相關配置 html

配置JFinal數據庫操做插件,configPlugin方法 sql

這裏我加載jdbc.properties配置文件實在configConstant加載的 數據庫

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. @Override  
  2.     public void configConstant(Constants me) {  
  3.         loadPropertyFile("jdbc.properties");//加載配置文件  
  4.         me.setDevMode(getPropertyToBoolean("config.devModel", false));  
  5.         me.setViewType(ViewType.JSP);  
  6.         me.setEncoding("UTF-8");  
  7.     }  

jdbc.properites配置文件 oracle

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. oracle.driver=oracle.jdbc.driver.OracleDriver  
  2. oracle.url=jdbc:oracle:thin:@127.0.0.1 :1521:orcl  
  3. oracle.username=scott  
  4. oracle.password=xiaohu  
  5.   
  6. config.devModel=true  



[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. @Override  
  2.     public void configPlugin(Plugins me) {  
  3.         ActiveRecordPlugin arp=null;  
  4.         String driver=getProperty("oracle.driver");  
  5.         String url=getProperty("oracle.url");  
  6.         String username=getProperty("oracle.username");  
  7.         String password=getProperty("oracle.password");  
  8.         DruidPlugin dp=new DruidPlugin(url, username, password, driver);  
  9.         me.add(dp);  
  10.         arp=new ActiveRecordPlugin(dp);//設置數據庫方言  
  11.         arp.setDialect(new OracleDialect());  
  12.         arp.setContainerFactory(new CaseInsensitiveContainerFactory());//忽略大小寫  
  13.         me.add(new EhCachePlugin());  
  14.         arp.addMapping("users", "id",Users.class);  
  15.         me.add(arp);  
  16.     }  

須要注意一點的是,因爲oracle數據庫中在建立表時,會自動的將全部的字段自動轉爲大寫,所以在避免後面操做的時候出現大小寫錯誤的相關異常,這裏須要配置忽略大小寫的功能
[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. arp.setContainerFactory(new CaseInsensitiveContainerFactory());//忽略大小寫  

若是不須要對數據庫進行增長操做,則必須配置忽略大小寫,若是不配置忽略大小寫,在保存源代碼的該段代碼中會出現屬性id找不到的異常 app

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. /**  
  2.      * Save model.  
  3.      */  
  4.     public boolean save() {  
  5.         Config config = getConfig();  
  6.         Table table = getTable();  
  7.           
  8.         StringBuilder sql = new StringBuilder();  
  9.         List<Object> paras = new ArrayList<Object>();  
  10.         config.dialect.forModelSave(table, attrs, sql, paras);  
  11.         // if (paras.size() == 0)   return false;   // The sql "insert into tableName() values()" works fine, so delete this line  
  12.           
  13.         // --------  
  14.         Connection conn = null;  
  15.         PreparedStatement pst = null;  
  16.         int result = 0;  
  17.         try {  
  18.             conn = config.getConnection();  
  19.             if (config.dialect.isOracle())  
  20.                 pst = conn.prepareStatement(sql.toString(), new String[]{table.getPrimaryKey()});  
  21.             else  
  22.                 pst = conn.prepareStatement(sql.toString(), Statement.RETURN_GENERATED_KEYS);  
  23.               
  24.             config.dialect.fillStatement(pst, paras);  
  25.             result = pst.executeUpdate();  
  26.             <span style="color:#ff0000;">getGeneratedKey(pst, table);//若是不配置忽略大小寫,執行到這裏會出現異常,雖然能夠添加到數據庫,可是這裏報錯,界面仍是會顯示500錯誤</span>  
[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1.     getModifyFlag().clear();  
  2.     return result >= 1;  
  3. } catch (Exception e) {  
  4.     throw new ActiveRecordException(e);  
  5. } finally {  
  6.     config.close(pst, conn);  
  7. }  
[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. <span style="color:#ff0000;">getGeneratedKey()源代碼部分</span>  
[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. /**  
  2.      * Get id after save method.  
  3.      */  
  4.     private void getGeneratedKey(PreparedStatement pst, Table table) throws SQLException {  
  5.         String pKey = table.getPrimaryKey();  
  6.         if (get(pKey) == null || getConfig().dialect.isOracle()) {  
  7.             ResultSet rs = pst.getGeneratedKeys();  
  8.             if (rs.next()) {  
  9.                 Class colType = table.getColumnType(pKey);  
  10.                 if (colType == Integer.class || colType == int.class)  
  11.                     set(pKey, rs.getInt(1));  
  12.                 else if (colType == Long.class || colType == long.class)  
  13.                     set(pKey, rs.getLong(1));  
  14.                 else  
  15.                     set(pKey, rs.getObject(1));     // It returns Long object for int colType  
  16.                 rs.close();  
  17.             }  
  18.         }  
  19.     }  

set()源代碼部分
[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. /**  
  2.      * Set attribute to model.  
  3.      * @param attr the attribute name of the model  
  4.      * @param value the value of the attribute  
  5.      * @return this model  
  6.      * @throws ActiveRecordException if the attribute is not exists of the model  
  7.      */  
  8.     public M set(String attr, Object value) {  
  9.         <span style="color:#ff0000;">if (getTable().hasColumnLabel(attr)) {//執行到這裏返回false</span>  
  10.             attrs.put(attr, value);  
  11.             getModifyFlag().add(attr);  // Add modify flag, update() need this flag.  
  12.             return (M)this;  
  13.         }  
  14.         throw new ActiveRecordException("The attribute name is not exists: " + attr);//拋出該異常  
  15.     }  

如今來講說若是不配置,爲何會出現 The attribute name is not exists:這個異常,這是由於oracle中的字段是大寫的,而set方法中傳入的attr屬性的值是小寫,而getTable()中的屬性對應的就是oracle字段,這些屬性則是大寫,所以這裏使用getTable().hasColumnLabel(attr)判斷是否存在該字段,就會找不到,這時就會拋出該異常,所以就必須配置忽略大小寫的方法,就不會出現該異常


實體類: 框架

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. package com.tenghu.core.model;  
  2.   
  3. import com.jfinal.plugin.activerecord.Model;  
  4.   
  5. public class Users extends Model<Users>{  
  6.     public static Users dao=new Users();  
  7. }  

操做數據: ide

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. Users users=new Users();  
  2. users.set("id", "users_sequence.nextval");  
  3. users.set("username", "張三");  
  4. users.set("pwd", "sdfsdfs");  
  5. users.save();  
  6. List<Users> testList=Users.dao.find("select * from users");  


這裏就完成了JFinal框架操做oracle數據庫,刪除和修改就本身去測試了
相關文章
相關標籤/搜索