public ResultSet runQuery(String cmd, String table, String[] keys, String[] values, String[] whereKeys, String[] whereValues, int limitStart, int limitCount) throws Exception
{
PreparedStatement stmt;
if(!(cmd.equals("INSERT") || cmd.equals("SELECT") || cmd.equals("UPDATE") || cmd.equals("DELETE")))
{
throw new Exception("CMD UNSUPPORTED! CMD must be INSERT, SELECT, UPDATE, or DELETE.");
}
String sql = "";
if(cmd.equals("INSERT"))
{
//Build Insert statement
sql += "INSERT INTO "+table+" (";
for(int i = 0; i < keys.length; i++)
{
sql += ""+keys[i]+"";
if(i!=keys.length-1)
sql+=",";
}
sql += ") VALUES(";
for(int i = 0; i < values.length; i++)
{
sql += "'?'"; //This line seems to be causing trouble for me...
if(i!=values.length-1)
sql+=",";
}
sql += ")";
}
上下文:我正在开发一个类项目,并被分配了数据库团队。我对MySQL的经验很少,并且与那些声称拥有大量MySQL和Java经验的人合作。这是他为插入,选择,更新和删除创建的功能。我创建的每个使用其中一个函数的函数都有错误,需要修改这个原始的runQuery函数。我一直在尝试使用的主要内容是&#34; insert&#34;命令。我必须能够创建用户,管理员或类(如大学课程),并插入适当的信息(名称,用户名,密码,tableID)。我可以创建用户或管理员而不会产生错误,但是当我创建一个类时,我收到一个错误:http://imgur.com/g99Ru6h
public boolean createUser(String first, String last, String user, String pass)
{
String[] keys = {"FName", "LName", "UName", "Password"};
String[] vals = {first, last, user, pass};
try
{
runQuery("INSERT", "Users", keys, vals, null, null, 0, 30);
}catch(Exception e)
{
e.printStackTrace();
System.out.println(e);
return false;
}
return true;
}
public boolean createClass(int classID, String name, int adminID, String institution, String meetTimes)
{
String[] keys = {"ClassID", "ClassName", "AdminID", "Institution", "MeetTimes"};
String[] vals = {Integer.toString(classID), name, Integer.toString(adminID), institution, meetTimes};
try
{
runQuery("INSERT", "Classes", keys, vals, null, null, 0, 30);
}catch(Exception e)
{
e.printStackTrace();
System.out.println(e);
return false;
}
return true;
}
TL; DR:我在插入新课程时遇到问题&#39;到表中,并认为错误与runQuery函数有关。我暂时省略了其余的runQuery函数,因为我不认为它对于这个问题是必要的,但我可以将它全部添加到241行中。基于我在网上看到的关于这种情况的内容,preparedStatements似乎是一种更容易输入信息的方式,不是吗?
感谢您阅读本文以及您可能获得的帮助!
答案 0 :(得分:0)
从链接图像到堆栈跟踪,似乎有人试图用参数执行一个语句?占位符。 SQL引擎抱怨ClassID的参数是&#39;?&#39;。它应该是 ?不是&#39;?&#39;因为数值不需要&#39;。但奇怪的是,我无法在查询中发现任何ClassID参数。