站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题不明白了,为什么可以进行查询但不能插入呢?

不明白了,为什么可以进行查询但不能插入呢?

摘要: 不明白了,为什么可以进行查询但不能插入呢?


struts1.1(struts自带连接池连接mysql 5),为什么可以进行查询操作但不能插入删除和修改操作呢?


public class LoginAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
LoginForm loginform=(LoginForm)form;
String username=loginform.getUsername();
String password=loginform.getPassword();
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try {
DataSource ds = getDataSource(request);
conn = ds.getConnection();
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from users where username='"+username+"'and password='"+password+"'";
String insql="insert into users(username,password) values('0003','wwww')";
stmt.executeUpdate(insql);
rs=stmt.executeQuery(sql);
if(rs.next()){
return mapping.findForward("Suceess");
}
} catch (SQLException e) {

}finally{
try{
rs.close();
stmt.close();
conn.close();

}catch(Exception e){e.printStackTrace();}
}
ActionMessages errors=new ActionMessages();
if(!errors.isEmpty()){
errors.add("loginwrong",new ActionError("jsp.login.wrong"));
saveErrors(request,(ActionErrors) errors);
}
return mapping.findForward("Fail");

}

}



用两个statment试试


试过了,但还是不行



stmt.executeUpdate(insql);后请先commit(),然后再进行查询


去掉里面的查询语句只留那条查询语句也不行


把stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 改为stmt=conn.createStatement();试一试


试过了,也不行


没有大侠来帮帮小弟吗?困扰两天了郁闷死了。


加分了


你确定你使用的数据库帐号有写入user表的权限么?


有的,用的root账户


在单独的jsp页面中使用下面代码可以插入,但在struts中用数据源就只可查询不可插入。

<%@ page contentType="text/html; charset=gbk" language="java" import="java.sql.*" errorPage="" %>


<head>
test测试页面
</head>
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tax?user=root&password=&useUnicode=true");

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String str = "insert into users(username,password,userid) values('1','你好!','12')";
stmt.executeUpdate(str);
String sql = "select * from users";
ResultSet rs = stmt.executeQuery(sql);
%>
<body>
<table border="1">
<%
while(rs.next()){
%>
<tr>
<td>序号:</td><td><%= rs.getString(1)%></td></tr><tr>
<td>姓名:</td><td><%= rs.getString(2)%></td></tr><tr>
<td>年龄:</td><td><%= rs.getString(3)%></td></tr>
<%
}
%>
</table>
<%out.println("数据库操作成功!");%>
<%
rs.close();
stmt.close();
conn.close();
%>
</body>




估计是没有权限, 在数据库客户端 用程序的用户名和密码登录, 然后手工输入SQL试试


试过了,可以的。我用的mysql-front试过了,手工输入sql可以插入


把createStatement(里面的参数去掉,
另外出错信息是什么??


参数去掉过但还是不行,没有任何出错异常信息。插入根编码有关系吗?
从页面到mysql的库和表都用的utf-8


你的例子中没有汉字, 无所谓编码了. 没有出错信息? ? 你把表的主键先去掉, 然后再试试


String insql="insert into users(username,password) values('0003','wwww')";

String str = "insert into users(username,password,userid) values('1','你好!','12')";

好好比较一下你两个SQL的区别, 如果你设置了userid为主键, 那么你的第一条SQL怎么可能能够插入进去呢?



程序没有抛出异常,说明没有错误,mysql的connection不是自动commit的。你在执行后sql语句后应该用上connection.commit().


mysql 的commit形同虚设, 没有用的. 现在极有可能的问题就是主键了.


我把主键去了了也不行啊。我改成一个字段做测试,除了查询其他操作都不行。


呵呵,太高兴了,按test_1982(Learner)说的方法行了。谢谢大家帮忙了!

那我每次都要加上这句话吗?commit()方法是干吗用的?但为什么有的教材上没用这个方法也行(也是struts+mysql数据库)?回答完就放分


怎么没人回答了?


建立连接的时候设置自动提交事务。


麻烦楼上的具体讲一下怎么设置自动提交事务,能贴段代码出来吗?


connection.setAutoCommit(true).


谢谢大家放分了


↑返回目录
前一篇: mysql的乱码问题,帮顶有分
后一篇: 求MySQL5的备份工具