MySQL,Java和插入表

时间:2014-10-24 23:56:22

标签: java mysql jdbc

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似乎是一种更容易输入信息的方式,不是吗?

感谢您阅读本文以及您可能获得的帮助!

1 个答案:

答案 0 :(得分:0)

从链接图像到堆栈跟踪,似乎有人试图用参数执行一个语句?占位符。 SQL引擎抱怨ClassID的参数是&#39;?&#39;。它应该是 ?不是&#39;?&#39;因为数值不需要&#39;。但奇怪的是,我无法在查询中发现任何ClassID参数。