Можно ли вставлять записи в MySQL с разными параметрами (ключами и значениями) каждый раз, используя одну и ту же функцию вставки в Java?

Я пытаюсь выяснить, возможно ли использовать одну и ту же функцию вставки каждый раз с новыми различными параметрами в Java 8 & MySQL. Я знаю, что это возможно в PHP, так как у меня есть код PHP ниже:

это массив записей:

$Customer_details=[
'firstname' => $Firstname,
'lastname'=> $lastname,
'phone'  => $phone,
'email'  => $email,
'password'=> $hash

];

После создания объекта класса, который является $ object2, это записи:

$object2->insert($pdo,'customer',$Customer_details);

Следующий код является кодом функции вставки PHP:

function insert( $pdo, $table, $record) {
$keys = array_keys( $record);
$values = implode( ', ' , $keys);
$valuesWithColon = implode( ', :' , $keys);
$query = 'INSERT INTO '  . $table . ' ('  . $values . ') VALUES (:'  .
$valuesWithColon . ')' ;
$stmt = $pdo->prepare( $query);
$stmt->execute( $record);
return $stmt;
}

Кто-нибудь может просто показать мне пример того же самого в Java, пожалуйста?

2

Решение

Да, вы можете сделать это почти так же, как и с php, как прокомментировал @lexicore, общий шаблон для параметризованных SQL-запросов в Java — использовать PreparedStatements

Вот пример … вам просто нужно обернуть код в этом примере в функцию, чтобы сделать его многократно используемым, как в вашем примере с PHP.
https://alvinalexander.com/java/java-mysql-insert-example-preparedstatement

public void insert(String fname, String lname, Date created, boolean isAdmin, int points) {
String myDriver = "org.gjt.mm.mysql.Driver";
String myUrl = "jdbc:mysql://localhost/test";
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(myUrl, "root", "");

// create a sql date object so we can use it in our INSERT statement
Calendar calendar = Calendar.getInstance();
java.sql.Date startDate = new java.sql.Date(calendar.getTime().getTime());

// the mysql insert statement
String query = " insert into users (first_name, last_name, date_created, is_admin, num_points)"+ " values (?, ?, ?, ?, ?)";

// create the mysql insert preparedstatement
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setString (1, fname);
preparedStmt.setString (2, lname);
preparedStmt.setDate   (3, created);
preparedStmt.setBoolean(4, isAdmin);
preparedStmt.setInt    (5, points);

// execute the preparedstatement
preparedStmt.execute();

conn.close();
}
0

Другие решения

Я написал это около года назад, но я думаю, это то, что вы ищете.

Я верю, что вы хотите изменить List<Object и используйте оператор switch с instanceOfпроанализировать это.

private String insert(String tableName, List<String> columns, List<String> values){
StringBuilder stringBuilder = new StringBuilder("INSERT INTO " + tableName + " (");
for(String column :columns){
stringBuilder.append(column + ",");
}
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));
stringBuilder.append(") VALUES (");
for(String value : values){
stringBuilder.append(value + ",");
}
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));
stringBuilder.append(")");
return stringBuilder.toString();
}

Как уже упоминалось ранее, используйте это и сделайте второй цикл:

for(int z =0; z < columns.size(); z++){
stringBuilder.append("?,");
}

Использовать с PreparedStatements зная, что я знаю сейчас, я бы выбрал последнее.

0

По вопросам рекламы [email protected]