【发布时间】:2017-03-12 04:37:23
【问题描述】:
我有一种方法可以检查数据库中是否存在记录。 如果记录在数据库中,它应该返回 false,但是如果它不存在,它应该插入记录并返回 true。
当前状态下的代码似乎可以正常工作,但是如果记录没有在需要时将新行插入数据库,我似乎无法弄清楚这是为什么。
public boolean createRecord(Myuser myuser)
{
Connection cnnct = null;
PreparedStatement pStmnt = null;
try
{
cnnct = getConnection();
String preQueryStatement = "SELECT * FROM MYUSER WHERE MYUSER.USERID = ?";
pStmnt = cnnct.prepareStatement(preQueryStatement);
pStmnt.setString(1,myuser.getUserid());
ResultSet rs = pStmnt.executeQuery();
if (!rs.next())
{
String insertStatement
= "INSERT INTO MYUSER VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
pStmnt = cnnct.prepareStatement(insertStatement);
pStmnt.setString(1, myuser.getUserid());
pStmnt.setString(2, myuser.getName());
pStmnt.setString(3, myuser.getPassword());
pStmnt.setString(4, myuser.getEmail());
pStmnt.setString(5, myuser.getPhone());
pStmnt.setString(6, myuser.getAddress());
pStmnt.setString(7, myuser.getSecQn());
pStmnt.setString(8, myuser.getSecAns());
pStmnt.executeUpdate();
System.out.println("new user inserted");
return true;
}
else
{
System.out.println("user already in data base");
return false;
}
}
catch (SQLException ex)
{
while (ex != null)
{
ex.printStackTrace();
ex = ex.getNextException();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
finally
{
if (pStmnt != null)
{
try
{
pStmnt.close();
}
catch (SQLException e)
{
}
}
if (cnnct!= null)
{
try
{
cnnct.close();
}
catch (SQLException sqlEx)
{
}
}
}
}
【问题讨论】:
-
也许你应该试试
ResultSet rs = pStmnt.executeQuery(); if (! rs.next()) { ... }。也许您应该尝试阅读文档以了解 JDBC 的实际工作原理,例如The Java™ Tutorials - JDBC Basics - Retrieving and Modifying Values from Result Sets. -
所以您对 java 的经验很少,但您想研究高级主题,例如数据库交互或 j2ee 的东西?听起来你自己负担过重。考虑先学习基本知识。
-
它适用于 uni 我主要有 C# 方面的经验,并且我对 mysql 有一些了解。
-
请出示
getConnection()的代码。此外,您正在吞咽异常。至少您应该记录它们(或使用ex.printStackTrace()。 -
你这样做完全错误。您应该使用单个原子
INSERT ... ON DUPLICATE IGNORE语句。您的方式存在时间窗口问题。