一般检查sql语句就是将最终要发送的sql语句打印出来 在数据库中验证
但是在java web中使用prepareStatement只能看到一些带有“?”的语句 无法看到最终sql语句怎么样可以查看到String sql = "UPDATE Question SET q_orientation=?,q_grade=?,q_type=?,q_cont=?,q_answer=?,q_rightAnswer=?,q_score=? WHERE q_id=?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, q.getQrientation());
pstmt.setString(2, q.getGrade());
pstmt.setString(3, q.getType());
pstmt.setString(4, q.getCont());
pstmt.setString(5, q.getAnswer());
pstmt.setString(6, q.getRightAnswer());
pstmt.setInt(7, q.getScore());
pstmt.setInt(8, q.getId());
pstmt.executeUpdate();现在进行pstmt.executeUpdate();之前看到 例如UPDATE Question SET q_orientation='程序基础',q_grade='初级',q_type='单选题',q_cont='面向对象是什么?',q_answer='A:继承(#)B:封装(#)C:多态(#)D:抽象',q_rightAnswer='ABC',q_score=5 WHERE q_id=21
这样的语句 怎么得到?谢谢
但是在java web中使用prepareStatement只能看到一些带有“?”的语句 无法看到最终sql语句怎么样可以查看到String sql = "UPDATE Question SET q_orientation=?,q_grade=?,q_type=?,q_cont=?,q_answer=?,q_rightAnswer=?,q_score=? WHERE q_id=?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, q.getQrientation());
pstmt.setString(2, q.getGrade());
pstmt.setString(3, q.getType());
pstmt.setString(4, q.getCont());
pstmt.setString(5, q.getAnswer());
pstmt.setString(6, q.getRightAnswer());
pstmt.setInt(7, q.getScore());
pstmt.setInt(8, q.getId());
pstmt.executeUpdate();现在进行pstmt.executeUpdate();之前看到 例如UPDATE Question SET q_orientation='程序基础',q_grade='初级',q_type='单选题',q_cont='面向对象是什么?',q_answer='A:继承(#)B:封装(#)C:多态(#)D:抽象',q_rightAnswer='ABC',q_score=5 WHERE q_id=21
这样的语句 怎么得到?谢谢
解决方案 »
- 使用JavaBean操作MySQL
- 通过Jasper生成Excel并且在浏览器中输出?在线等。。
- 请教个javascript编程问题,如何实现向数据库添加或者是删除一条记录
- 关于tomcat数据库连接池重连的问题
- 设置filter后启动不了.
- http会话是只要有访问请求就建立的吗????????????????????
- xtree动态加载子节点,但无法显示中文节点,百分求救,在线结贴!!急!!
- jsp如何判断并拒绝非特定文件类型的文件上传?
- <jsp:useBean>使用构造函数 问题?
- 上头交给你一个结构混乱的jsp网站让你维护,你会怎么办?
- 前台是个图标,<img>图标。 怎么调用JSP作成的日历页面(一个小页面,用java + html代码,不是js)
- jsp显示问题
还有一个笨办法,就是在执行executeUpdate前,编码将sql语句保存在一个String中,然后可以查看。
还有一个笨办法,就是在执行executeUpdate前,编码将sql语句保存在一个String中,然后可以查看。
还有一个笨办法,就是在执行executeUpdate前,编码将sql语句保存在一个String中,然后可以查看。
使用的是orcaleprepareStatement是JDBC中连接数据库的一个方法他对连接语句进行了封装 所以看不到有没有是么方法查看 主要是在开发时 查看最终操作数据库的SQL
return sql;
}
String [] args=new String[params.length];
for(short i=0;i<params.length;i++){
if(params[i]==null){
args[i]="NULL";
}else if(params[i] instanceof Number){
args[i]=String.valueOf(params[i]);
}else if(params[i] instanceof String){
args[i]="'"+params[i].toString()+"'";
}else if(params[i] instanceof Date){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
args[i]="'"+sdf.format(params[i])+"'";
}
}
StringBuilder dumpSql = new StringBuilder();
int lastPos = 0;
int Qpos = sql.indexOf('?', lastPos); // find position of first question
//
int argIdx = 0;
String arg; while (Qpos != -1) {
// get stored argument
try {
arg = args[argIdx];
} catch (IndexOutOfBoundsException e) {
arg = "?";
}
if (arg == null) {
arg = "?";
} argIdx++;
dumpSql.append(sql.substring(lastPos, Qpos)); // dump segment of sql
// up to question
// .
lastPos = Qpos + 1;
Qpos = sql.indexOf('?', lastPos);
dumpSql.append(arg);
}
if (lastPos < sql.length()) {
dumpSql.append(sql.substring(lastPos, sql.length())); // dump last
// segment
}
return dumpSql.toString();用这个方法试试
public static void main(String[] args) {
String sql = "UPDATE Question SET q_orientation=?,q_grade=?,q_type=?,q_cont=?,q_answer=?,q_rightAnswer=?,q_score=? WHERE q_id=?)";
List<String> list=new ArrayList<String>();
list.add("程序基础");
list.add("初级");
list.add("单选题");
list.add("面向对象是什么?");
list.add(":继承(#)B:封装(#)C:多态(#)D:抽象");
list.add("ABC");
list.add("5");
list.add("21");
String resultSql=getExecuteSql(sql,list);
System.out.println(resultSql);
}
public static String getExecuteSql(String sql,List<String> list){
Matcher m=Pattern.compile("\\?").matcher(sql);
int count=0;
while(m.find()){
sql=sql.replaceFirst("\\?","{"+count+"}");
count++;
}
return MessageFormat.format(sql,list.toArray());
}