动态如何创建odbc数据源数据源出错

查看: 8973|回复: 76
E4A4.4版更新进度()
主题帖子积分
本帖最后由 小刀 于
23:08 编辑
1、解决无法兼容安卓4.4以上系统的ART模式的问题;
2、解决折线图和柱状图的图例标签重叠的问题,以及折线图在动态添加数据后图表最大值会不断增大的问题;
3、解决MySQL数据库组件的查询记录命令返回的结果集合中会多出一个空数组的问题;
4、按钮、编辑框、标签组件增加“自定义字体”命令;
5、聊天框组件增加“气泡被单击”、“头像被长按”、“气泡被长按”事件;
6、表格组件增加“对齐方式”属性;
7、增加下拉刷新列表框组件(列表框类组件),具体用法请参考《94、下拉刷新列表框例程》(中级例程);
8、增加时间轴组件(列表框类组件),该组件由商业用户王建涛付费定制,具体用法请参考《95、时间轴例程》(中级例程);
9、增加百度播放器组件(媒体类组件),具体用法请参考《96、百度播放器例程》(中级例程);
10、增加NFC组件(传感器类组件),具体用法请参考《97、NFC例程》(中级例程);
11、转换操作类增加“字节集到十六进制”和“十六进制到字节集”命令,具体用法请参考《98、16进制数据转图片》和《99、收发16进制数据》(中级例程);
12、res资源中增加对layout布局资源的支持,具体用法请参考《40、layout界面布局例程》(高级例程);
13、画板组件增加“置组件索引”、“取组件索引”、“绑定事件”命令和“被单击”、“触摸手势”事件;
14、日历组件增加“置背景颜色”等命令,用于自定义日历的颜色风格;
15、正则表达式类增加“取子匹配数量”和“取子匹配文本”命令;
16、修复手机组件“取通话记录”命令会崩溃的问题;
17、增加滑动页面框组件(列表框类组件),可用于在应用启动时滑动显示引导页面,也可以用于浏览框的前进和后退时页面的切换效果,具体用法请参考《100、滑动页面框例程》(中级例程),注意这个例程显示在第10个例程前面;
18、解决折线图组件在继续添加数据时Y轴最大值会不断变大的问题,具体请参考《54、图表例程》(中级例程);
19、中级例程中收录一个《101、画板动态画心》例程,该源码来自E4A商业用户“王相雷”;
20、列表框组件增加“置项目对齐方式”命令,用于设置表项文字的对齐方式;
我的QQ,有事请直说。
主题帖子积分
高级会员, 积分 925, 距离下一级还需 75 积分
高级会员, 积分 925, 距离下一级还需 75 积分
期待老大加入 变量 、函数等自定义 的自动匹配的问题。否则很多在调用的时候很容易出错啊
主题帖子积分
资深会员, 积分 2812, 距离下一级还需 188 积分
资深会员, 积分 2812, 距离下一级还需 188 积分
期待越来越完善
主题帖子积分
又有新版本了 期待!!
主题帖子积分
为什么没有增加 超级列表框
主题帖子积分
更新到4.4版了。E4A开发人员辛苦了,向你们致敬!
主题帖子积分
没有地图组件吗?
主题帖子积分
资深会员, 积分 1790, 距离下一级还需 1210 积分
资深会员, 积分 1790, 距离下一级还需 1210 积分
更新到4.4版了。E4A开发人员辛苦了,向你们致敬!
主题帖子积分
初级会员, 积分 59, 距离下一级还需 141 积分
初级会员, 积分 59, 距离下一级还需 141 积分
有意义,有收获,谢谢提供
主题帖子积分
在哪下载?
经常参与各类话题的讨论,发帖内容较有主见
长期对论坛的繁荣而不断努力,或多次提出建设性意见
为论坛做出突出贡献的会员
Powered by
Template By> js动态添加行后,往数据库中插入数据的有关问题
js动态添加行后,往数据库中插入数据的有关问题
hanpwxxy & &
发布时间: & &
浏览:12 & &
回复:0 & &
悬赏:0.0希赛币
js动态添加行后,往数据库中插入数据的问题  HTML code  &!--html部分--&
&script language=&JavaScript&&
var cGetRow=-99999; function insertrow(){ var newrow = document.all.ACE_HIDDEN_TABLE.rows[0].cloneNode(true); //克隆一行 document.all(&newTB&).appendChild(newrow); //添加刚才克隆的一行 } function GetRow(){ //获得行索引 //两个parentElement分别是TD和TR,rowIndex是TR的属性 //this.parentElement.parentElement.rowIndex cGetRow=window.event.srcElement.parentElement.parentElement.rowI
DelRow(cGetRow);//点击checkbox时,直接删除行。 } function DelRow(iIndex){ //删除一行 if(iIndex==-99999){ alert(&系统提示:没有选中行号!&); }else{ newTB.deleteRow(iIndex); iIndex==-99999;//将rowIndex恢复默认值。 } } &/script& &form action=&chuli.php& method=&post&& &table border=&1&& &tr&     &td width=&40&&删除&/td&     &td width=&40&&登记&/td&     &td width=&70&&用户号码&/td&     &td width=&150&&建筑名称&/td& &/tr$>$#160;   
&tbody id=&ACE_HIDDEN_TABLE& style=&display:none&&   &tr&     &td width=&40&$>$input type=&checkbox& onclick=&GetRow()&/$>$/td&     &td width=&40&$>$input type=&text& name=&record[]& /$>$/td&     &td width=&70&$>$input type=&text& name=&usercode[]& /$>$/td&     &td width=&150&$>$input type=&text& name=&buildname[]& /$>$/td&   &/tr& &/table&
&table width=&1250& border=&1&& &!-- 插入新行的区域 begin --& &tbody id=&newTB&& &/tbody& &!-- 插入新行的区域 end --& &/table&
&div align=&center& style=&margin:10&& &input type=&button& onClick=&insertrow();& value=&增加一行&& &!--&input type=&button& onClick=&DelRow(cGetRow);& value=&删除一行&&--& &/div& &input type=&submit& value=&保存页面& style=&width:120height:40& name=&save& /& &/form& php部分&   PHP code  $con = mysql_connect(&localhost&,&root&,&mysql&) or die (&连接数据库失败&); //数据库用户名及数据库密码     //数据库名称     mysql_select_db('BERecord');  //数据库名称      mysql_query('set names utf8');
    
     //只有一行插入时的sql语句                $record=$_POST['record'];                //登记     //$no=$_POST['no'];                        //NO、     $usercode=$_POST['usercode'];            //用户号码     $buildname=$_POST['buildname'];            //建筑名称          for($i=0;$i&3;$i++){     $sql=&insert into record(record,usercode,buildname) values('$record[$i]','$usercode[$i]','$buildname[$i]')&;     $result=mysql_query($sql,$con);              if($result!= 0){         echo &数据插入成功&;         echo &&br$>$;         echo &正在返回输入页面,跳转中...&;         echo &&meta '$>$;       }          else     {         echo &插入数据失败&;         echo mysql_error();     }     }
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&使用Cglib动态创建Java类,解决你意想不到的问题,让复杂变简单
使用Cglib动态创建Java类,解决你意想不到的问题,让复杂变简单
在日常Java数据库开发中我们很少会用到自动创建Java类及类中的变量和方法,目前最常见的第三方数据库操作框架基本都要手动创建一个和数据库表一模一样的javabean,并提供每个字段对于的set,get方法,鉴于这种方式能否用一种方法只要一个数据库表名称,就可以返回一个对应该表的javabean的List列表或者其他集合,而完全不用创建一系列的Javabean呢? 答案是有,Java本身自带的类库目前好像还没有类似的功能,但是开源组织开发出一个jar包,就是cglib,目前的版本已经到cglib-nodep-2.1_3.jar,其底层采用asm动态创建字节码,对外只提供了很少的几个方法,而且也没有相应的API文档。所以学习起来比较难以下手。
下面我简单的介绍下如何使用cglib动态创建类。(例子是参考网上的)
2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
package com.javase.util;import java.util.Iterator;import java.util.Map;import java.util.Set;import net.sf.cglib.beans.BeanGenerator;import net.sf.cglib.beans.BeanMap;public class CglibBeanUtil {&&&&public Object object = null;&&&&/**&&&& * 属性map&&&& */&&&&public BeanMap beanMap = null;&&&&public CglibBeanUtil() {&&&&&&&&super();&&&&}&&&&@SuppressWarnings("unchecked")&&&&public CglibBeanUtil(Map propertyMap) {&&&&&&&&this.object = generateBean(propertyMap);&&&&&&&&this.beanMap = BeanMap.create(this.object);&&&&}&&&&/**&&&& * 给bean属性赋值&&&& * &&&& * @param property&&&& *&&&&&&&&&&&&属性名&&&& * @param value&&&& *&&&&&&&&&&&&值&&&& */&&&&public void setValue(String property, Object value) {&&&&&&&&beanMap.put(property, value);&&&&}&&&&/**&&&& * 通过属性名得到属性值&&&& * &&&& * @param property&&&& *&&&&&&&&&&&&属性名&&&& * @return 值&&&& */&&&&public Object getValue(String property) {&&&&&&&&return beanMap.get(property);&&&&}&&&&/**&&&& * 得到该实体bean对象&&&& * &&&& * @return&&&& */&&&&public Object getObject() {&&&&&&&&return this.object;&&&&}&&&&@SuppressWarnings("unchecked")&&&&private Object generateBean(Map propertyMap) {&&&&&&&&BeanGenerator generator = new BeanGenerator();&&&&&&&&Set keySet = propertyMap.keySet();&&&&&&&&for (Iterator i = keySet.iterator(); i.hasNext();) {&&&&&&&&&&&&String key = (String) i.next();&&&&&&&&&&&&generator.addProperty(key, (Class) propertyMap.get(key));&&&&&&&&}&&&&&&&&return generator.create();&&&&}&&&&&&&&}//-----------------------------------------------------------------------------------------------------//下面是测试类package com.cglib.test;import java.lang.reflect.Method;import java.util.HashMap;import com.cglib.util.CglibBeanUtil;public class CglibTest { @SuppressWarnings("unchecked") public static void main(String[] args) throws ClassNotFoundException { // 设置类成员属性 HashMap propertyMap = new HashMap(); propertyMap.put("id", Class.forName("java.lang.Integer")); propertyMap.put("name", Class.forName("java.lang.String")); propertyMap.put("address", Class.forName("java.lang.String")); // 生成动态 Bean CglibBeanUtil bean = new CglibBeanUtil(propertyMap); // 给 Bean 设置值 bean.setValue("id", new Integer(123)); bean.setValue("name", "454"); bean.setValue("address", "789"); // 从 Bean 中获取值,当然了获得值的类型是 Object System.out.println(" && id = " + bean.getValue("id")); System.out.println(" && name = " + bean.getValue("name")); System.out.println(" && address = " + bean.getValue("address")); // 获得bean的实体 Object object = bean.getObject(); // 通过反射查看所有方法名 Class clazz = object.getClass(); System.out.println(clazz.getSimpleName()); Method[] methods = clazz.getDeclaredMethods(); for (int i = 0; i & methods.length; i++) { System.out.println(methods[i].getName()); } }}
通过以上例子我们可以发现,只要提供一个Map型的属性键值对(键是变量名,值是变量的类型),就可以创建出对应的类的所以字段(注意,cglib在给创建的字段前面都有前缀“$cglib_prop_”,使用时要注意,而类名是$cglib开头的如“net.sf.cglib.empty.Object$$BeanGeneratorByCGLIB$$b5c0bff6”,这个类是唯一的),并自动提供了每个字段的set,get方法。并且该类是生成在内存中,并没有生成在本地。
现在我们要做一种用底层jdbc操作数据只需根据表名返回的List&Object&型的集合,完全不用手动创建Javabean。
1:创建一个数据库连接工具类DBUtil
2:定义一个接口:ObjectDao,该接口包含方法
List&Object& getObjectList(Connection conn, String tableName);//通过表名和前台传的连接返回对象
//如果是一个完整的项目,一般数据库连接是固定的不会每次都是一个新的数据库连接。所以上面方法中的连接可以根据实际情况省掉,而只需一个全局的连接。
现在有个问题是,通过jdbc获取到该表的数据后,如果动态的将不同的表的字段和值能组装成一个类实例并放入List中,那么只能有一种方法那就是反射。要用反射那么我们就要用Class,所以上面接口的方法看着不能满足,
所以我们在上面接口再定义个方法
List&Object& getObjectList(Connection conn, Object ob, String tableName); //和上面的方法一样,只是剥离开重新调用了下
我们最终目的是用jdbc查询后返回的ResultSet和Class来组装成一个List&Object&,所以单独定义一个工具类
GenerateUtil,其中有个方法public static List&Object& generateObjectListFromDB(Class cls, ResultSet rs),这样在接口的实现类中最终调用这个工具类的方法就可以返回我们所要的集合了。
3:下面就要实现这个接口:ObjectDaoImpl
下面直接贴上代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
package com.javase.dao.impl;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.HashMap;import java.util.List;import java.util.Map;import com.javase.dao.ObjectDao;import com.javase.db.DBUtil;import com.javase.util.CglibBeanUtil;import com.javase.util.GenerateUtil;public class ObjectDaoImpl implements ObjectDao{&&&&@Override&&&&public List&Object& getObjectList(Connection conn, String tableName)&&&&{&&&&&&&&Map&String, Class& columnMap = new HashMap&String, Class&();&&&&&&&&CglibBeanUtil beanUtil = null;&&&&&&&&String sql = "select * from " + tableName;&&&&&&&&Object ob = null;&&&&&&&&try&&&&&&&&{&&&&&&&&&&&&ResultSetMetaData rs = conn.prepareStatement(sql).executeQuery().getMetaData();&&&&&&&&&&&&for(int i = 1; i &= rs.getColumnCount(); i++)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&columnMap.put(rs.getColumnName(i), Class.forName(rs.getColumnClassName(i)));&&&&&&&&&&&&}&&&&&&&&&&&&ob = new CglibBeanUtil(columnMap).getObject();&&&&&&&&} catch (SQLException e)&&&&&&&&{&&&&&&&&&&&&e.printStackTrace();&&&&&&&&} catch (ClassNotFoundException e)&&&&&&&&{&&&&&&&&&&&&e.printStackTrace();&&&&&&&&}&&&&&&&&return this.getObjectList(conn, ob, tableName);&&&&}&&&&&&&&public List&Object& getObjectList(Connection conn, Object ob, String tableName)&&&&{&&&&&&&&String sql = "select * from " + tableName;&&&&&&&&ResultSet rs = null;&&&&&&&&List&Object& list = null;&&&&&&&&try&&&&&&&&{&&&&&&&&&&&&rs = conn.prepareStatement(sql).executeQuery();&&&&&&&&&&&&list = GenerateUtil.generateObjectListFromDB(ob.getClass(), rs);&&&&&&&&} catch (SQLException e)&&&&&&&&{&&&&&&&&&&&&e.printStackTrace();&&&&&&&&} finally&&&&&&&&{&&&&&&&&&&&&DBUtil.closeConnection(conn);&&&&&&&&}&&&&&&&&return list;&&&&}}
其中调用的工具生成类有2个,一个是CglibBeanUtil,和最上面的cglib例子一样,
另一个工具类是GenerateUtil
12345678910111213141516171819202122232425262728293031323334353637383940414243
package com.javase.util;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.sql.ResultSet;import java.util.LinkedList;import java.util.List;public class GenerateUtil{&&&&public static List&Object& generateObjectListFromDB(Class cls, ResultSet rs)&&&&{&&&&&&&&System.out.println(cls.getName());&&&&&&&&List&Object& list = new LinkedList&Object&();&&&&&&&&Field[] fields = cls.getDeclaredFields();&&&&&&&&try&&&&&&&&{&&&&&&&&&&&&while(rs.next())&&&&&&&&&&&&{&&&&&&&&&&&&&&&&Object ob = cls.newInstance();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&for(int i = 0; i & fields.length; i++)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&String fieldName = fields[i].getName().replace("$cglib_prop_", "");&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&String setMethodName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Method setMethod = cls.getDeclaredMethod(setMethodName, new Class[]{fields[i].getType()});&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&setMethod.invoke(ob, rs.getObject(fieldName));&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&list.add(ob);&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&} catch(Exception e)&&&&&&&&{&&&&&&&&&&&&e.printStackTrace();&&&&&&&&}&&&&&&&&&&&&&&&&return list;&&&&}}
所以我们对外提供的方法就是ObjectDaoImpl类的&getObjectList(Connection conn, String tableName),其中的数据库连接可以根据自己需要删掉换成全局的,再往外还可以包装对应的业务层Service及其ServiceImpl,完全根据自己实际需要。
最后我们用一个测试类:
12345678910111213141516171819202122
package com.javase.dao;import java.sql.Connection;import java.util.List;import com.javase.dao.impl.ObjectDaoImpl;import com.javase.db.DBUtil;public class test{&&&&public static void main(String[] args)&&&&{&&&&&&&&Connection conn = DBUtil.getConnection('O', "138.138.2.103", 1522, "SJPT", "TPS", "SJPTTPS");&&&&&&&&&&&&&&&&ObjectDaoImpl odi = new ObjectDaoImpl();&&&&&&&&&&&&&&&&List&Object& list = odi.getObjectList(conn, "TP_CD00101");&&&&&&&&&&&&&&&&System.out.println(list.size());&&&&&&&&&&&&}}
运行后完全正常
还有点是对事务的支持我没做,还有就是获得List&Object&后如何使用也没写,既然在daoImpl类中可以得到Class,那么再定义一个获取对于的Class的工具类,构造一个公共的方法获取List中对象的数据的方法即可,在这里我简单提下,方法参数就为(List&Object& list, Class class),在其中运用反射即可获取所有数据,这个由各位自己完成。
cglib的实例运用就说到这,谢谢
发表评论:
TA的最新馆藏}

我要回帖

更多关于 创建数据源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信