Sur*_*r ツ -1 java jsp servlets jdbc
我的源代码具有以下结构:
SourceFolder
AddProduct.jsp
源包
- 控制器(Servlet)
SaveProduct.java
- 模型(Db操作)
ProductDbOperations.java
我在产品表中插入一个新产品,同时我在product_collection表(product_id | collection_id)中插入一个条目.
要在product_collection表中插入一个条目,我需要从product表中获取生成的id .之后,将在product_collection表中插入一个新条目.
此外,我没有使用任何框架,并使用Netbeans 7.3.
问题:
使用此代码将新条目插入到产品表中
IN:ProductDbOperations.java
try
{
this.initConnection(); // Db connection
pst = cn.prepareStatement("INSERT INTO product values('"+name+"', "+quantity+", "+price+")");
rs = pst.executeUpdate();
}
catch(SQLException ex)
{
}
Run Code Online (Sandbox Code Playgroud)
我也使用以下链接的解决方案,这对我不起作用.我没有任何SQL异常
所以帮助我找出为什么这段代码不适合我.太感谢了.
并非所有驱动程序都支持getGeneratedKeys()链接答案中显示的版本.但是在准备语句时,您还可以传递应该返回的列的列表而不是"flag" Statement.RETURN_GENERATED_KEYS(并且根据我的经验传递列名更加可靠)
另外:正如javaBeginner正确指出的那样,您对预准备语句的使用是错误的.你这样做的方式仍然会让你对SQL注入大开眼界.
// run the INSERT
String sql = "INSERT INTO product values(?,?,?)";
pst = cn.prepareStatement(sql, new String[] {"PRODUCT_ID"} );
pst.setString(1, name);
pst.setInt(2, quantity);
pst.setInt(3, price);
pst.executeUpdate();
// now get the ID:
ResultSet rs = pst.getGeneratedKeys();
if (rs.next()) {
long productId = rs.getLong(1);
}
Run Code Online (Sandbox Code Playgroud)
请注意,传递给调用的列名称区分大小写.对于Oracle,列名通常是大写的.如果您使用的是Postgres,则很可能需要通过new String[] {"product_id"}
| 归档时间: |
|
| 查看次数: |
5789 次 |
| 最近记录: |