java动态生成sql语句 你去查hibernate或者ibatis,也可以查ejb么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Hibernate中提供了一些工具可以直接使用hbm2ddl工具:根据映射文件自动生成数据库Schema,而不用自己来编写SQL语句。当然也提供了hbm2java工具来自动生成java源文件 Hibernate中的hbm2ddl!!!或者用PD 在配置文件的参数可以通过servlet得到你可以查看一下servletcontext类 在配置文件当中 <context-param> <param-name> sqlSentence </param-name> <param-value> select *from yourTable </param-value></context-param>在servlet当中 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); try { ServletContext context = getServletContext(); String rmihost = context.getInitParameter("rmihost");//得到sql语句然后处理}catch(Exception e){} String rmihost = context.getInitParameter("rmihost");//得到sql语句然后处理参数错了应该用sqlSentence改为String rmihost = context.getInitParameter("sqlSentence");//得到sql语句然后处理 http://download.csdn.net/source/680234 用Hibernate中的hbm2ddl或者你可以看Hibernate源码。呵呵 建议楼主用hibernate 或ibatis,很方便的。 //原理很简单,当你的pojo类的属性与数据库表字段名一样时,那么就以通过反射拼凑出相应的sql.package hl.ghost.dao;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;public class Session implements RowMapper { private JdbcTemplate jdbcTemplate; private Class clazz; public int save(Object target, String table) { StringBuilder sb = new StringBuilder("insert into "); List list = new ArrayList(); sb.append(table); sb.append(" ("); for (Field field : target.getClass().getDeclaredFields()) { Object result = this.getObjectValue(field,target); sb.append(field.getName()).append(","); list.add(result); } sb.replace(sb.length() - 1, sb.length(), ")"); sb.append(" values("); for (int i = 0; i < target.getClass().getDeclaredFields().length; i++) { sb.append("?,"); } sb.replace(sb.length() - 1, sb.length(), ")"); return this.jdbcTemplate.update(sb.toString(), list.toArray()); } public int delete(Object target, String table) { try { return this.jdbcTemplate.update("delete from " + table + " where id=?", new Object[] { getObjectValue(target.getClass() .getDeclaredField("id"),target) }); } catch (Exception e) { e.printStackTrace(); return 0; } } public List<Object> selectObjectsByProperties(Object target, String table) { clazz=target.getClass(); StringBuilder sb = new StringBuilder("select * from " + table + " where 1=1 "); List<Object> list = new ArrayList<Object>(); if (null != target) { for (Field field : target.getClass().getDeclaredFields()) { Object result = this.getObjectValue(field,target); if (result != null) { sb.append(" and ").append(field.getName()).append("=? "); list.add(result); } } } return this.jdbcTemplate.query(sb.toString(), list.toArray(), this); } public Object mapRow(ResultSet rs, int arg1) throws SQLException { Object object = null; try { object = clazz.getConstructor(null).newInstance(); for (Field field : clazz.getDeclaredFields()) { Method method = clazz.getMethod("set" + new StringBuffer(field.getName()).replace(0, 1, field .getName().substring(0, 1).toUpperCase()), new Class[] { field.getType() }); method.invoke(object, new Object[] { rs.getObject(field .getName())}); } } catch (Exception e) { e.printStackTrace(); } return object; } public Object getObjectValue(Field field,Object target) { Object result = null; try { Method method = target.getClass().getMethod( "get" + new StringBuffer(field.getName()).replace(0, 1, field.getName().substring(0, 1) .toUpperCase()), null); result = method.invoke(target,null); } catch (Exception e) { e.printStackTrace(); } return result; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }}这是建立在jdbcTemplate上的ormapping,只要你的类的属性与数据表的字段名字一样,且有id这个主键,那么就可以用这个Session做增删查,比如你有个表 users(id,uname,upassword) ,类User(id,uname,upassword).那么你就可以用上面的session对users这个表做增删改查,User user=new User();user.setId(1);user.setUname("zhangsan");user.setUpassword("password");session.save(user,"users");//增加session.delete(user,"users");//删除//他会跟据你user的属性的值进行组合查询,下面是按name,password的组合查询。User user=new User();user.setUpassword("password");user.setUname("zhangsan");session.selectObjectsByProperties(user,"users"); hibernate的源代码就是最好的教材。 webservice求助 JNDI查找数据源出错。我用的是tomcat5。数据库是mysql。 EXTJS的EditorGrid怎么设置多选 文件读取问题 在jsp页面中如何设置停留几秒钟然后跳转到另一个页面!(在服务器端实现) JSP页面输出的问题 刚工作半个月,遇到棘手问题!救我! 开发自定义tab有没有好的工具??? 关于MYSQL分页,为什么会有重复记录 关于请求超时的问题 tomcat运行后,无法显示页面 昨天晚上jsp程序,经过多用户,长时间测试,tomcat返回日志如下:请大家帮忙解答(送45分)
可以直接使用hbm2ddl工具:
根据映射文件自动生成数据库Schema,而不用自己来编写SQL语句。
当然也提供了hbm2java工具来自动生成java源文件
或者用PD
你可以查看一下servletcontext类
<param-name>
sqlSentence
</param-name>
<param-value>
select *from yourTable
</param-value>
</context-param>在servlet当中 public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
try {
ServletContext context = getServletContext();
String rmihost = context.getInitParameter("rmihost");//得到sql语句然后处理
}
catch(Exception e){
}
参数错了应该用sqlSentence改为String rmihost = context.getInitParameter("sqlSentence");//得到sql语句然后处理
package hl.ghost.dao;import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;public class Session implements RowMapper {
private JdbcTemplate jdbcTemplate;
private Class clazz; public int save(Object target, String table) {
StringBuilder sb = new StringBuilder("insert into ");
List list = new ArrayList();
sb.append(table);
sb.append(" ("); for (Field field : target.getClass().getDeclaredFields()) {
Object result = this.getObjectValue(field,target);
sb.append(field.getName()).append(",");
list.add(result);
}
sb.replace(sb.length() - 1, sb.length(), ")");
sb.append(" values(");
for (int i = 0; i < target.getClass().getDeclaredFields().length; i++) {
sb.append("?,");
}
sb.replace(sb.length() - 1, sb.length(), ")");
return this.jdbcTemplate.update(sb.toString(), list.toArray());
} public int delete(Object target, String table) {
try {
return this.jdbcTemplate.update("delete from " + table
+ " where id=?", new Object[] { getObjectValue(target.getClass()
.getDeclaredField("id"),target) });
} catch (Exception e) {
e.printStackTrace();
return 0;
}
} public List<Object> selectObjectsByProperties(Object target, String table)
{
clazz=target.getClass();
StringBuilder sb = new StringBuilder("select * from " + table
+ " where 1=1 ");
List<Object> list = new ArrayList<Object>();
if (null != target) {
for (Field field : target.getClass().getDeclaredFields()) {
Object result = this.getObjectValue(field,target);
if (result != null) {
sb.append(" and ").append(field.getName()).append("=? ");
list.add(result);
}
}
}
return this.jdbcTemplate.query(sb.toString(), list.toArray(), this);
} public Object mapRow(ResultSet rs, int arg1) throws SQLException {
Object object = null;
try {
object = clazz.getConstructor(null).newInstance();
for (Field field : clazz.getDeclaredFields()) {
Method method = clazz.getMethod("set"
+ new StringBuffer(field.getName()).replace(0, 1, field
.getName().substring(0, 1).toUpperCase()),
new Class[] { field.getType() });
method.invoke(object, new Object[] { rs.getObject(field
.getName())});
}
} catch (Exception e) { e.printStackTrace();
}
return object;
} public Object getObjectValue(Field field,Object target) {
Object result = null;
try {
Method method = target.getClass().getMethod(
"get"
+ new StringBuffer(field.getName()).replace(0, 1,
field.getName().substring(0, 1)
.toUpperCase()), null);
result = method.invoke(target,null);
} catch (Exception e) {
e.printStackTrace();
}
return result;
} public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
这是建立在jdbcTemplate上的ormapping,只要你的类的属性与数据表的字段名字一样,且有id这个主键,那么就可以用这个Session做增删查,比如你有个表 users(id,uname,upassword) ,类User(id,uname,upassword).
那么你就可以用上面的session对users这个表做增删改查,
User user=new User();
user.setId(1);
user.setUname("zhangsan");
user.setUpassword("password");
session.save(user,"users");//增加session.delete(user,"users");//删除
//他会跟据你user的属性的值进行组合查询,下面是按name,password的组合查询。
User user=new User();
user.setUpassword("password");
user.setUname("zhangsan");
session.selectObjectsByProperties(user,"users");