Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多次插入SQL数据库_Java_Mysql_Sql Server_Sql Insert - Fatal编程技术网

Java 多次插入SQL数据库

Java 多次插入SQL数据库,java,mysql,sql-server,sql-insert,Java,Mysql,Sql Server,Sql Insert,我正在制作一个代码生成器,生成一个新代码,然后查询一个数据库,看看它是否存在。如果是,请再次尝试生成不同的代码。如果不存在,请将其添加到数据库中。但是当我将一个代码添加到数据库中时,查询会添加3个不同的行和3个不同的值。其中一个值是应该添加的,另外两个我不知道它们来自哪里。为什么我只将它设置为添加一个,却插入了3。我的完整类文件是: package com.xium.accesscode; import java.sql.Connection; import java.sql.Prepared

我正在制作一个代码生成器,生成一个新代码,然后查询一个数据库,看看它是否存在。如果是,请再次尝试生成不同的代码。如果不存在,请将其添加到数据库中。但是当我将一个代码添加到数据库中时,查询会添加3个不同的行和3个不同的值。其中一个值是应该添加的,另外两个我不知道它们来自哪里。为什么我只将它设置为添加一个,却插入了3。我的完整类文件是:

package com.xium.accesscode;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.ThreadLocalRandom;

import com.xium.log.ServerLogger;
import com.xium.sql.DBConnections;
import com.xium.utils.StringUtils;

public class NewAccessCode {

static String AccessCodeDBuser = "root";
static String AccessCodeDBpass = "";
static String AccessCodeDBhost = "localhost";

static String newAccessCode;
static String randS;
static String randFinal;

static int min = 000000000;
static int max = 999999999;
static int randI;

public static void AccessCode() {
    if(newAccessCode() == 0) {
        ServerLogger.writeLog("[ALERT] Database Error");
    } else if(newAccessCode() == 1) {
        //Reruns the code generator, to make a unique code
        newAccessCode();
    } else if(newAccessCode() == 2) {
        ServerLogger.writeLog("[NOTE] New Access Code: " + newAccessCode);
    }
}

/*
 * Return Codes:
 * 0 - Database Error
 * 1 - Code Already Exists
 * 2 - New Access Code Added
 */

private static int newAccessCode() {
    genAccessCode();
    newAccessCode = randFinal;

    //Does it already exist?
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet results = null;
    String statement = "SELECT count(*) FROM `xium`.`accesscodes` WHERE `accesscode`='" + newAccessCode + "'";
    String statement2 = "INSERT INTO `xium`.`accesscodes` (`accesscode`, `used`, `assignedto`) VALUES ('" + newAccessCode + "', '0', '')";

    try {
        connection = DBConnections.getAccessCodeDB(AccessCodeDBuser, AccessCodeDBpass, AccessCodeDBhost);
        preparedStatement = connection.prepareStatement(statement);
        results = preparedStatement.executeQuery();

        results.next();

        if(results.getInt(1) == 0) {

        } else if(results.getInt(1) >= 1) {
            return 1;
        }

        connection = DBConnections.getAccessCodeDB(AccessCodeDBuser, AccessCodeDBpass, AccessCodeDBhost);
        preparedStatement = connection.prepareStatement(statement2);
        preparedStatement.executeUpdate();
        return 2;
    } catch (SQLException e) {
        return 0;
    }
}

private static String genAccessCode() {
    randI = ThreadLocalRandom.current().nextInt(min, max + 1);
    randS = randI + "";
    randFinal = StringUtils.toMD5(randS);
    return randFinal;
}

}

在AccessCode()静态方法中有三次调用newAccessCode()方法。 换成

public static void AccessCode() {
int newAccessCodeReturn = newAccessCode();
    if(newAccessCodeR`enter code here`eturn  == 0) {
        ServerLogger.writeLog("[ALERT] Database Error");
    } else if(newAccessCodeReturn  == 1) {
        //Reruns the code generator, to make a unique code
        newAccessCode();
    } else if(newAccessCodeReturn  == 2) {
        ServerLogger.writeLog("[NOTE] New Access Code: " + newAccessCode);
    }
}

您在
if/else if
代码中重复调用
newAccessCode()
。每次这样做时,它都会插入数据库。调用它一次并将结果保存在变量中

int result = newAccessCode();
if(result == 0) {
    ServerLogger.writeLog("[ALERT] Database Error");
} else if(result == 1) {
    //Reruns the code generator, to make a unique code
    newAccessCode();
} else if(result == 2) {
    ServerLogger.writeLog("[NOTE] New Access Code: " + newAccessCode);
}
或者使用
开关
语句:

switch (newAccessCode()) {
    case 0:
        ServerLogger.writeLog("[ALERT] Database Error");
        break;
    case 1:
        //Reruns the code generator, to make a unique code
        newAccessCode();
        break;
    case 2:
        ServerLogger.writeLog("[NOTE] New Access Code: " + newAccessCode);
        break;
}

每次运行AccessCode()函数时,if语句也会运行该语句。所以不要这样做:

if(newAccessCode() == 0)
您应该使新的整数值集等于newAccessCode()函数的值,然后检查int的值

因此:

然后检查returnValue的值

if(returnValue == 0)
这会解决你的问题

if(returnValue == 0)