MySQL запрос только вставка некоторых данных и сортировка данных - PullRequest
0 голосов
/ 24 января 2019

У меня есть две проблемы здесь. Позвольте мне сначала описать цель программы. Я просто хочу заполнить строку company_id моей таблицы 100000 идентификаторами строк в диапазоне от 00000-99999, перемешанными, без повторов. Мне удалось создать такой массив. Теперь я пытаюсь заполнить мой столбец первичного ключа этим массивом. Как видно из моего кода ниже, я пытаюсь сделать это с помощью цикла for. Я новичок в MySQL, поэтому я не уверен, что это эффективный способ вставить массив в столбец. Первая проблема заключается в том, что вводится только 1000 строк. Вторая проблема - сортировка строк по номеру (00000, 00001 и т. Д.). Мой код ниже. Есть идеи? Благодаря.

Обновление:

Я решил одну из проблем. Я был достаточно глуп, чтобы думать, что он покажет таблицу целиком. Я просто пошел на MySQLWorkbench > Preferences > SQL Execution > Limit Rows Count. До сих пор не понимаю, почему он автоматически сортирует мою таблицу по первичному ключу.

package populateDB;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Random;

public class PopulateDB {
    public static void main(String[] args) {

        int[] nums = new int[100000];
        String[] ids = new String[100000];

        // Fill array with numbers 0-99999
        for(int i = 0; i < ids.length; i++) {
            nums[i] = i;
        }

        // Fill array to give length
        Arrays.fill(ids, "fill");

        shuffleArray(nums);

        // Changes numbers such as 235 to 00235
        for(int i = 0; i < ids.length; i++) {
            ids[i] = createString(nums[i]);
        }

        try
        {
          // Create a MySQL database connection
          String myDriver = "org.gjt.mm.mysql.Driver";
          String myUrl = "jdbc:mysql://localhost:3306/humansight_schema";
          Class.forName(myDriver);
          Connection conn = DriverManager.getConnection(myUrl, "root", "password");

          // The MySQL insert statement
          String query = " insert into user_data (company_id)"
            + " values (?)";
          for(int i = 0; i < ids.length; i++) {

            // Create the MySQL insert PreparedStatement
            PreparedStatement preparedStmt = conn.prepareStatement(query);
            preparedStmt.setString (1, ids[i]);

            // Execute the PreparedStatement
            preparedStmt.execute();

          }
          conn.close();

          System.out.println("Done");
        }
        catch (Exception e)
        {
          System.err.println("Got an exception!");
          System.err.println(e.getMessage());
        }
    }

    private static void shuffleArray(int[] array)
    {
        int index;
        Random random = new Random();
        for (int i = array.length - 1; i > 0; i--)
        {
            index = random.nextInt(i + 1);
            if (index != i)
            {
                array[index] ^= array[i];
                array[i] ^= array[index];
                array[index] ^= array[i];
            }
        }
    }

    private static String createString(int num) {

        String numString = Integer.toString(num);
        int zeroesToAdd = 5 - numString.length();
        String zeroes = "";

        for(int i = 0; i < zeroesToAdd; i++) {
            zeroes = zeroes.concat("0");
        }

        return zeroes.concat(numString);
    }
}
...