MySQL、Java和插入表
TL;DR:我在向表中插入新的“类”时遇到问题,并且认为错误与runQuery函数有关。我现在已经省略了runQuery函数的其余部分,因为我认为这对于这个问题没有必要,但是我可以将它添加到241行中。根据我在网上看到的关于这种情况的情况,准备好的报表似乎是输入信息的一种更简单的方式,不是吗MySQL、Java和插入表,java,mysql,jdbc,Java,Mysql,Jdbc,TL;DR:我在向表中插入新的“类”时遇到问题,并且认为错误与runQuery函数有关。我现在已经省略了runQuery函数的其余部分,因为我认为这对于这个问题没有必要,但是我可以将它添加到241行中。根据我在网上看到的关于这种情况的情况,准备好的报表似乎是输入信息的一种更简单的方式,不是吗 感谢您通读本文以及您可能的帮助 从链接图像到堆栈跟踪,似乎有人试图执行带有参数的语句?席位持有者。SQL引擎抱怨ClassID的参数为“?”。应该是吗?不是“?”,因为数值不需要“”。然而奇怪的是,我在查询
感谢您通读本文以及您可能的帮助 从链接图像到堆栈跟踪,似乎有人试图执行带有参数的语句?席位持有者。SQL引擎抱怨ClassID的参数为“?”。应该是吗?不是“?”,因为数值不需要“”。然而奇怪的是,我在查询中找不到任何ClassID参数。我有一行代码,它在哪里?标记为有问题,语法应为:sql+=“?”;或sql+=?;如果对应的类型是string aka VARCHAR或类似的类型,那么如果它是数值型的,那么它应该是“?”?。想想当你更换你的电脑时?使用变量中的值,它将生成一个定义良好的SQL命令。那么如何处理输入的不同数据类型呢?我想这是一个常见的问题,有一个相当简单的解决方案……不,不是。JDBCAPI中有一些调用允许您识别列类型,您可以相应地调整参数,但我建议重新考虑设计。这整件事闻起来有点像是个坏主意。runQuery方法应该是一个内部服务例程,但它真的比调用PreparedStatement.exec做得更多吗?在理想情况下,应用程序所需的所有SQL查询都是预先知道的,可以作为静态常量字符串或PreparedStatements放置。根据我的“研究”,我发现PreparedStatements经常用于插入,而且它似乎是处理这类内容的一个更简单、更高效的系统。我觉得重做是最简单的解决办法。谢谢你的意见,我真的很感激。
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 += ")";
}
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;
}